Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
76 lines
3.8 KiB
ABAP
76 lines
3.8 KiB
ABAP
CLASS ltc_meter_consumption DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
PRIVATE SECTION.
|
|
DATA mo_cut TYPE REF TO {{p}}if_meter_reading.
|
|
METHODS setup.
|
|
METHODS two_readings FOR TESTING.
|
|
METHODS empty_input FOR TESTING.
|
|
METHODS negative_ignored FOR TESTING.
|
|
METHODS duplicate_date FOR TESTING.
|
|
METHODS rollover_is_zero FOR TESTING.
|
|
METHODS sorted_result FOR TESTING.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS ltc_meter_consumption IMPLEMENTATION.
|
|
METHOD setup.
|
|
mo_cut = NEW {{p}}meter_consumption( ).
|
|
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 ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 100 act = lt_result[ 1 ]-opening_value ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 175 act = lt_result[ 1 ]-closing_value ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 75 act = lt_result[ 1 ]-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_initial( act = 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 = '20240120' reading_value = -7 )
|
|
( 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 ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 100 act = lt_result[ 1 ]-consumption ).
|
|
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 = 130 )
|
|
( meter_id = 'M0001' reading_date = '20240110' reading_value = 110 )
|
|
( meter_id = 'M0001' reading_date = '20240210' reading_value = 210 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 130 act = lt_result[ 1 ]-opening_value ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 80 act = lt_result[ 1 ]-consumption ).
|
|
ENDMETHOD.
|
|
|
|
METHOD rollover_is_zero.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0001' reading_date = '20240110' reading_value = 900 )
|
|
( meter_id = 'M0001' reading_date = '20240210' reading_value = 100 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lt_result[ 1 ]-consumption ).
|
|
ENDMETHOD.
|
|
|
|
METHOD sorted_result.
|
|
DATA lt_readings TYPE {{p}}if_meter_reading=>tt_readings.
|
|
lt_readings = VALUE #( ( meter_id = 'M0002' reading_date = '20240110' reading_value = 20 )
|
|
( meter_id = 'M0001' reading_date = '20240110' reading_value = 10 ) ).
|
|
DATA(lt_result) = mo_cut->calculate( lt_readings ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 2 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 ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|