CLASS ltc_gravel_pricer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. CLASS-DATA mo_env TYPE REF TO if_osql_test_environment. DATA mo_cut TYPE REF TO {{p}}gravel_pricer. CLASS-METHODS class_setup. CLASS-METHODS class_teardown. METHODS setup. METHODS small_order_ok FOR TESTING. METHODS medium_order_discount FOR TESTING. METHODS bulk_order_discount FOR TESTING. METHODS five_tonnes_discount FOR TESTING. METHODS unknown_order FOR TESTING. METHODS unknown_grade FOR TESTING. METHODS zero_quantity FOR TESTING. ENDCLASS. CLASS ltc_gravel_pricer IMPLEMENTATION. METHOD class_setup. mo_env = cl_osql_test_environment=>create( VALUE #( ( '{{P}}GRV_ORD' ) ) ). DATA lt_order TYPE STANDARD TABLE OF {{p}}grv_ord WITH EMPTY KEY. lt_order = VALUE #( ( order_id = 'ORD0000001' grade = 'F' tonnes = 3 customer = 'BuildIt Ltd' ) ( order_id = 'ORD0000002' grade = 'M' tonnes = 12 customer = 'Roadworks AG' ) ( order_id = 'ORD0000003' grade = 'C' tonnes = 25 customer = 'City Council' ) ( order_id = 'ORD0000004' grade = 'F' tonnes = 5 customer = 'Stone and Co' ) ( order_id = 'ORD0000005' grade = 'X' tonnes = 7 customer = 'Bad Data Ltd' ) ( order_id = 'ORD0000006' grade = 'M' tonnes = 0 customer = 'Zero Ltd' ) ). mo_env->insert_test_data( lt_order ). ENDMETHOD. METHOD class_teardown. mo_env->destroy( ). ENDMETHOD. METHOD setup. mo_cut = NEW {{p}}gravel_pricer( ). ENDMETHOD. METHOD small_order_ok. DATA(ls_result) = mo_cut->price_order( 'ORD0000001' ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}gravel_pricer=>ty_amount( '126.00' ) act = ls_result-net_amount ). cl_abap_unit_assert=>assert_equals( exp = {{p}}gravel_pricer=>c_reason-ok act = ls_result-reason ). ENDMETHOD. METHOD medium_order_discount. DATA(ls_result) = mo_cut->price_order( 'ORD0000002' ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}gravel_pricer=>ty_amount( '410.40' ) act = ls_result-net_amount ). cl_abap_unit_assert=>assert_equals( exp = {{p}}gravel_pricer=>c_reason-ok act = ls_result-reason ). ENDMETHOD. METHOD bulk_order_discount. DATA(ls_result) = mo_cut->price_order( 'ORD0000003' ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}gravel_pricer=>ty_amount( '675.00' ) act = ls_result-net_amount ). cl_abap_unit_assert=>assert_equals( exp = {{p}}gravel_pricer=>c_reason-ok act = ls_result-reason ). ENDMETHOD. METHOD five_tonnes_discount. DATA(ls_result) = mo_cut->price_order( 'ORD0000004' ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}gravel_pricer=>ty_amount( '199.50' ) act = ls_result-net_amount ). cl_abap_unit_assert=>assert_equals( exp = {{p}}gravel_pricer=>c_reason-ok act = ls_result-reason ). ENDMETHOD. METHOD unknown_order. DATA(ls_result) = mo_cut->price_order( 'ORD9999999' ). cl_abap_unit_assert=>assert_equals( exp = {{p}}gravel_pricer=>c_reason-not_found act = ls_result-reason ). ENDMETHOD. METHOD unknown_grade. DATA(ls_result) = mo_cut->price_order( 'ORD0000005' ). cl_abap_unit_assert=>assert_equals( exp = {{p}}gravel_pricer=>c_reason-grade act = ls_result-reason ). ENDMETHOD. METHOD zero_quantity. DATA(ls_result) = mo_cut->price_order( 'ORD0000006' ). cl_abap_unit_assert=>assert_equals( exp = {{p}}gravel_pricer=>c_reason-quantity act = ls_result-reason ). ENDMETHOD. ENDCLASS.