Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
152 lines
8.0 KiB
ABAP
152 lines
8.0 KiB
ABAP
CLASS {{p}}t02_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
|
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
PRIVATE SECTION.
|
|
DATA mo_cut TYPE REF TO {{p}}if_meter_reading.
|
|
METHODS setup.
|
|
METHODS assert_row
|
|
IMPORTING iv_index TYPE i
|
|
iv_meter_id TYPE {{p}}if_meter_reading=>ty_meter_id
|
|
iv_opening TYPE {{p}}if_meter_reading=>ty_value
|
|
iv_closing TYPE {{p}}if_meter_reading=>ty_value
|
|
iv_consumption TYPE {{p}}if_meter_reading=>ty_value
|
|
it_result TYPE {{p}}if_meter_reading=>tt_result.
|
|
METHODS empty_input FOR TESTING.
|
|
METHODS single_reading FOR TESTING.
|
|
METHODS two_readings FOR TESTING.
|
|
METHODS negative_ignored FOR TESTING.
|
|
METHODS only_negative FOR TESTING.
|
|
METHODS zero_reading FOR TESTING.
|
|
METHODS duplicate_date FOR TESTING.
|
|
METHODS sorted_by_meter FOR TESTING.
|
|
METHODS rollover FOR TESTING.
|
|
METHODS date_order FOR TESTING.
|
|
METHODS several_meters FOR TESTING.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}t02_hidden IMPLEMENTATION.
|
|
METHOD setup.
|
|
mo_cut = NEW {{p}}meter_consumption( ).
|
|
ENDMETHOD.
|
|
|
|
METHOD assert_row.
|
|
DATA(ls_row) = it_result[ iv_index ].
|
|
cl_abap_unit_assert=>assert_equals( exp = iv_meter_id act = ls_row-meter_id msg = 'meter id' ).
|
|
cl_abap_unit_assert=>assert_equals( exp = iv_opening act = ls_row-opening_value msg = 'opening' ).
|
|
cl_abap_unit_assert=>assert_equals( exp = iv_closing act = ls_row-closing_value msg = 'closing' ).
|
|
cl_abap_unit_assert=>assert_equals( exp = iv_consumption act = ls_row-consumption msg = 'consumption' ).
|
|
ENDMETHOD.
|
|
|
|
METHOD empty_input.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD single_reading.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0001' reading_date = '20240110' reading_value = 100 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
assert_row( iv_index = 1 iv_meter_id = 'M0001' iv_opening = 100 iv_closing = 100
|
|
iv_consumption = 0 it_result = lt_result ).
|
|
ENDMETHOD.
|
|
|
|
METHOD two_readings.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0001' reading_date = '20240110' reading_value = 100 )
|
|
( meter_id = 'M0001' reading_date = '20240210' reading_value = 175 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
assert_row( iv_index = 1 iv_meter_id = 'M0001' iv_opening = 100 iv_closing = 175
|
|
iv_consumption = 75 it_result = lt_result ).
|
|
ENDMETHOD.
|
|
|
|
METHOD negative_ignored.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0001' reading_date = '20240110' reading_value = 100 )
|
|
( meter_id = 'M0001' reading_date = '20240115' reading_value = -3 )
|
|
( meter_id = 'M0001' reading_date = '20240210' reading_value = 200 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
assert_row( iv_index = 1 iv_meter_id = 'M0001' iv_opening = 100 iv_closing = 200
|
|
iv_consumption = 100 it_result = lt_result ).
|
|
ENDMETHOD.
|
|
|
|
METHOD only_negative.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0001' reading_date = '20240110' reading_value = -1 )
|
|
( meter_id = 'M0002' reading_date = '20240110' reading_value = -5 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD zero_reading.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0001' reading_date = '20240110' reading_value = 0 )
|
|
( meter_id = 'M0001' reading_date = '20240210' reading_value = 50 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
assert_row( iv_index = 1 iv_meter_id = 'M0001' iv_opening = 0 iv_closing = 50
|
|
iv_consumption = 50 it_result = lt_result ).
|
|
ENDMETHOD.
|
|
|
|
METHOD duplicate_date.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0001' reading_date = '20240110' reading_value = 120 )
|
|
( meter_id = 'M0001' reading_date = '20240110' reading_value = 100 )
|
|
( meter_id = 'M0001' reading_date = '20240210' reading_value = 180 )
|
|
( meter_id = 'M0001' reading_date = '20240210' reading_value = 200 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
assert_row( iv_index = 1 iv_meter_id = 'M0001' iv_opening = 120 iv_closing = 200
|
|
iv_consumption = 80 it_result = lt_result ).
|
|
ENDMETHOD.
|
|
|
|
METHOD sorted_by_meter.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0003' reading_date = '20240110' reading_value = 30 )
|
|
( meter_id = 'M0001' reading_date = '20240110' reading_value = 10 )
|
|
( meter_id = 'M0002' reading_date = '20240110' reading_value = 20 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 3 act = lines( lt_result ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 'M0001' act = lt_result[ 1 ]-meter_id ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 'M0002' act = lt_result[ 2 ]-meter_id ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 'M0003' act = lt_result[ 3 ]-meter_id ).
|
|
ENDMETHOD.
|
|
|
|
METHOD rollover.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0001' reading_date = '20240110' reading_value = 500 )
|
|
( meter_id = 'M0001' reading_date = '20240210' reading_value = 300 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
assert_row( iv_index = 1 iv_meter_id = 'M0001' iv_opening = 500 iv_closing = 300
|
|
iv_consumption = 0 it_result = lt_result ).
|
|
ENDMETHOD.
|
|
|
|
METHOD date_order.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0001' reading_date = '20240210' reading_value = 200 )
|
|
( meter_id = 'M0001' reading_date = '20240110' reading_value = 100 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
assert_row( iv_index = 1 iv_meter_id = 'M0001' iv_opening = 100 iv_closing = 200
|
|
iv_consumption = 100 it_result = lt_result ).
|
|
ENDMETHOD.
|
|
|
|
METHOD several_meters.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0001' reading_date = '20240110' reading_value = 100 )
|
|
( meter_id = 'M0001' reading_date = '20240310' reading_value = 250 )
|
|
( meter_id = 'M0002' reading_date = '20240105' reading_value = 40 )
|
|
( meter_id = 'M0002' reading_date = '20240205' reading_value = 55 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_result ) ).
|
|
assert_row( iv_index = 1 iv_meter_id = 'M0001' iv_opening = 100 iv_closing = 250
|
|
iv_consumption = 150 it_result = lt_result ).
|
|
assert_row( iv_index = 2 iv_meter_id = 'M0002' iv_opening = 40 iv_closing = 55
|
|
iv_consumption = 15 it_result = lt_result ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|