CLASS ltc_ride_booking DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}if_ride_booking. METHODS setup. METHODS exp_amount IMPORTING iv_cents TYPE i RETURNING VALUE(rv_amount) TYPE {{p}}if_ride_booking=>ty_amount. METHODS price_basic_lesson FOR TESTING. METHODS price_group_discount FOR TESTING. METHODS empty_name_raises FOR TESTING. METHODS unknown_discipline_raises FOR TESTING. METHODS invalid_minutes_raises FOR TESTING. METHODS jumping_needs_level FOR TESTING. METHODS vaulting_needs_group FOR TESTING. ENDCLASS. CLASS ltc_ride_booking IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}ride_booking( ). ENDMETHOD. METHOD exp_amount. DATA lv_amount TYPE {{p}}if_ride_booking=>ty_amount. lv_amount = iv_cents. rv_amount = lv_amount / 100. ENDMETHOD. METHOD price_basic_lesson. TRY. cl_abap_unit_assert=>assert_equals( exp = exp_amount( 2000 ) act = mo_cut->book( iv_rider_name = `Anna` iv_discipline = {{p}}if_ride_booking=>c_discipline-dressage iv_level = {{p}}if_ride_booking=>c_level-basic iv_minutes = 30 iv_riders = 1 ) ). CATCH {{p}}cx_ride_booking. cl_abap_unit_assert=>fail( 'exception not expected' ). ENDTRY. ENDMETHOD. METHOD price_group_discount. TRY. cl_abap_unit_assert=>assert_equals( exp = exp_amount( 5040 ) act = mo_cut->book( iv_rider_name = `Ben` iv_discipline = {{p}}if_ride_booking=>c_discipline-vaulting iv_level = {{p}}if_ride_booking=>c_level-advanced iv_minutes = 120 iv_riders = 6 ) ). CATCH {{p}}cx_ride_booking. cl_abap_unit_assert=>fail( 'exception not expected' ). ENDTRY. ENDMETHOD. METHOD empty_name_raises. TRY. mo_cut->book( iv_rider_name = `` iv_discipline = {{p}}if_ride_booking=>c_discipline-dressage iv_level = {{p}}if_ride_booking=>c_level-basic iv_minutes = 30 iv_riders = 1 ). cl_abap_unit_assert=>fail( 'exception expected' ). CATCH {{p}}cx_ride_input INTO DATA(lx_input). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_ride_booking=>c_reason-name act = lx_input->reason ). CATCH {{p}}cx_ride_limit. cl_abap_unit_assert=>fail( 'wrong exception' ). ENDTRY. ENDMETHOD. METHOD unknown_discipline_raises. TRY. mo_cut->book( iv_rider_name = `Cara` iv_discipline = 'XXXX' iv_level = {{p}}if_ride_booking=>c_level-basic iv_minutes = 30 iv_riders = 1 ). cl_abap_unit_assert=>fail( 'exception expected' ). CATCH {{p}}cx_ride_input INTO DATA(lx_input). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_ride_booking=>c_reason-discipline act = lx_input->reason ). CATCH {{p}}cx_ride_limit. cl_abap_unit_assert=>fail( 'wrong exception' ). ENDTRY. ENDMETHOD. METHOD invalid_minutes_raises. TRY. mo_cut->book( iv_rider_name = `Dana` iv_discipline = {{p}}if_ride_booking=>c_discipline-western iv_level = {{p}}if_ride_booking=>c_level-basic iv_minutes = 20 iv_riders = 1 ). cl_abap_unit_assert=>fail( 'exception expected' ). CATCH {{p}}cx_ride_input INTO DATA(lx_input). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_ride_booking=>c_reason-minutes act = lx_input->reason ). CATCH {{p}}cx_ride_limit. cl_abap_unit_assert=>fail( 'wrong exception' ). ENDTRY. ENDMETHOD. METHOD jumping_needs_level. TRY. mo_cut->book( iv_rider_name = `Erik` iv_discipline = {{p}}if_ride_booking=>c_discipline-jumping iv_level = {{p}}if_ride_booking=>c_level-light iv_minutes = 60 iv_riders = 1 ). cl_abap_unit_assert=>fail( 'exception expected' ). CATCH {{p}}cx_ride_input. cl_abap_unit_assert=>fail( 'wrong exception' ). CATCH {{p}}cx_ride_limit INTO DATA(lx_limit). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_ride_booking=>c_reason-show_level act = lx_limit->reason ). ENDTRY. ENDMETHOD. METHOD vaulting_needs_group. TRY. mo_cut->book( iv_rider_name = `Fiona` iv_discipline = {{p}}if_ride_booking=>c_discipline-vaulting iv_level = {{p}}if_ride_booking=>c_level-basic iv_minutes = 60 iv_riders = 2 ). cl_abap_unit_assert=>fail( 'exception expected' ). CATCH {{p}}cx_ride_input. cl_abap_unit_assert=>fail( 'wrong exception' ). CATCH {{p}}cx_ride_limit INTO DATA(lx_limit). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_ride_booking=>c_reason-volt_group act = lx_limit->reason ). ENDTRY. ENDMETHOD. ENDCLASS.