CLASS ltc_print_job_pricer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}print_job_pricer. METHODS setup. METHODS price IMPORTING iv_pages TYPE i iv_copies TYPE i iv_paper TYPE {{p}}print_job_pricer=>ty_paper iv_color TYPE {{p}}print_job_pricer=>ty_color iv_dept TYPE {{p}}print_job_pricer=>ty_dept RETURNING VALUE(rv_price) TYPE {{p}}print_job_pricer=>ty_price. METHODS cents IMPORTING iv_cents TYPE i RETURNING VALUE(rv_price) TYPE {{p}}print_job_pricer=>ty_price. METHODS a4_mono_price FOR TESTING. METHODS color_price FOR TESTING. METHODS volume_discount FOR TESTING. METHODS minimum_charge FOR TESTING. METHODS zero_pages_raises FOR TESTING. METHODS over_limit_raises FOR TESTING. ENDCLASS. CLASS ltc_print_job_pricer IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}print_job_pricer( ). ENDMETHOD. METHOD price. TRY. rv_price = mo_cut->calculate_price( iv_pages = iv_pages iv_copies = iv_copies iv_paper = iv_paper iv_color = iv_color iv_dept = iv_dept ). CATCH cx_root. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. ENDMETHOD. METHOD cents. DATA lv_price TYPE {{p}}print_job_pricer=>ty_price. lv_price = iv_cents. rv_price = lv_price / 100. ENDMETHOD. METHOD a4_mono_price. cl_abap_unit_assert=>assert_equals( exp = cents( 500 ) act = price( iv_pages = 100 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'SALE' ) ). ENDMETHOD. METHOD color_price. cl_abap_unit_assert=>assert_equals( exp = cents( 2000 ) act = price( iv_pages = 100 iv_copies = 1 iv_paper = 'A4' iv_color = 'C' iv_dept = 'SALE' ) ). ENDMETHOD. METHOD volume_discount. cl_abap_unit_assert=>assert_equals( exp = cents( 2850 ) act = price( iv_pages = 600 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'IT' ) ). ENDMETHOD. METHOD minimum_charge. cl_abap_unit_assert=>assert_equals( exp = cents( 100 ) act = price( iv_pages = 10 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'SALE' ) ). ENDMETHOD. METHOD zero_pages_raises. TRY. mo_cut->calculate_price( iv_pages = 0 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'SALE' ). cl_abap_unit_assert=>fail( msg = 'exception expected' ). CATCH {{p}}cx_print_job_error INTO DATA(lo_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_print_job_error=>c_reason-pages act = lo_error->mv_reason ). ENDTRY. ENDMETHOD. METHOD over_limit_raises. TRY. mo_cut->calculate_price( iv_pages = 3000 iv_copies = 2 iv_paper = 'A4' iv_color = 'M' iv_dept = 'SALE' ). cl_abap_unit_assert=>fail( msg = 'exception expected' ). CATCH {{p}}cx_print_limit INTO DATA(lo_error). cl_abap_unit_assert=>assert_equals( exp = 6000 act = lo_error->mv_pages ). ENDTRY. ENDMETHOD. ENDCLASS.