Pipeline controller: plan 2 (hard +, error +50 %), backlog throttle, 2 trajectory workers, stop rules, summaries every 50; budget reserve

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 13:35:54 +02:00
parent 1c4667a0fc
commit 13360292dd
781 changed files with 50211 additions and 22 deletions

View File

@@ -0,0 +1,121 @@
CLASS ltc_photo_pricer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}photo_pricer.
METHODS setup.
METHODS studio_quote FOR TESTING.
METHODS outdoor_quote FOR TESTING.
METHODS studio_ignores_distance FOR TESTING.
METHODS rounds_up_minutes FOR TESTING.
METHODS rejects_unknown_session FOR TESTING.
METHODS rejects_bad_minutes FOR TESTING.
METHODS rejects_outdoor_no_distance FOR TESTING.
METHODS build_request
IMPORTING iv_session TYPE {{p}}photo_pricer=>ty_session
iv_minutes TYPE i
iv_persons TYPE i
iv_photos TYPE i
iv_distance_km TYPE i
RETURNING VALUE(rs_request) TYPE {{p}}photo_pricer=>ty_request.
ENDCLASS.
CLASS ltc_photo_pricer IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}photo_pricer( ).
ENDMETHOD.
METHOD build_request.
rs_request = VALUE #( session = iv_session
minutes = iv_minutes
persons = iv_persons
photos = iv_photos
distance_km = iv_distance_km ).
ENDMETHOD.
METHOD studio_quote.
DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-studio
iv_minutes = 90
iv_persons = 3
iv_photos = 10
iv_distance_km = 0 ).
DATA(ls_quote) = mo_cut->calculate( ls_request ).
cl_abap_unit_assert=>assert_equals( exp = {{p}}photo_pricer=>c_reason-ok
act = ls_quote-reason ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}photo_pricer=>ty_amount( 180 )
act = ls_quote-total ).
ENDMETHOD.
METHOD outdoor_quote.
DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-outdoor
iv_minutes = 45
iv_persons = 10
iv_photos = 50
iv_distance_km = 20 ).
DATA(ls_quote) = mo_cut->calculate( ls_request ).
cl_abap_unit_assert=>assert_equals( exp = {{p}}photo_pricer=>c_reason-ok
act = ls_quote-reason ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}photo_pricer=>ty_amount( 435 )
act = ls_quote-total ).
ENDMETHOD.
METHOD studio_ignores_distance.
DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-studio
iv_minutes = 30
iv_persons = 1
iv_photos = 0
iv_distance_km = 25 ).
DATA(ls_quote) = mo_cut->calculate( ls_request ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}photo_pricer=>ty_amount( 0 )
act = ls_quote-travel_fee ).
ENDMETHOD.
METHOD rounds_up_minutes.
DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-studio
iv_minutes = 31
iv_persons = 1
iv_photos = 0
iv_distance_km = 0 ).
DATA(ls_quote) = mo_cut->calculate( ls_request ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}photo_pricer=>ty_amount( 60 )
act = ls_quote-time_fee ).
ENDMETHOD.
METHOD rejects_unknown_session.
DATA(ls_request) = build_request( iv_session = 'WEDDING'
iv_minutes = 60
iv_persons = 2
iv_photos = 0
iv_distance_km = 0 ).
DATA(ls_quote) = mo_cut->calculate( ls_request ).
cl_abap_unit_assert=>assert_equals( exp = {{p}}photo_pricer=>c_reason-session
act = ls_quote-reason ).
ENDMETHOD.
METHOD rejects_bad_minutes.
DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-studio
iv_minutes = 29
iv_persons = 2
iv_photos = 0
iv_distance_km = 0 ).
DATA(ls_quote) = mo_cut->calculate( ls_request ).
cl_abap_unit_assert=>assert_equals( exp = {{p}}photo_pricer=>c_reason-minutes
act = ls_quote-reason ).
ENDMETHOD.
METHOD rejects_outdoor_no_distance.
DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-outdoor
iv_minutes = 60
iv_persons = 2
iv_photos = 0
iv_distance_km = 0 ).
DATA(ls_quote) = mo_cut->calculate( ls_request ).
cl_abap_unit_assert=>assert_equals( exp = {{p}}photo_pricer=>c_reason-distance
act = ls_quote-reason ).
ENDMETHOD.
ENDCLASS.