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,88 @@
CLASS {{p}}supplier_score DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_rating TYPE i.
TYPES ty_score TYPE p LENGTH 5 DECIMALS 1.
TYPES ty_grade TYPE c LENGTH 1.
TYPES:
BEGIN OF ty_result,
score TYPE ty_score,
grade TYPE ty_grade,
END OF ty_result.
METHODS evaluate
IMPORTING iv_price TYPE ty_rating
iv_quality TYPE ty_rating
iv_delivery TYPE ty_rating
RETURNING VALUE(rs_result) TYPE ty_result.
PRIVATE SECTION.
CONSTANTS:
c_weight_price TYPE i VALUE 40,
c_weight_quality TYPE i VALUE 35,
c_weight_delivery TYPE i VALUE 25,
c_round_half TYPE i VALUE 5,
c_ten TYPE i VALUE 10,
c_tenth TYPE ty_score VALUE '0.1',
c_threshold_a TYPE ty_score VALUE '4.5',
c_threshold_b TYPE ty_score VALUE '3.5',
c_threshold_c TYPE ty_score VALUE '2.5',
c_threshold_d TYPE ty_score VALUE '1.5',
c_score_blocked TYPE ty_score VALUE '0.0',
c_grade_blocked TYPE ty_grade VALUE 'X'.
METHODS is_rating_valid
IMPORTING iv_rating TYPE ty_rating
RETURNING VALUE(rv_valid) TYPE abap_bool.
METHODS weighted_score
IMPORTING iv_price TYPE ty_rating
iv_quality TYPE ty_rating
iv_delivery TYPE ty_rating
RETURNING VALUE(rv_score) TYPE ty_score.
METHODS grade_of
IMPORTING iv_score TYPE ty_score
RETURNING VALUE(rv_grade) TYPE ty_grade.
ENDCLASS.
CLASS {{p}}supplier_score IMPLEMENTATION.
METHOD evaluate.
IF is_rating_valid( iv_price ) = abap_false
OR is_rating_valid( iv_quality ) = abap_false
OR is_rating_valid( iv_delivery ) = abap_false
OR iv_quality = 1.
rs_result-score = c_score_blocked.
rs_result-grade = c_grade_blocked.
RETURN.
ENDIF.
rs_result-score = weighted_score( iv_price = iv_price
iv_quality = iv_quality
iv_delivery = iv_delivery ).
rs_result-grade = grade_of( rs_result-score ).
ENDMETHOD.
METHOD is_rating_valid.
rv_valid = xsdbool( iv_rating >= 1 AND iv_rating <= 5 ).
ENDMETHOD.
METHOD weighted_score.
DATA(lv_points) = iv_price * c_weight_price
+ iv_quality * c_weight_quality
+ iv_delivery * c_weight_delivery.
DATA(lv_tenths) = ( lv_points + c_round_half ) DIV c_ten.
rv_score = CONV ty_score( lv_tenths ) * c_tenth.
ENDMETHOD.
METHOD grade_of.
IF iv_score >= c_threshold_a.
rv_grade = 'A'.
ELSEIF iv_score >= c_threshold_b.
rv_grade = 'B'.
ELSEIF iv_score >= c_threshold_c.
rv_grade = 'C'.
ELSEIF iv_score >= c_threshold_d.
rv_grade = 'D'.
ELSE.
rv_grade = 'E'.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,54 @@
CLASS ltc_supplier_score DEFINITION FINAL FOR TESTING
DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
CONSTANTS:
c_score_5_0 TYPE {{p}}supplier_score=>ty_score VALUE '5.0',
c_score_0_0 TYPE {{p}}supplier_score=>ty_score VALUE '0.0',
c_score_3_5 TYPE {{p}}supplier_score=>ty_score VALUE '3.5',
c_grade_a TYPE {{p}}supplier_score=>ty_grade VALUE 'A',
c_grade_b TYPE {{p}}supplier_score=>ty_grade VALUE 'B',
c_grade_x TYPE {{p}}supplier_score=>ty_grade VALUE 'X'.
DATA mo_cut TYPE REF TO {{p}}supplier_score.
METHODS setup.
METHODS perfect_supplier FOR TESTING.
METHODS blocked_quality FOR TESTING.
METHODS invalid_rating FOR TESTING.
METHODS rounded_score FOR TESTING.
METHODS grade_check FOR TESTING.
ENDCLASS.
CLASS ltc_supplier_score IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}supplier_score( ).
ENDMETHOD.
METHOD perfect_supplier.
DATA(ls_result) = mo_cut->evaluate( iv_price = 5 iv_quality = 5 iv_delivery = 5 ).
cl_abap_unit_assert=>assert_equals( exp = c_score_5_0 act = ls_result-score ).
cl_abap_unit_assert=>assert_equals( exp = c_grade_a act = ls_result-grade ).
ENDMETHOD.
METHOD blocked_quality.
DATA(ls_result) = mo_cut->evaluate( iv_price = 5 iv_quality = 1 iv_delivery = 5 ).
cl_abap_unit_assert=>assert_equals( exp = c_score_0_0 act = ls_result-score ).
cl_abap_unit_assert=>assert_equals( exp = c_grade_x act = ls_result-grade ).
ENDMETHOD.
METHOD invalid_rating.
DATA(ls_result) = mo_cut->evaluate( iv_price = 7 iv_quality = 3 iv_delivery = 3 ).
cl_abap_unit_assert=>assert_equals( exp = c_score_0_0 act = ls_result-score ).
cl_abap_unit_assert=>assert_equals( exp = c_grade_x act = ls_result-grade ).
ENDMETHOD.
METHOD rounded_score.
DATA(ls_result) = mo_cut->evaluate( iv_price = 5 iv_quality = 2 iv_delivery = 3 ).
cl_abap_unit_assert=>assert_equals( exp = c_score_3_5 act = ls_result-score ).
cl_abap_unit_assert=>assert_equals( exp = c_grade_b act = ls_result-grade ).
ENDMETHOD.
METHOD grade_check.
DATA(ls_result) = mo_cut->evaluate( iv_price = 1 iv_quality = 2 iv_delivery = 1 ).
cl_abap_unit_assert=>assert_equals( exp = 'E' act = ls_result-grade ).
ENDMETHOD.
ENDCLASS.