Fix coverage with several contract classes; table annotation and file path checks; clean task dir on write

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 08:44:35 +02:00
parent fb576b0954
commit 03ab36149e
388 changed files with 28620 additions and 339 deletions

View File

@@ -0,0 +1,79 @@
CLASS {{p}}laundry_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES:
ty_weight_kg TYPE p LENGTH 5 DECIMALS 2,
ty_amount TYPE p LENGTH 8 DECIMALS 2,
ty_service TYPE c LENGTH 4.
CONSTANTS:
c_service_wash TYPE ty_service VALUE 'WASH',
c_service_dry TYPE ty_service VALUE 'DRY',
c_service_iron TYPE ty_service VALUE 'IRON'.
METHODS calculate
IMPORTING
iv_weight_kg TYPE ty_weight_kg
iv_service TYPE ty_service
iv_express TYPE abap_bool
iv_member TYPE abap_bool
RETURNING
VALUE(rv_price) TYPE ty_amount.
PRIVATE SECTION.
CONSTANTS:
c_rate_wash TYPE ty_amount VALUE '2.50',
c_rate_dry TYPE ty_amount VALUE '4.00',
c_rate_iron TYPE ty_amount VALUE '1.50',
c_express_fee TYPE ty_amount VALUE '5.00',
c_min_price TYPE ty_amount VALUE '10.00',
c_member_discount TYPE ty_amount VALUE '0.90'.
METHODS rate_per_kg
IMPORTING iv_service TYPE ty_service
RETURNING VALUE(rv_rate) TYPE ty_amount.
METHODS round_currency
IMPORTING iv_amount TYPE ty_amount
RETURNING VALUE(rv_amount) TYPE ty_amount.
ENDCLASS.
CLASS {{p}}laundry_pricer IMPLEMENTATION.
METHOD calculate.
IF iv_weight_kg <= 0.
rv_price = 0.
RETURN.
ENDIF.
DATA lv_rate TYPE ty_amount.
DATA lv_price TYPE ty_amount.
lv_rate = rate_per_kg( iv_service ).
lv_price = iv_weight_kg * lv_rate.
IF iv_member = abap_true.
lv_price = lv_price * c_member_discount.
ENDIF.
IF iv_express = abap_true.
lv_price = lv_price + c_express_fee.
ENDIF.
IF lv_price < c_min_price.
lv_price = c_min_price.
ENDIF.
rv_price = round_currency( lv_price ).
ENDMETHOD.
METHOD rate_per_kg.
CASE iv_service.
WHEN c_service_wash.
rv_rate = c_rate_wash.
WHEN c_service_dry.
rv_rate = c_rate_dry.
WHEN c_service_iron.
rv_rate = c_rate_iron.
WHEN OTHERS.
rv_rate = c_rate_wash.
ENDCASE.
ENDMETHOD.
METHOD round_currency.
rv_amount = round( val = iv_amount dec = 2 ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,62 @@
CLASS ltc_laundry_pricer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}laundry_pricer.
METHODS setup.
METHODS wash_basic FOR TESTING.
METHODS iron_rate FOR TESTING.
METHODS member_then_express FOR TESTING.
METHODS min_after_discount FOR TESTING.
METHODS unknown_service FOR TESTING.
ENDCLASS.
CLASS ltc_laundry_pricer IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}laundry_pricer( ).
ENDMETHOD.
METHOD wash_basic.
DATA(lv_price) = mo_cut->calculate( iv_weight_kg = '2.00'
iv_service = {{p}}laundry_pricer=>c_service_wash
iv_express = abap_false
iv_member = abap_false ).
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}laundry_pricer=>ty_amount( '10.00' )
act = lv_price ).
ENDMETHOD.
METHOD iron_rate.
DATA(lv_price) = mo_cut->calculate( iv_weight_kg = '8.00'
iv_service = {{p}}laundry_pricer=>c_service_iron
iv_express = abap_false
iv_member = abap_false ).
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}laundry_pricer=>ty_amount( '12.00' )
act = lv_price ).
ENDMETHOD.
METHOD member_then_express.
DATA(lv_price) = mo_cut->calculate( iv_weight_kg = '4.00'
iv_service = {{p}}laundry_pricer=>c_service_wash
iv_express = abap_true
iv_member = abap_true ).
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}laundry_pricer=>ty_amount( '14.00' )
act = lv_price ).
ENDMETHOD.
METHOD min_after_discount.
DATA(lv_price) = mo_cut->calculate( iv_weight_kg = '2.00'
iv_service = {{p}}laundry_pricer=>c_service_wash
iv_express = abap_false
iv_member = abap_true ).
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}laundry_pricer=>ty_amount( '10.00' )
act = lv_price ).
ENDMETHOD.
METHOD unknown_service.
DATA(lv_price) = mo_cut->calculate( iv_weight_kg = '2.00'
iv_service = 'XXXX'
iv_express = abap_false
iv_member = abap_false ).
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}laundry_pricer=>ty_amount( '10.00' )
act = lv_price ).
ENDMETHOD.
ENDCLASS.