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,96 @@
CLASS {{p}}insurance_premium DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES:
ty_region TYPE c LENGTH 2,
ty_premium TYPE p LENGTH 8 DECIMALS 2.
METHODS calculate_premium
IMPORTING iv_age TYPE i
iv_power_kw TYPE i
iv_region TYPE ty_region
iv_claim_free_years TYPE i
RETURNING VALUE(rv_premium) TYPE ty_premium.
PRIVATE SECTION.
METHODS get_base_premium
IMPORTING iv_region TYPE ty_region
RETURNING VALUE(rv_base) TYPE ty_premium.
METHODS get_age_factor
IMPORTING iv_age TYPE i
RETURNING VALUE(rv_factor) TYPE decfloat34.
METHODS get_power_factor
IMPORTING iv_power_kw TYPE i
RETURNING VALUE(rv_factor) TYPE decfloat34.
METHODS get_discount_factor
IMPORTING iv_claim_free_years TYPE i
RETURNING VALUE(rv_factor) TYPE decfloat34.
ENDCLASS.
CLASS {{p}}insurance_premium IMPLEMENTATION.
METHOD calculate_premium.
IF iv_age < 18 OR iv_age > 99
OR iv_power_kw <= 0
OR iv_claim_free_years < 0.
rv_premium = 0.
RETURN.
ENDIF.
DATA(lv_base) = get_base_premium( iv_region ).
IF lv_base = 0.
rv_premium = 0.
RETURN.
ENDIF.
DATA(lv_premium) = CONV decfloat34( lv_base )
* get_age_factor( iv_age )
* get_power_factor( iv_power_kw )
* get_discount_factor( iv_claim_free_years ).
rv_premium = lv_premium.
IF rv_premium < 100.
rv_premium = 100.
ENDIF.
ENDMETHOD.
METHOD get_base_premium.
CASE iv_region.
WHEN 'A1'.
rv_base = 150.
WHEN 'B2'.
rv_base = 200.
WHEN 'C3'.
rv_base = 250.
WHEN 'D4'.
rv_base = 300.
WHEN 'E5'.
rv_base = 350.
WHEN OTHERS.
rv_base = 0.
ENDCASE.
ENDMETHOD.
METHOD get_age_factor.
IF iv_age < 25.
rv_factor = '1.5'.
ELSEIF iv_age > 65.
rv_factor = '1.2'.
ELSE.
rv_factor = '1.0'.
ENDIF.
ENDMETHOD.
METHOD get_power_factor.
IF iv_power_kw <= 50.
rv_factor = '0.9'.
ELSEIF iv_power_kw <= 100.
rv_factor = '1.0'.
ELSEIF iv_power_kw <= 150.
rv_factor = '1.3'.
ELSE.
rv_factor = '1.6'.
ENDIF.
ENDMETHOD.
METHOD get_discount_factor.
DATA(lv_discount) = iv_claim_free_years * 5.
IF lv_discount > 30.
lv_discount = 30.
ENDIF.
rv_factor = CONV decfloat34( 100 - lv_discount ) / 100.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,110 @@
CLASS ltc_insurance_premium DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}insurance_premium.
METHODS setup.
METHODS standard_premium FOR TESTING.
METHODS young_driver FOR TESTING.
METHODS senior_driver FOR TESTING.
METHODS high_power FOR TESTING.
METHODS very_high_power FOR TESTING.
METHODS low_power FOR TESTING.
METHODS claim_free_discount FOR TESTING.
METHODS claim_free_capped FOR TESTING.
METHODS minimum_premium FOR TESTING.
METHODS all_regions FOR TESTING.
METHODS invalid_region FOR TESTING.
METHODS invalid_inputs FOR TESTING.
ENDCLASS.
CLASS ltc_insurance_premium IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}insurance_premium( ).
ENDMETHOD.
METHOD standard_premium.
cl_abap_unit_assert=>assert_equals(
exp = 150
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = 0 ) ).
ENDMETHOD.
METHOD young_driver.
cl_abap_unit_assert=>assert_equals(
exp = 225
act = mo_cut->calculate_premium( iv_age = 22 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = 0 ) ).
ENDMETHOD.
METHOD senior_driver.
cl_abap_unit_assert=>assert_equals(
exp = 180
act = mo_cut->calculate_premium( iv_age = 70 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = 0 ) ).
ENDMETHOD.
METHOD high_power.
cl_abap_unit_assert=>assert_equals(
exp = 195
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 120 iv_region = 'A1' iv_claim_free_years = 0 ) ).
ENDMETHOD.
METHOD very_high_power.
cl_abap_unit_assert=>assert_equals(
exp = 240
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 200 iv_region = 'A1' iv_claim_free_years = 0 ) ).
ENDMETHOD.
METHOD low_power.
cl_abap_unit_assert=>assert_equals(
exp = 135
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 40 iv_region = 'A1' iv_claim_free_years = 0 ) ).
ENDMETHOD.
METHOD claim_free_discount.
cl_abap_unit_assert=>assert_equals(
exp = 180
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'B2' iv_claim_free_years = 2 ) ).
ENDMETHOD.
METHOD claim_free_capped.
cl_abap_unit_assert=>assert_equals(
exp = 140
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'B2' iv_claim_free_years = 10 ) ).
ENDMETHOD.
METHOD minimum_premium.
cl_abap_unit_assert=>assert_equals(
exp = 100
act = mo_cut->calculate_premium( iv_age = 25 iv_power_kw = 50 iv_region = 'A1' iv_claim_free_years = 6 ) ).
ENDMETHOD.
METHOD all_regions.
cl_abap_unit_assert=>assert_equals(
exp = 250 msg = 'C3'
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'C3' iv_claim_free_years = 0 ) ).
cl_abap_unit_assert=>assert_equals(
exp = 300 msg = 'D4'
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'D4' iv_claim_free_years = 0 ) ).
cl_abap_unit_assert=>assert_equals(
exp = 350 msg = 'E5'
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'E5' iv_claim_free_years = 0 ) ).
ENDMETHOD.
METHOD invalid_region.
cl_abap_unit_assert=>assert_equals(
exp = 0
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'X9' iv_claim_free_years = 0 ) ).
ENDMETHOD.
METHOD invalid_inputs.
cl_abap_unit_assert=>assert_equals(
exp = 0 msg = 'age too low'
act = mo_cut->calculate_premium( iv_age = 17 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = 0 ) ).
cl_abap_unit_assert=>assert_equals(
exp = 0 msg = 'age too high'
act = mo_cut->calculate_premium( iv_age = 100 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = 0 ) ).
cl_abap_unit_assert=>assert_equals(
exp = 0 msg = 'power too low'
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 0 iv_region = 'A1' iv_claim_free_years = 0 ) ).
cl_abap_unit_assert=>assert_equals(
exp = 0 msg = 'negative claim free years'
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = -1 ) ).
ENDMETHOD.
ENDCLASS.