CLASS ltc_shift_booker DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. TYPES ty_reason TYPE c LENGTH 10. DATA mo_cut TYPE REF TO {{p}}shift_booker. METHODS setup. METHODS valid_shift RETURNING VALUE(rs_shift) TYPE {{p}}shift_booker=>ty_shift. METHODS expect_reason IMPORTING is_shift TYPE {{p}}shift_booker=>ty_shift iv_reason TYPE ty_reason. METHODS expect_pay IMPORTING is_shift TYPE {{p}}shift_booker=>ty_shift iv_pay TYPE {{p}}shift_booker=>ty_amount. METHODS standard_pay FOR TESTING. METHODS overtime_pay FOR TESTING. METHODS empty_order FOR TESTING. METHODS zero_hours FOR TESTING. METHODS bad_mode FOR TESTING. METHODS bad_group FOR TESTING. METHODS zero_pieces FOR TESTING. ENDCLASS. CLASS ltc_shift_booker IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}shift_booker( ). ENDMETHOD. METHOD valid_shift. rs_shift = VALUE #( order_no = '4711' start_date = '20240212' work_hours = '8.00' calc_mode = 'STD' group_code = 'A' piece_count = 100 ). ENDMETHOD. METHOD expect_reason. TRY. mo_cut->evaluate( is_shift ). cl_abap_unit_assert=>fail( msg = |no exception for { iv_reason }| ). CATCH {{p}}cx_shift_error INTO DATA(lx_error). cl_abap_unit_assert=>assert_equals( exp = iv_reason act = lx_error->mv_reason ). ENDTRY. ENDMETHOD. METHOD expect_pay. TRY. cl_abap_unit_assert=>assert_equals( exp = iv_pay act = mo_cut->evaluate( is_shift ) ). CATCH {{p}}cx_shift_error. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. ENDMETHOD. METHOD standard_pay. expect_pay( is_shift = valid_shift( ) iv_pay = '194.00' ). ENDMETHOD. METHOD overtime_pay. DATA(ls_shift) = valid_shift( ). ls_shift-work_hours = '7.50'. ls_shift-calc_mode = 'OT1'. ls_shift-group_code = 'B'. ls_shift-piece_count = 40. expect_pay( is_shift = ls_shift iv_pay = '267.50' ). ENDMETHOD. METHOD empty_order. DATA(ls_shift) = valid_shift( ). ls_shift-order_no = ''. expect_reason( is_shift = ls_shift iv_reason = 'ORDER' ). ENDMETHOD. METHOD zero_hours. DATA(ls_shift) = valid_shift( ). ls_shift-work_hours = '0.00'. expect_reason( is_shift = ls_shift iv_reason = 'HOURS' ). ENDMETHOD. METHOD bad_mode. DATA(ls_shift) = valid_shift( ). ls_shift-calc_mode = 'XX'. expect_reason( is_shift = ls_shift iv_reason = 'MODE' ). ENDMETHOD. METHOD bad_group. DATA(ls_shift) = valid_shift( ). ls_shift-group_code = 'D'. expect_reason( is_shift = ls_shift iv_reason = 'GROUP' ). ENDMETHOD. METHOD zero_pieces. DATA(ls_shift) = valid_shift( ). ls_shift-piece_count = 0. expect_reason( is_shift = ls_shift iv_reason = 'COUNT' ). ENDMETHOD. ENDCLASS.