CLASS {{p}}ad_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. CONSTANTS lc_price_2490 TYPE decfloat34 VALUE '24.90'. CONSTANTS lc_price_4990 TYPE decfloat34 VALUE '49.90'. CONSTANTS lc_price_2000 TYPE decfloat34 VALUE '20.00'. CONSTANTS lc_price_4482 TYPE decfloat34 VALUE '44.82'. CONSTANTS lc_price_3984 TYPE decfloat34 VALUE '39.84'. CONSTANTS lc_price_3362 TYPE decfloat34 VALUE '33.62'. CONSTANTS lc_price_6980 TYPE decfloat34 VALUE '69.80'. METHODS call IMPORTING iv_lines TYPE i iv_insertions TYPE i iv_photo TYPE abap_bool DEFAULT abap_false EXPORTING ev_price TYPE decfloat34 ev_subrc TYPE sysubrc. METHODS assert_price IMPORTING iv_expected TYPE decfloat34 iv_actual TYPE decfloat34. METHODS two_lines_one_run FOR TESTING. METHODS photo_surcharge FOR TESTING. METHODS minimum_charge FOR TESTING. METHODS minimum_after_disc FOR TESTING. METHODS discount_ten_percent FOR TESTING. METHODS discount_twenty_pct FOR TESTING. METHODS rounding_half_up FOR TESTING. METHODS photo_with_discount FOR TESTING. METHODS rejects_zero_lines FOR TESTING. METHODS rejects_zero_runs FOR TESTING. ENDCLASS. CLASS {{p}}ad_hidden IMPLEMENTATION. METHOD call. ev_price = 0. CALL FUNCTION '{{P}}AD_PRICE' EXPORTING iv_lines = iv_lines iv_insertions = iv_insertions iv_photo = iv_photo IMPORTING ev_price = ev_price EXCEPTIONS invalid_lines = 1 invalid_insertions = 2 OTHERS = 3. ev_subrc = sy-subrc. ENDMETHOD. METHOD assert_price. cl_abap_unit_assert=>assert_equals( exp = iv_expected act = iv_actual ). ENDMETHOD. METHOD two_lines_one_run. DATA lv_price TYPE decfloat34. DATA lv_rc TYPE sysubrc. call( EXPORTING iv_lines = 2 iv_insertions = 1 IMPORTING ev_price = lv_price ev_subrc = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). assert_price( iv_expected = lc_price_2490 iv_actual = lv_price ). ENDMETHOD. METHOD photo_surcharge. DATA lv_price TYPE decfloat34. call( EXPORTING iv_lines = 2 iv_insertions = 1 iv_photo = abap_true IMPORTING ev_price = lv_price ). assert_price( iv_expected = lc_price_4990 iv_actual = lv_price ). ENDMETHOD. METHOD minimum_charge. DATA lv_price TYPE decfloat34. call( EXPORTING iv_lines = 1 iv_insertions = 1 IMPORTING ev_price = lv_price ). assert_price( iv_expected = lc_price_2000 iv_actual = lv_price ). ENDMETHOD. METHOD minimum_after_disc. DATA lv_price TYPE decfloat34. call( EXPORTING iv_lines = 2 iv_insertions = 6 IMPORTING ev_price = lv_price ). assert_price( iv_expected = lc_price_2000 iv_actual = lv_price ). ENDMETHOD. METHOD discount_ten_percent. DATA lv_price TYPE decfloat34. call( EXPORTING iv_lines = 4 iv_insertions = 3 IMPORTING ev_price = lv_price ). assert_price( iv_expected = lc_price_4482 iv_actual = lv_price ). ENDMETHOD. METHOD discount_twenty_pct. DATA lv_price TYPE decfloat34. call( EXPORTING iv_lines = 4 iv_insertions = 6 IMPORTING ev_price = lv_price ). assert_price( iv_expected = lc_price_3984 iv_actual = lv_price ). ENDMETHOD. METHOD rounding_half_up. DATA lv_price TYPE decfloat34. call( EXPORTING iv_lines = 3 iv_insertions = 3 IMPORTING ev_price = lv_price ). assert_price( iv_expected = lc_price_3362 iv_actual = lv_price ). ENDMETHOD. METHOD photo_with_discount. DATA lv_price TYPE decfloat34. call( EXPORTING iv_lines = 5 iv_insertions = 6 iv_photo = abap_true IMPORTING ev_price = lv_price ). assert_price( iv_expected = lc_price_6980 iv_actual = lv_price ). ENDMETHOD. METHOD rejects_zero_lines. DATA lv_rc TYPE sysubrc. call( EXPORTING iv_lines = 0 iv_insertions = 1 IMPORTING ev_subrc = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). ENDMETHOD. METHOD rejects_zero_runs. DATA lv_rc TYPE sysubrc. call( EXPORTING iv_lines = 2 iv_insertions = 0 IMPORTING ev_subrc = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rc ). ENDMETHOD. ENDCLASS.