Step F first pass: 81/92 accepted; budget floor 60 calls; rejected slots moved for regeneration

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
Kral
2026-10-03 12:10:52 +02:00
parent d3250acfb8
commit 39769afce8
741 changed files with 40573 additions and 317 deletions

View File

@@ -0,0 +1,173 @@
CLASS {{p}}t02_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}if_stock_cover.
METHODS setup.
METHODS all_ok FOR TESTING.
METHODS shortage_is_reported FOR TESTING.
METHODS stock_used_in_order FOR TESTING.
METHODS negative_stock_ignored FOR TESTING.
METHODS zero_requirement_invalid FOR TESTING.
METHODS negative_req_invalid FOR TESTING.
METHODS missing_stock_is_short FOR TESTING.
METHODS case_and_blanks_ignored FOR TESTING.
METHODS stock_items_are_summed FOR TESTING.
METHODS no_requirements FOR TESTING.
METHODS shortages_filter_sort FOR TESTING.
METHODS shortages_empty_all_ok FOR TESTING.
ENDCLASS.
CLASS {{p}}t02_hidden IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}stock_cover_checker( ).
ENDMETHOD.
METHOD all_ok.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 100 )
( material = 'MAT-B' plant = 'P1' quantity = 50 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 30 )
( material = 'MAT-B' plant = 'P1' required = 50 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 30 available = 100 shortage = 0 status = 'OK' )
( material = 'MAT-B' plant = 'P1' required = 50 available = 50 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD shortage_is_reported.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 30 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 50 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 50 available = 30 shortage = 20 status = 'SHORT' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD stock_used_in_order.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 100 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 60 )
( material = 'MAT-A' plant = 'P1' required = 60 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 60 available = 100 shortage = 0 status = 'OK' )
( material = 'MAT-A' plant = 'P1' required = 60 available = 40 shortage = 20 status = 'SHORT' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD negative_stock_ignored.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 100 )
( material = 'MAT-A' plant = 'P1' quantity = -40 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 100 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 100 available = 100 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD zero_requirement_invalid.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 50 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 0 )
( material = 'MAT-A' plant = 'P1' required = 50 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 0 available = 50 shortage = 0 status = 'INVALID' )
( material = 'MAT-A' plant = 'P1' required = 50 available = 50 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD negative_req_invalid.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 50 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = -10 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = -10 available = 50 shortage = 0 status = 'INVALID' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD missing_stock_is_short.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-X' plant = 'P9' required = 25 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-X' plant = 'P9' required = 25 available = 0 shortage = 25 status = 'SHORT' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD case_and_blanks_ignored.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'mat-a' plant = 'p1' quantity = 80 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = ' MAT-A ' plant = 'P1 ' required = 80 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = ' MAT-A ' plant = 'P1 ' required = 80 available = 80 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD stock_items_are_summed.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 10 )
( material = 'MAT-A' plant = 'P1' quantity = 20 )
( material = 'MAT-A' plant = 'P2' quantity = 5 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 30 )
( material = 'MAT-A' plant = 'P2' required = 5 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 30 available = 30 shortage = 0 status = 'OK' )
( material = 'MAT-A' plant = 'P2' required = 5 available = 5 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD no_requirements.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 10 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ).
DATA(lt_act) = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_act ) ).
ENDMETHOD.
METHOD shortages_filter_sort.
DATA(lt_in) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-C' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' )
( material = 'MAT-A' plant = 'P2' required = 10 available = 0 shortage = 10 status = 'SHORT' )
( material = 'MAT-B' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'OK' )
( material = 'MAT-A' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' )
( material = 'MAT-D' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'INVALID' ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' )
( material = 'MAT-A' plant = 'P2' required = 10 available = 0 shortage = 10 status = 'SHORT' )
( material = 'MAT-C' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' ) ).
cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->shortages( lt_in ) ).
ENDMETHOD.
METHOD shortages_empty_all_ok.
DATA(lt_in) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'OK' )
( material = 'MAT-B' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'INVALID' ) ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( mo_cut->shortages( lt_in ) ) ).
ENDMETHOD.
ENDCLASS.