CLASS {{p}}t21_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS bill IMPORTING iv_consumption TYPE decfloat34 iv_tariff TYPE string iv_direct_debit TYPE abap_bool DEFAULT abap_false EXPORTING ev_bill TYPE decfloat34 ev_subrc TYPE sysubrc. METHODS basic_no_tier FOR TESTING. METHODS tier_discount FOR TESTING. METHODS green_tariff FOR TESTING. METHODS night_tariff FOR TESTING. METHODS direct_debit FOR TESTING. METHODS rounding FOR TESTING. METHODS tier_boundary FOR TESTING. METHODS zero_consumption FOR TESTING. METHODS negative_consumption FOR TESTING. METHODS unknown_tariff FOR TESTING. ENDCLASS. CLASS {{p}}t21_hidden IMPLEMENTATION. METHOD bill. CALL FUNCTION '{{P}}ENERGY_BILL' EXPORTING iv_consumption = iv_consumption iv_tariff = iv_tariff iv_direct_debit = iv_direct_debit IMPORTING ev_bill = ev_bill EXCEPTIONS invalid_consumption = 1 invalid_tariff = 2 OTHERS = 3. ev_subrc = sy-subrc. ENDMETHOD. METHOD basic_no_tier. bill( EXPORTING iv_consumption = 100 iv_tariff = `BASIC` IMPORTING ev_bill = DATA(lv_bill) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '44.00' ) act = lv_bill ). ENDMETHOD. METHOD tier_discount. bill( EXPORTING iv_consumption = 400 iv_tariff = `BASIC` IMPORTING ev_bill = DATA(lv_bill) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '133.60' ) act = lv_bill ). ENDMETHOD. METHOD green_tariff. bill( EXPORTING iv_consumption = 250 iv_tariff = `GREEN` IMPORTING ev_bill = DATA(lv_bill) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '107.00' ) act = lv_bill ). ENDMETHOD. METHOD night_tariff. bill( EXPORTING iv_consumption = 500 iv_tariff = `NIGHT` IMPORTING ev_bill = DATA(lv_bill) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '122.40' ) act = lv_bill ). ENDMETHOD. METHOD direct_debit. bill( EXPORTING iv_consumption = 400 iv_tariff = `BASIC` iv_direct_debit = abap_true IMPORTING ev_bill = DATA(lv_bill) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '130.93' ) act = lv_bill ). ENDMETHOD. METHOD rounding. bill( EXPORTING iv_consumption = 309 iv_tariff = `BASIC` IMPORTING ev_bill = DATA(lv_bill) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '110.30' ) act = lv_bill ). ENDMETHOD. METHOD tier_boundary. bill( EXPORTING iv_consumption = 300 iv_tariff = `BASIC` IMPORTING ev_bill = DATA(lv_bill) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '108.00' ) act = lv_bill ). ENDMETHOD. METHOD zero_consumption. bill( EXPORTING iv_consumption = 0 iv_tariff = `NIGHT` IMPORTING ev_bill = DATA(lv_bill) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.00' ) act = lv_bill ). ENDMETHOD. METHOD negative_consumption. bill( EXPORTING iv_consumption = -1 iv_tariff = `BASIC` IMPORTING ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). ENDMETHOD. METHOD unknown_tariff. bill( EXPORTING iv_consumption = 100 iv_tariff = `ECO` IMPORTING ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rc ). ENDMETHOD. ENDCLASS.