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,108 @@
CLASS {{p}}hotel_rate DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES {{p}}if_hotel_rate.
PRIVATE SECTION.
CONSTANTS:
c_breakfast TYPE {{p}}if_hotel_rate=>ty_amount VALUE '12.50',
c_city_tax TYPE {{p}}if_hotel_rate=>ty_amount VALUE '3.00'.
METHODS validate
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
iv_nights TYPE i
iv_guests TYPE i
RETURNING VALUE(rv_reason) TYPE {{p}}if_hotel_rate=>ty_reason.
METHODS room_count
IMPORTING iv_guests TYPE i
RETURNING VALUE(rv_rooms) TYPE i.
METHODS nightly_rate
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
RETURNING VALUE(rv_amount) TYPE {{p}}if_hotel_rate=>ty_amount.
METHODS discount_percent
IMPORTING iv_nights TYPE i
RETURNING VALUE(rv_percent) TYPE i.
METHODS net_room_total
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
iv_nights TYPE i
iv_guests TYPE i
RETURNING VALUE(rv_total) TYPE {{p}}if_hotel_rate=>ty_amount.
METHODS extras
IMPORTING iv_nights TYPE i
iv_guests TYPE i
iv_breakfast TYPE abap_bool
RETURNING VALUE(rv_extras) TYPE {{p}}if_hotel_rate=>ty_amount.
ENDCLASS.
CLASS {{p}}hotel_rate IMPLEMENTATION.
METHOD {{p}}if_hotel_rate~calculate.
rs_result-reason = validate( iv_category = iv_category
iv_nights = iv_nights
iv_guests = iv_guests ).
IF rs_result-reason <> {{p}}if_hotel_rate=>c_reason-ok.
rs_result-price = 0.
RETURN.
ENDIF.
rs_result-price = net_room_total( iv_category = iv_category
iv_nights = iv_nights
iv_guests = iv_guests )
+ extras( iv_nights = iv_nights
iv_guests = iv_guests
iv_breakfast = iv_breakfast ).
ENDMETHOD.
METHOD validate.
IF iv_nights < 1.
rv_reason = {{p}}if_hotel_rate=>c_reason-nights.
ELSEIF iv_guests < 1.
rv_reason = {{p}}if_hotel_rate=>c_reason-guests.
ELSEIF iv_category <> {{p}}if_hotel_rate=>c_category-basic
AND iv_category <> {{p}}if_hotel_rate=>c_category-comfort
AND iv_category <> {{p}}if_hotel_rate=>c_category-suite.
rv_reason = {{p}}if_hotel_rate=>c_reason-category.
ELSE.
rv_reason = {{p}}if_hotel_rate=>c_reason-ok.
ENDIF.
ENDMETHOD.
METHOD room_count.
rv_rooms = ( iv_guests + 1 ) DIV 2.
ENDMETHOD.
METHOD nightly_rate.
CASE iv_category.
WHEN {{p}}if_hotel_rate=>c_category-basic.
rv_amount = '90.00'.
WHEN {{p}}if_hotel_rate=>c_category-comfort.
rv_amount = '140.00'.
WHEN {{p}}if_hotel_rate=>c_category-suite.
rv_amount = '260.00'.
ENDCASE.
ENDMETHOD.
METHOD discount_percent.
IF iv_nights >= 28.
rv_percent = 20.
ELSEIF iv_nights >= 14.
rv_percent = 15.
ELSEIF iv_nights >= 7.
rv_percent = 10.
ENDIF.
ENDMETHOD.
METHOD net_room_total.
DATA lv_total TYPE {{p}}if_hotel_rate=>ty_amount.
lv_total = nightly_rate( iv_category ) * room_count( iv_guests ) * iv_nights.
DATA lv_discount TYPE {{p}}if_hotel_rate=>ty_amount.
lv_discount = lv_total * discount_percent( iv_nights ) / 100.
rv_total = lv_total - lv_discount.
ENDMETHOD.
METHOD extras.
DATA(lv_guest_nights) = iv_guests * iv_nights.
rv_extras = lv_guest_nights * c_city_tax.
IF iv_breakfast = abap_true.
rv_extras = rv_extras + lv_guest_nights * c_breakfast.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,76 @@
CLASS ltc_hotel_rate DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}if_hotel_rate.
METHODS setup.
METHODS basic_room FOR TESTING.
METHODS invalid_nights FOR TESTING.
METHODS invalid_guests FOR TESTING.
METHODS invalid_category FOR TESTING.
METHODS breakfast_and_tax FOR TESTING.
METHODS long_stay_discount FOR TESTING.
ENDCLASS.
CLASS ltc_hotel_rate IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}hotel_rate( ).
ENDMETHOD.
METHOD basic_room.
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
iv_nights = 1
iv_guests = 1
iv_breakfast = abap_false ).
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-ok
act = ls_result-reason ).
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_hotel_rate=>ty_amount( '93.00' )
act = ls_result-price ).
ENDMETHOD.
METHOD invalid_nights.
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-comfort
iv_nights = 0
iv_guests = 2
iv_breakfast = abap_false ).
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-nights
act = ls_result-reason ).
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_hotel_rate=>ty_amount( '0.00' )
act = ls_result-price ).
ENDMETHOD.
METHOD invalid_guests.
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
iv_nights = 4
iv_guests = 0
iv_breakfast = abap_false ).
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-guests
act = ls_result-reason ).
ENDMETHOD.
METHOD invalid_category.
DATA(ls_result) = mo_cut->calculate( iv_category = 'Z'
iv_nights = 4
iv_guests = 2
iv_breakfast = abap_true ).
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-category
act = ls_result-reason ).
ENDMETHOD.
METHOD breakfast_and_tax.
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
iv_nights = 2
iv_guests = 2
iv_breakfast = abap_true ).
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_hotel_rate=>ty_amount( '242.00' )
act = ls_result-price ).
ENDMETHOD.
METHOD long_stay_discount.
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-comfort
iv_nights = 14
iv_guests = 2
iv_breakfast = abap_false ).
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_hotel_rate=>ty_amount( '1750.00' )
act = ls_result-price ).
ENDMETHOD.
ENDCLASS.