CLASS {{p}}t_bowl_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS fee_for IMPORTING iv_lanes TYPE i iv_minutes TYPE i iv_players TYPE i iv_day TYPE string iv_start TYPE t iv_member TYPE abap_bool RETURNING VALUE(rv_fee) TYPE decfloat34. METHODS lane_fee_basic FOR TESTING. METHODS rounds_up_part_hour FOR TESTING. METHODS peak_surcharge FOR TESTING. METHODS no_peak_outside FOR TESTING. METHODS weekend_surcharge FOR TESTING. METHODS shoes_charge FOR TESTING. METHODS member_discount FOR TESTING. METHODS no_discount_below_min FOR TESTING. METHODS invalid_input_raises FOR TESTING. METHODS combined_charges FOR TESTING. ENDCLASS. CLASS {{p}}t_bowl_hidden IMPLEMENTATION. METHOD fee_for. CALL FUNCTION '{{P}}BOWL_FEE_OLD' EXPORTING iv_lanes = iv_lanes iv_minutes = iv_minutes iv_players = iv_players iv_day = iv_day iv_start = iv_start iv_member = iv_member IMPORTING ev_fee = rv_fee EXCEPTIONS invalid_input = 1 OTHERS = 2. cl_abap_unit_assert=>assert_subrc( exp = 0 ). ENDMETHOD. METHOD lane_fee_basic. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.00' ) act = fee_for( iv_lanes = 1 iv_minutes = 60 iv_players = 0 iv_day = 'WED' iv_start = '140000' iv_member = abap_false ) ). ENDMETHOD. METHOD rounds_up_part_hour. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '6.00' ) act = fee_for( iv_lanes = 1 iv_minutes = 30 iv_players = 0 iv_day = 'WED' iv_start = '140000' iv_member = abap_false ) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.00' ) act = fee_for( iv_lanes = 1 iv_minutes = 31 iv_players = 0 iv_day = 'WED' iv_start = '140000' iv_member = abap_false ) ). ENDMETHOD. METHOD peak_surcharge. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '14.40' ) act = fee_for( iv_lanes = 1 iv_minutes = 60 iv_players = 0 iv_day = 'WED' iv_start = '180000' iv_member = abap_false ) ). ENDMETHOD. METHOD no_peak_outside. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.00' ) act = fee_for( iv_lanes = 1 iv_minutes = 60 iv_players = 0 iv_day = 'WED' iv_start = '175959' iv_member = abap_false ) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.00' ) act = fee_for( iv_lanes = 1 iv_minutes = 60 iv_players = 0 iv_day = 'WED' iv_start = '220000' iv_member = abap_false ) ). ENDMETHOD. METHOD weekend_surcharge. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '13.80' ) act = fee_for( iv_lanes = 1 iv_minutes = 60 iv_players = 0 iv_day = 'SAT' iv_start = '140000' iv_member = abap_false ) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '13.80' ) act = fee_for( iv_lanes = 1 iv_minutes = 60 iv_players = 0 iv_day = 'SUN' iv_start = '140000' iv_member = abap_false ) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.00' ) act = fee_for( iv_lanes = 1 iv_minutes = 60 iv_players = 0 iv_day = 'MON' iv_start = '140000' iv_member = abap_false ) ). ENDMETHOD. METHOD shoes_charge. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '19.50' ) act = fee_for( iv_lanes = 1 iv_minutes = 60 iv_players = 3 iv_day = 'WED' iv_start = '140000' iv_member = abap_false ) ). ENDMETHOD. METHOD member_discount. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '30.60' ) act = fee_for( iv_lanes = 2 iv_minutes = 60 iv_players = 4 iv_day = 'WED' iv_start = '140000' iv_member = abap_true ) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '34.00' ) act = fee_for( iv_lanes = 2 iv_minutes = 60 iv_players = 4 iv_day = 'WED' iv_start = '140000' iv_member = abap_false ) ). ENDMETHOD. METHOD no_discount_below_min. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '17.00' ) act = fee_for( iv_lanes = 1 iv_minutes = 60 iv_players = 2 iv_day = 'WED' iv_start = '140000' iv_member = abap_true ) ). ENDMETHOD. METHOD invalid_input_raises. DATA lv_fee TYPE decfloat34. CALL FUNCTION '{{P}}BOWL_FEE_OLD' EXPORTING iv_lanes = 0 iv_minutes = 60 iv_players = 0 iv_day = 'WED' iv_start = '140000' iv_member = abap_false IMPORTING ev_fee = lv_fee EXCEPTIONS invalid_input = 1 OTHERS = 2. cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ). CALL FUNCTION '{{P}}BOWL_FEE_OLD' EXPORTING iv_lanes = 1 iv_minutes = 0 iv_players = 0 iv_day = 'WED' iv_start = '140000' iv_member = abap_false IMPORTING ev_fee = lv_fee EXCEPTIONS invalid_input = 1 OTHERS = 2. cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ). CALL FUNCTION '{{P}}BOWL_FEE_OLD' EXPORTING iv_lanes = 1 iv_minutes = 60 iv_players = -1 iv_day = 'WED' iv_start = '140000' iv_member = abap_false IMPORTING ev_fee = lv_fee EXCEPTIONS invalid_input = 1 OTHERS = 2. cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ). ENDMETHOD. METHOD combined_charges. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '19.40' ) act = fee_for( iv_lanes = 1 iv_minutes = 45 iv_players = 2 iv_day = 'SUN' iv_start = '200000' iv_member = abap_true ) ). ENDMETHOD. ENDCLASS.