104 lines
3.5 KiB
ABAP
104 lines
3.5 KiB
ABAP
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.
|