Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
86 lines
3.4 KiB
ABAP
86 lines
3.4 KiB
ABAP
CLASS ltc_workload_planner DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
PRIVATE SECTION.
|
|
TYPES:
|
|
ty_mechanic TYPE c LENGTH 8,
|
|
ty_date TYPE c LENGTH 8.
|
|
|
|
DATA mo_cut TYPE REF TO {{p}}workload_planner.
|
|
|
|
METHODS setup.
|
|
METHODS empty_input FOR TESTING.
|
|
METHODS one_mechanic FOR TESTING.
|
|
METHODS sorted_by_mechanic FOR TESTING.
|
|
METHODS ignores_invalid_jobs FOR TESTING.
|
|
METHODS keeps_earliest_date FOR TESTING.
|
|
|
|
METHODS add_job
|
|
IMPORTING iv_mechanic TYPE ty_mechanic
|
|
iv_hours TYPE i
|
|
iv_date TYPE ty_date
|
|
CHANGING ct_jobs TYPE {{p}}workload_planner=>tt_job.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS ltc_workload_planner IMPLEMENTATION.
|
|
METHOD setup.
|
|
mo_cut = NEW {{p}}workload_planner( ).
|
|
ENDMETHOD.
|
|
|
|
METHOD add_job.
|
|
INSERT VALUE #( job_id = 'JOB'
|
|
mechanic = iv_mechanic
|
|
work_hours = iv_hours
|
|
start_date = iv_date )
|
|
INTO TABLE ct_jobs.
|
|
ENDMETHOD.
|
|
|
|
METHOD empty_input.
|
|
DATA lt_jobs TYPE {{p}}workload_planner=>tt_job.
|
|
cl_abap_unit_assert=>assert_initial( act = mo_cut->summarize( it_jobs = lt_jobs ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD one_mechanic.
|
|
DATA lt_jobs TYPE {{p}}workload_planner=>tt_job.
|
|
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 4 iv_date = '20250110'
|
|
CHANGING ct_jobs = lt_jobs ).
|
|
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 6 iv_date = '20250112'
|
|
CHANGING ct_jobs = lt_jobs ).
|
|
DATA(lt_result) = mo_cut->summarize( it_jobs = lt_jobs ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 2 act = lt_result[ 1 ]-job_count ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 10 act = lt_result[ 1 ]-total_hours ).
|
|
cl_abap_unit_assert=>assert_equals( exp = '20250110' act = lt_result[ 1 ]-first_date ).
|
|
ENDMETHOD.
|
|
|
|
METHOD sorted_by_mechanic.
|
|
DATA lt_jobs TYPE {{p}}workload_planner=>tt_job.
|
|
add_job( EXPORTING iv_mechanic = 'M2' iv_hours = 1 iv_date = '20250110'
|
|
CHANGING ct_jobs = lt_jobs ).
|
|
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 1 iv_date = '20250110'
|
|
CHANGING ct_jobs = lt_jobs ).
|
|
DATA(lt_result) = mo_cut->summarize( it_jobs = lt_jobs ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 'M1' act = lt_result[ 1 ]-mechanic ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 'M2' act = lt_result[ 2 ]-mechanic ).
|
|
ENDMETHOD.
|
|
|
|
METHOD ignores_invalid_jobs.
|
|
DATA lt_jobs TYPE {{p}}workload_planner=>tt_job.
|
|
DATA lv_empty TYPE ty_mechanic.
|
|
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 0 iv_date = '20250110'
|
|
CHANGING ct_jobs = lt_jobs ).
|
|
add_job( EXPORTING iv_mechanic = lv_empty iv_hours = 5 iv_date = '20250110'
|
|
CHANGING ct_jobs = lt_jobs ).
|
|
cl_abap_unit_assert=>assert_initial( act = mo_cut->summarize( it_jobs = lt_jobs ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD keeps_earliest_date.
|
|
DATA lt_jobs TYPE {{p}}workload_planner=>tt_job.
|
|
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 1 iv_date = '20250201'
|
|
CHANGING ct_jobs = lt_jobs ).
|
|
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 1 iv_date = '20250101'
|
|
CHANGING ct_jobs = lt_jobs ).
|
|
DATA(lt_result) = mo_cut->summarize( it_jobs = lt_jobs ).
|
|
cl_abap_unit_assert=>assert_equals( exp = '20250101' act = lt_result[ 1 ]-first_date ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|