CLASS ltc_climb_pricer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}climb_pricer. METHODS setup. METHODS assert_amount IMPORTING iv_expected TYPE {{p}}climb_pricer=>ty_amount iv_actual TYPE {{p}}climb_pricer=>ty_amount iv_text TYPE string. METHODS adult_booking FOR TESTING. METHODS youth_booking FOR TESTING. METHODS family_booking FOR TESTING. METHODS equipment_surcharge FOR TESTING. METHODS group_surcharge FOR TESTING. METHODS member_discount FOR TESTING. METHODS loyalty_discount FOR TESTING. METHODS unknown_entry FOR TESTING. METHODS invalid_hours FOR TESTING. METHODS invalid_climbers FOR TESTING. ENDCLASS. CLASS ltc_climb_pricer IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}climb_pricer( ). ENDMETHOD. METHOD assert_amount. cl_abap_unit_assert=>assert_equals( exp = iv_expected act = iv_actual msg = iv_text ). ENDMETHOD. METHOD adult_booking. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'A' hours = 2 climbers = 2 ) ). assert_amount( iv_expected = '36.00' iv_actual = ls_result-base iv_text = 'base' ). assert_amount( iv_expected = '36.00' iv_actual = ls_result-total iv_text = 'total' ). ENDMETHOD. METHOD youth_booking. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'Y' hours = 1 climbers = 1 ) ). assert_amount( iv_expected = '6.00' iv_actual = ls_result-base iv_text = 'base' ). ENDMETHOD. METHOD family_booking. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'F' hours = 3 climbers = 4 ) ). assert_amount( iv_expected = '84.00' iv_actual = ls_result-base iv_text = 'base' ). ENDMETHOD. METHOD equipment_surcharge. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'A' hours = 2 climbers = 3 equipment = abap_true ) ). assert_amount( iv_expected = '12.00' iv_actual = ls_result-surcharge iv_text = 'surcharge' ). assert_amount( iv_expected = '66.00' iv_actual = ls_result-total iv_text = 'total' ). ENDMETHOD. METHOD group_surcharge. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'A' hours = 1 climbers = 6 ) ). assert_amount( iv_expected = '15.00' iv_actual = ls_result-surcharge iv_text = 'surcharge' ). assert_amount( iv_expected = '69.00' iv_actual = ls_result-total iv_text = 'total' ). ENDMETHOD. METHOD member_discount. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'A' hours = 2 climbers = 2 member = abap_true ) ). assert_amount( iv_expected = '5.40' iv_actual = ls_result-discount iv_text = 'discount' ). assert_amount( iv_expected = '30.60' iv_actual = ls_result-total iv_text = 'total' ). ENDMETHOD. METHOD loyalty_discount. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'A' hours = 2 climbers = 2 visits = 10 ) ). assert_amount( iv_expected = '7.20' iv_actual = ls_result-discount iv_text = 'discount' ). assert_amount( iv_expected = '28.80' iv_actual = ls_result-total iv_text = 'total' ). ENDMETHOD. METHOD unknown_entry. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'X' hours = 2 climbers = 2 ) ). cl_abap_unit_assert=>assert_equals( exp = 'UNKNOWN ENTRY TYPE' act = ls_result-message ). ENDMETHOD. METHOD invalid_hours. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'A' hours = 7 climbers = 2 ) ). cl_abap_unit_assert=>assert_equals( exp = 'INVALID HOURS' act = ls_result-message ). ENDMETHOD. METHOD invalid_climbers. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'A' hours = 2 climbers = 11 ) ). cl_abap_unit_assert=>assert_equals( exp = 'INVALID CLIMBERS' act = ls_result-message ). ENDMETHOD. ENDCLASS.