CLASS {{p}}t_d_job_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}job_planner. METHODS setup. METHODS valid_job RETURNING VALUE(rs_job) TYPE {{p}}job_planner=>ty_job. METHODS standard_cost FOR TESTING. METHODS express_cost FOR TESTING. METHODS priority_cost FOR TESTING. METHODS wood_cost FOR TESTING. METHODS missing_id_raises FOR TESTING. METHODS bad_mode_raises FOR TESTING. METHODS bad_hours_raises FOR TESTING. METHODS bad_count_raises FOR TESTING. METHODS bad_group_raises FOR TESTING. METHODS bad_date_raises FOR TESTING. METHODS bad_value_raises FOR TESTING. ENDCLASS. CLASS {{p}}t_d_job_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}job_planner( ). ENDMETHOD. METHOD valid_job. rs_job = VALUE #( job_id = 'JOB-1000' calc_mode = 'S' work_hours = '10.00' part_count = 4 mat_group = 'ST' due_date = '20250601' net_value = '100.00' ). ENDMETHOD. METHOD standard_cost. DATA lv_exp TYPE {{p}}job_planner=>ty_cost. lv_exp = '750.00'. TRY. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = mo_cut->calculate_cost( valid_job( ) ) ). CATCH {{p}}cx_job_error. cl_abap_unit_assert=>fail( `unexpected exception` ). ENDTRY. ENDMETHOD. METHOD express_cost. DATA ls_job TYPE {{p}}job_planner=>ty_job. DATA lv_exp TYPE {{p}}job_planner=>ty_cost. ls_job = valid_job( ). ls_job-calc_mode = 'E'. ls_job-work_hours = '2.50'. ls_job-part_count = 2. ls_job-mat_group = 'AL'. ls_job-net_value = 0. lv_exp = '241.00'. TRY. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = mo_cut->calculate_cost( ls_job ) ). CATCH {{p}}cx_job_error. cl_abap_unit_assert=>fail( `unexpected exception` ). ENDTRY. ENDMETHOD. METHOD priority_cost. DATA ls_job TYPE {{p}}job_planner=>ty_job. DATA lv_exp TYPE {{p}}job_planner=>ty_cost. ls_job = valid_job( ). ls_job-calc_mode = 'P'. ls_job-work_hours = '1.00'. ls_job-part_count = 1. ls_job-mat_group = 'PL'. ls_job-net_value = '10.00'. lv_exp = '88.50'. TRY. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = mo_cut->calculate_cost( ls_job ) ). CATCH {{p}}cx_job_error. cl_abap_unit_assert=>fail( `unexpected exception` ). ENDTRY. ENDMETHOD. METHOD wood_cost. DATA ls_job TYPE {{p}}job_planner=>ty_job. DATA lv_exp TYPE {{p}}job_planner=>ty_cost. ls_job = valid_job( ). ls_job-work_hours = '0.50'. ls_job-part_count = 1. ls_job-mat_group = 'WD'. ls_job-net_value = 0. lv_exp = '35.00'. TRY. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = mo_cut->calculate_cost( ls_job ) ). CATCH {{p}}cx_job_error. cl_abap_unit_assert=>fail( `unexpected exception` ). ENDTRY. ENDMETHOD. METHOD missing_id_raises. DATA(ls_job) = valid_job( ). ls_job-job_id = ''. ls_job-calc_mode = 'Q'. ls_job-work_hours = 0. TRY. mo_cut->validate( ls_job ). cl_abap_unit_assert=>fail( `NO_JOB_ID expected` ). CATCH {{p}}cx_job_error INTO DATA(lx_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_job_error=>c_reason-no_job_id act = lx_error->get_reason( ) ). ENDTRY. ENDMETHOD. METHOD bad_mode_raises. DATA(ls_job) = valid_job( ). ls_job-calc_mode = 'Q'. ls_job-work_hours = 0. TRY. mo_cut->validate( ls_job ). cl_abap_unit_assert=>fail( `BAD_MODE expected` ). CATCH {{p}}cx_job_error INTO DATA(lx_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_job_error=>c_reason-bad_mode act = lx_error->get_reason( ) ). ENDTRY. ENDMETHOD. METHOD bad_hours_raises. DATA(ls_job) = valid_job( ). ls_job-work_hours = 0. TRY. mo_cut->validate( ls_job ). cl_abap_unit_assert=>fail( `BAD_HOURS expected` ). CATCH {{p}}cx_job_error INTO DATA(lx_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_job_error=>c_reason-bad_hours act = lx_error->get_reason( ) ). ENDTRY. ls_job-work_hours = '100.01'. TRY. mo_cut->calculate_cost( ls_job ). cl_abap_unit_assert=>fail( `BAD_HOURS expected` ). CATCH {{p}}cx_job_error INTO DATA(lx_cost_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_job_error=>c_reason-bad_hours act = lx_cost_error->get_reason( ) ). ENDTRY. ENDMETHOD. METHOD bad_count_raises. DATA(ls_job) = valid_job( ). ls_job-part_count = 0. TRY. mo_cut->validate( ls_job ). cl_abap_unit_assert=>fail( `BAD_COUNT expected` ). CATCH {{p}}cx_job_error INTO DATA(lx_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_job_error=>c_reason-bad_count act = lx_error->get_reason( ) ). ENDTRY. ENDMETHOD. METHOD bad_group_raises. DATA(ls_job) = valid_job( ). DATA lv_msg TYPE string. ls_job-mat_group = 'XY'. lv_msg = 'The material group is not valid.'. TRY. mo_cut->validate( ls_job ). cl_abap_unit_assert=>fail( `BAD_GROUP expected` ). CATCH {{p}}cx_job_error INTO DATA(lx_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_job_error=>c_reason-bad_group act = lx_error->get_reason( ) ). cl_abap_unit_assert=>assert_equals( exp = lv_msg act = lx_error->get_message( ) ). ENDTRY. ENDMETHOD. METHOD bad_date_raises. DATA(ls_job) = valid_job( ). ls_job-due_date = '00000000'. TRY. mo_cut->validate( ls_job ). cl_abap_unit_assert=>fail( `BAD_DATE expected` ). CATCH {{p}}cx_job_error INTO DATA(lx_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_job_error=>c_reason-bad_date act = lx_error->get_reason( ) ). ENDTRY. ENDMETHOD. METHOD bad_value_raises. DATA(ls_job) = valid_job( ). ls_job-net_value = -1. TRY. mo_cut->validate( ls_job ). cl_abap_unit_assert=>fail( `BAD_VALUE expected` ). CATCH {{p}}cx_job_error INTO DATA(lx_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_job_error=>c_reason-bad_value act = lx_error->get_reason( ) ). ENDTRY. ENDMETHOD. ENDCLASS.