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,123 @@
CLASS {{p}}t14_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS call
IMPORTING
iv_grain_type TYPE string
iv_weight_kg TYPE decfloat34
iv_moisture_pct TYPE decfloat34
iv_supplier TYPE string
EXPORTING
ev_accepted TYPE abap_bool
ev_drying_cost TYPE decfloat34
ev_reason TYPE string
ev_text TYPE string.
METHODS accepts_valid_delivery FOR TESTING.
METHODS rejects_bad_weight FOR TESTING.
METHODS rejects_missing_supplier FOR TESTING.
METHODS rejects_unknown_grain FOR TESTING.
METHODS rejects_moisture_out_of_range FOR TESTING.
METHODS rejects_wheat_too_wet FOR TESTING.
METHODS accepts_barley_at_limit FOR TESTING.
METHODS accepts_rye_at_limit FOR TESTING.
METHODS calculates_drying_cost FOR TESTING.
METHODS sets_message_text FOR TESTING.
ENDCLASS.
CLASS {{p}}t14_hidden IMPLEMENTATION.
METHOD call.
ev_accepted = abap_false.
ev_drying_cost = 0.
ev_reason = ``.
ev_text = ``.
TRY.
CALL FUNCTION '{{P}}GRAIN_CHECK'
EXPORTING
iv_grain_type = iv_grain_type
iv_weight_kg = iv_weight_kg
iv_moisture_pct = iv_moisture_pct
iv_supplier = iv_supplier
IMPORTING
ev_accepted = ev_accepted
ev_drying_cost = ev_drying_cost.
CATCH {{p}}cx_grain INTO DATA(lo_ex).
ev_reason = lo_ex->mv_reason.
ev_text = lo_ex->mv_text.
ENDTRY.
ENDMETHOD.
METHOD accepts_valid_delivery.
call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 1000 iv_moisture_pct = '12.0' iv_supplier = 'S1'
IMPORTING ev_accepted = DATA(lv_accepted) ev_drying_cost = DATA(lv_cost)
ev_reason = DATA(lv_reason) ).
cl_abap_unit_assert=>assert_initial( act = lv_reason msg = 'no exception expected' ).
cl_abap_unit_assert=>assert_true( act = lv_accepted ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_cost ).
ENDMETHOD.
METHOD rejects_bad_weight.
call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 0 iv_moisture_pct = '12.0' iv_supplier = 'S1'
IMPORTING ev_reason = DATA(lv_reason) ).
cl_abap_unit_assert=>assert_equals( exp = 'WEIGHT' act = lv_reason ).
call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = -5 iv_moisture_pct = '12.0' iv_supplier = 'S1'
IMPORTING ev_reason = DATA(lv_reason2) ).
cl_abap_unit_assert=>assert_equals( exp = 'WEIGHT' act = lv_reason2 ).
ENDMETHOD.
METHOD rejects_missing_supplier.
call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 100 iv_moisture_pct = '12.0' iv_supplier = ''
IMPORTING ev_reason = DATA(lv_reason) ).
cl_abap_unit_assert=>assert_equals( exp = 'SUPPLIER' act = lv_reason ).
ENDMETHOD.
METHOD rejects_unknown_grain.
call( EXPORTING iv_grain_type = 'OATS' iv_weight_kg = 100 iv_moisture_pct = '12.0' iv_supplier = 'S1'
IMPORTING ev_reason = DATA(lv_reason) ).
cl_abap_unit_assert=>assert_equals( exp = 'GRAIN_TYPE' act = lv_reason ).
ENDMETHOD.
METHOD rejects_moisture_out_of_range.
call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 100 iv_moisture_pct = '120' iv_supplier = 'S1'
IMPORTING ev_reason = DATA(lv_reason) ).
cl_abap_unit_assert=>assert_equals( exp = 'MOISTURE_RANGE' act = lv_reason ).
call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 100 iv_moisture_pct = '-1' iv_supplier = 'S1'
IMPORTING ev_reason = DATA(lv_reason2) ).
cl_abap_unit_assert=>assert_equals( exp = 'MOISTURE_RANGE' act = lv_reason2 ).
ENDMETHOD.
METHOD rejects_wheat_too_wet.
call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 100 iv_moisture_pct = '14.6' iv_supplier = 'S1'
IMPORTING ev_reason = DATA(lv_reason) ).
cl_abap_unit_assert=>assert_equals( exp = 'MOISTURE' act = lv_reason ).
ENDMETHOD.
METHOD accepts_barley_at_limit.
call( EXPORTING iv_grain_type = 'BARLEY' iv_weight_kg = 100 iv_moisture_pct = '14.0' iv_supplier = 'S1'
IMPORTING ev_accepted = DATA(lv_accepted) ev_reason = DATA(lv_reason) ).
cl_abap_unit_assert=>assert_initial( act = lv_reason msg = 'no exception expected' ).
cl_abap_unit_assert=>assert_true( act = lv_accepted ).
ENDMETHOD.
METHOD accepts_rye_at_limit.
call( EXPORTING iv_grain_type = 'RYE' iv_weight_kg = 100 iv_moisture_pct = '15.0' iv_supplier = 'S1'
IMPORTING ev_accepted = DATA(lv_accepted) ev_reason = DATA(lv_reason) ).
cl_abap_unit_assert=>assert_initial( act = lv_reason msg = 'no exception expected' ).
cl_abap_unit_assert=>assert_true( act = lv_accepted ).
ENDMETHOD.
METHOD calculates_drying_cost.
call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 1000 iv_moisture_pct = '13.5' iv_supplier = 'S1'
IMPORTING ev_drying_cost = DATA(lv_cost) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '750' ) act = lv_cost ).
call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 1 iv_moisture_pct = '12.53' iv_supplier = 'S1'
IMPORTING ev_drying_cost = DATA(lv_cost2) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '0.02' ) act = lv_cost2 ).
ENDMETHOD.
METHOD sets_message_text.
call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 0 iv_moisture_pct = '12.0' iv_supplier = 'S1'
IMPORTING ev_text = DATA(lv_text) ).
cl_abap_unit_assert=>assert_equals( exp = 'Weight must be greater than zero' act = lv_text ).
ENDMETHOD.
ENDCLASS.