CLASS {{p}}ad_test 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_4980 TYPE decfloat34 VALUE '49.80'. CONSTANTS lc_price_4482 TYPE decfloat34 VALUE '44.82'. CONSTANTS lc_price_6980 TYPE decfloat34 VALUE '69.80'. CONSTANTS lc_price_2000 TYPE decfloat34 VALUE '20.00'. 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 line_price FOR TESTING. METHODS no_discount_short FOR TESTING. METHODS discount_ten_pct FOR TESTING. METHODS photo_and_discount FOR TESTING. METHODS minimum_price FOR TESTING. METHODS invalid_input FOR TESTING. ENDCLASS. CLASS {{p}}ad_test 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 line_price. 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 no_discount_short. DATA lv_price TYPE decfloat34. call( EXPORTING iv_lines = 4 iv_insertions = 2 IMPORTING ev_price = lv_price ). assert_price( iv_expected = lc_price_4980 iv_actual = lv_price ). ENDMETHOD. METHOD discount_ten_pct. 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 photo_and_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 minimum_price. 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 invalid_input. DATA lv_price TYPE decfloat34. DATA lv_rc TYPE sysubrc. call( EXPORTING iv_lines = 0 iv_insertions = 1 IMPORTING ev_price = lv_price ev_subrc = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). ENDMETHOD. ENDCLASS.