135 lines
5.9 KiB
ABAP
135 lines
5.9 KiB
ABAP
CLASS {{p}}t_oil_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
|
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
PRIVATE SECTION.
|
|
DATA mo_cut TYPE REF TO {{p}}oil_settlement.
|
|
|
|
METHODS setup.
|
|
METHODS sums_same_restaurant FOR TESTING.
|
|
METHODS separates_restaurants FOR TESTING.
|
|
METHODS ignores_zero_litres FOR TESTING.
|
|
METHODS ignores_negative_litres FOR TESTING.
|
|
METHODS ignores_empty_name FOR TESTING.
|
|
METHODS normalises_name FOR TESTING.
|
|
METHODS keeps_latest_date FOR TESTING.
|
|
METHODS sorts_by_restaurant FOR TESTING.
|
|
METHODS empty_input FOR TESTING.
|
|
METHODS all_invalid FOR TESTING.
|
|
METHODS find_row
|
|
IMPORTING it_result TYPE {{p}}oil_settlement=>tt_settlements
|
|
iv_restaurant TYPE {{p}}oil_settlement=>ty_restaurant
|
|
RETURNING VALUE(rs_row) TYPE {{p}}oil_settlement=>ty_settlement.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}t_oil_hidden IMPLEMENTATION.
|
|
METHOD setup.
|
|
mo_cut = NEW {{p}}oil_settlement( ).
|
|
ENDMETHOD.
|
|
|
|
METHOD sums_same_restaurant.
|
|
DATA(lt_result) = mo_cut->settle( VALUE #(
|
|
( restaurant = 'R001' collected_on = '20240110' litres = 100 )
|
|
( restaurant = 'R001' collected_on = '20240112' litres = 50 ) ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
DATA(ls_row) = find_row( it_result = lt_result iv_restaurant = 'R001' ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 150 act = ls_row-total_litres ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_row-round_count ).
|
|
ENDMETHOD.
|
|
|
|
METHOD separates_restaurants.
|
|
DATA(lt_result) = mo_cut->settle( VALUE #(
|
|
( restaurant = 'R001' collected_on = '20240110' litres = 100 )
|
|
( restaurant = 'R002' collected_on = '20240110' litres = 200 ) ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_result ) ).
|
|
DATA(ls_r001) = find_row( it_result = lt_result iv_restaurant = 'R001' ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 100 act = ls_r001-total_litres ).
|
|
DATA(ls_r002) = find_row( it_result = lt_result iv_restaurant = 'R002' ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 200 act = ls_r002-total_litres ).
|
|
ENDMETHOD.
|
|
|
|
METHOD ignores_zero_litres.
|
|
DATA(lt_result) = mo_cut->settle( VALUE #(
|
|
( restaurant = 'R001' collected_on = '20240110' litres = 0 )
|
|
( restaurant = 'R002' collected_on = '20240110' litres = 30 ) ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
DATA(ls_row) = find_row( it_result = lt_result iv_restaurant = 'R002' ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 30 act = ls_row-total_litres ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = ls_row-round_count ).
|
|
ENDMETHOD.
|
|
|
|
METHOD ignores_negative_litres.
|
|
DATA(lt_result) = mo_cut->settle( VALUE #(
|
|
( restaurant = 'R001' collected_on = '20240110' litres = -5 )
|
|
( restaurant = 'R001' collected_on = '20240111' litres = 40 ) ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
DATA(ls_row) = find_row( it_result = lt_result iv_restaurant = 'R001' ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 40 act = ls_row-total_litres ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = ls_row-round_count ).
|
|
ENDMETHOD.
|
|
|
|
METHOD ignores_empty_name.
|
|
DATA(lt_result) = mo_cut->settle( VALUE #(
|
|
( restaurant = space collected_on = '20240110' litres = 100 )
|
|
( restaurant = ' ' collected_on = '20240110' litres = 100 ) ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD normalises_name.
|
|
DATA(lt_result) = mo_cut->settle( VALUE #(
|
|
( restaurant = 'r001' collected_on = '20240110' litres = 100 )
|
|
( restaurant = ' R001 ' collected_on = '20240111' litres = 50 ) ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
DATA(ls_row) = find_row( it_result = lt_result iv_restaurant = 'R001' ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 150 act = ls_row-total_litres ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 'R001' act = ls_row-restaurant ).
|
|
ENDMETHOD.
|
|
|
|
METHOD keeps_latest_date.
|
|
DATA(lt_result) = mo_cut->settle( VALUE #(
|
|
( restaurant = 'R001' collected_on = '20240110' litres = 10 )
|
|
( restaurant = 'R001' collected_on = '20240305' litres = 10 )
|
|
( restaurant = 'R001' collected_on = '20240201' litres = 10 ) ) ).
|
|
DATA lv_expected TYPE d.
|
|
lv_expected = '20240305'.
|
|
DATA(ls_row) = find_row( it_result = lt_result iv_restaurant = 'R001' ).
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_expected act = ls_row-last_collection ).
|
|
ENDMETHOD.
|
|
|
|
METHOD sorts_by_restaurant.
|
|
DATA(lt_result) = mo_cut->settle( VALUE #(
|
|
( restaurant = 'R003' collected_on = '20240110' litres = 10 )
|
|
( restaurant = 'R001' collected_on = '20240110' litres = 10 )
|
|
( restaurant = 'R002' collected_on = '20240110' litres = 10 ) ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 3 act = lines( lt_result ) ).
|
|
DATA lv_order TYPE string.
|
|
LOOP AT lt_result INTO DATA(ls_row).
|
|
lv_order = lv_order && ls_row-restaurant+0(4).
|
|
ENDLOOP.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'R001R002R003' act = lv_order ).
|
|
ENDMETHOD.
|
|
|
|
METHOD empty_input.
|
|
DATA lt_empty TYPE {{p}}oil_settlement=>tt_collections.
|
|
DATA(lt_result) = mo_cut->settle( lt_empty ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD all_invalid.
|
|
DATA(lt_result) = mo_cut->settle( VALUE #(
|
|
( restaurant = 'R001' collected_on = '20240110' litres = 0 )
|
|
( restaurant = space collected_on = '20240110' litres = 50 ) ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD find_row.
|
|
DATA ls_row TYPE {{p}}oil_settlement=>ty_settlement.
|
|
DATA lv_found TYPE abap_bool.
|
|
LOOP AT it_result INTO ls_row WHERE restaurant = iv_restaurant.
|
|
rs_row = ls_row.
|
|
lv_found = abap_true.
|
|
EXIT.
|
|
ENDLOOP.
|
|
cl_abap_unit_assert=>assert_equals( exp = abap_true act = lv_found ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|