CLASS {{p}}climb_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC 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_two_hours FOR TESTING. METHODS youth_single_hour FOR TESTING. METHODS family_rate FOR TESTING. METHODS equipment_fee FOR TESTING. METHODS group_fee FOR TESTING. METHODS member_discount FOR TESTING. METHODS member_beats_loyalty FOR TESTING. METHODS top_loyalty FOR TESTING. METHODS mid_loyalty FOR TESTING. METHODS unknown_entry FOR TESTING. METHODS invalid_hours FOR TESTING. METHODS invalid_climbers FOR TESTING. ENDCLASS. CLASS {{p}}climb_hidden 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_two_hours. 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 = '0.00' iv_actual = ls_result-surcharge iv_text = 'surcharge' ). assert_amount( iv_expected = '0.00' iv_actual = ls_result-discount iv_text = 'discount' ). assert_amount( iv_expected = '36.00' iv_actual = ls_result-total iv_text = 'total' ). cl_abap_unit_assert=>assert_initial( act = ls_result-message msg = 'message must be empty' ). ENDMETHOD. METHOD youth_single_hour. 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' ). assert_amount( iv_expected = '6.00' iv_actual = ls_result-total iv_text = 'total' ). ENDMETHOD. METHOD family_rate. 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' ). assert_amount( iv_expected = '84.00' iv_actual = ls_result-total iv_text = 'total' ). ENDMETHOD. METHOD equipment_fee. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'A' hours = 2 climbers = 3 equipment = abap_true ) ). assert_amount( iv_expected = '54.00' iv_actual = ls_result-base iv_text = 'base' ). 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_fee. DATA(ls_small) = mo_cut->price( VALUE #( entry_type = 'A' hours = 1 climbers = 5 ) ). assert_amount( iv_expected = '45.00' iv_actual = ls_small-base iv_text = 'small base' ). assert_amount( iv_expected = '0.00' iv_actual = ls_small-surcharge iv_text = 'small surcharge' ). DATA(ls_group) = mo_cut->price( VALUE #( entry_type = 'A' hours = 1 climbers = 6 ) ). assert_amount( iv_expected = '54.00' iv_actual = ls_group-base iv_text = 'group base' ). assert_amount( iv_expected = '15.00' iv_actual = ls_group-surcharge iv_text = 'group surcharge' ). assert_amount( iv_expected = '69.00' iv_actual = ls_group-total iv_text = 'group 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 = '36.00' iv_actual = ls_result-base iv_text = 'base' ). 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 member_beats_loyalty. DATA(ls_result) = mo_cut->price( VALUE #( entry_type = 'A' hours = 2 climbers = 2 member = abap_true visits = 10 ) ). 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 top_loyalty. 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 mid_loyalty. DATA(ls_three) = mo_cut->price( VALUE #( entry_type = 'A' hours = 2 climbers = 2 visits = 3 ) ). assert_amount( iv_expected = '1.80' iv_actual = ls_three-discount iv_text = 'discount' ). assert_amount( iv_expected = '34.20' iv_actual = ls_three-total iv_text = 'total' ). DATA(ls_two) = mo_cut->price( VALUE #( entry_type = 'A' hours = 2 climbers = 2 visits = 2 ) ). assert_amount( iv_expected = '0.00' iv_actual = ls_two-discount iv_text = 'no discount' ). assert_amount( iv_expected = '36.00' iv_actual = ls_two-total iv_text = 'no discount 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 ). assert_amount( iv_expected = '0.00' iv_actual = ls_result-base iv_text = 'base' ). assert_amount( iv_expected = '0.00' iv_actual = ls_result-total iv_text = 'total' ). DATA(ls_order) = mo_cut->price( VALUE #( entry_type = 'X' hours = 0 climbers = 0 ) ). cl_abap_unit_assert=>assert_equals( exp = 'UNKNOWN ENTRY TYPE' act = ls_order-message ). ENDMETHOD. METHOD invalid_hours. DATA(ls_zero) = mo_cut->price( VALUE #( entry_type = 'A' hours = 0 climbers = 2 ) ). cl_abap_unit_assert=>assert_equals( exp = 'INVALID HOURS' act = ls_zero-message ). DATA(ls_many) = mo_cut->price( VALUE #( entry_type = 'A' hours = 7 climbers = 2 ) ). cl_abap_unit_assert=>assert_equals( exp = 'INVALID HOURS' act = ls_many-message ). DATA(ls_order) = mo_cut->price( VALUE #( entry_type = 'A' hours = 0 climbers = 0 ) ). cl_abap_unit_assert=>assert_equals( exp = 'INVALID HOURS' act = ls_order-message ). ENDMETHOD. METHOD invalid_climbers. DATA(ls_none) = mo_cut->price( VALUE #( entry_type = 'A' hours = 2 climbers = 0 ) ). cl_abap_unit_assert=>assert_equals( exp = 'INVALID CLIMBERS' act = ls_none-message ). DATA(ls_many) = mo_cut->price( VALUE #( entry_type = 'A' hours = 2 climbers = 11 ) ). cl_abap_unit_assert=>assert_equals( exp = 'INVALID CLIMBERS' act = ls_many-message ). ENDMETHOD. ENDCLASS.