CLASS {{p}}lcl_rent_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. PRIVATE SECTION. METHODS price_for IMPORTING iv_class TYPE string iv_minutes TYPE i iv_km TYPE i iv_member TYPE abap_bool DEFAULT abap_false iv_weekend TYPE abap_bool DEFAULT abap_false RETURNING VALUE(rs_result) TYPE {{p}}cl_rent=>ty_result. METHODS time_fee_blocks FOR TESTING. METHODS distance_fee_free_km FOR TESTING. METHODS weekend_surcharge FOR TESTING. METHODS member_discount FOR TESTING. METHODS minimum_total FOR TESTING. METHODS invalid_input FOR TESTING. ENDCLASS. CLASS {{p}}lcl_rent_test IMPLEMENTATION. METHOD price_for. DATA(ls_request) = VALUE {{p}}cl_rent=>ty_request( vehicle_class = iv_class minutes = iv_minutes km = iv_km member = iv_member weekend = iv_weekend ). rs_result = {{p}}cl_rent=>calculate( ls_request ). ENDMETHOD. METHOD time_fee_blocks. DATA(ls_15) = price_for( iv_class = `S` iv_minutes = 15 iv_km = 0 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 3 ) act = ls_15-time_fee ). DATA(ls_16) = price_for( iv_class = `S` iv_minutes = 16 iv_km = 0 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 6 ) act = ls_16-time_fee ). DATA(ls_61) = price_for( iv_class = `L` iv_minutes = 61 iv_km = 0 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 40 ) act = ls_61-time_fee ). ENDMETHOD. METHOD distance_fee_free_km. DATA(ls_free) = price_for( iv_class = `L` iv_minutes = 60 iv_km = 10 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = ls_free-distance_fee ). DATA(ls_paid) = price_for( iv_class = `L` iv_minutes = 60 iv_km = 14 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1 ) act = ls_paid-distance_fee ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 33 ) act = ls_paid-total ). ENDMETHOD. METHOD weekend_surcharge. DATA(ls) = price_for( iv_class = `M` iv_minutes = 30 iv_km = 0 iv_weekend = abap_true ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '2.50' ) act = ls-surcharge ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.50' ) act = ls-total ). ENDMETHOD. METHOD member_discount. DATA(ls_half) = price_for( iv_class = `M` iv_minutes = 15 iv_km = 11 iv_weekend = abap_true iv_member = abap_true ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '0.98' ) act = ls_half-discount ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '5.52' ) act = ls_half-total ). DATA(ls_up) = price_for( iv_class = `S` iv_minutes = 15 iv_km = 28 iv_member = abap_true ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '1.13' ) act = ls_up-discount ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '6.37' ) act = ls_up-total ). ENDMETHOD. METHOD minimum_total. DATA(ls) = price_for( iv_class = `S` iv_minutes = 15 iv_km = 0 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 3 ) act = ls-time_fee ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 5 ) act = ls-total ). ENDMETHOD. METHOD invalid_input. cl_abap_unit_assert=>assert_equals( exp = {{p}}cl_rent=>c_err-duration act = price_for( iv_class = `S` iv_minutes = 0 iv_km = 0 )-err_code ). cl_abap_unit_assert=>assert_equals( exp = {{p}}cl_rent=>c_err-distance act = price_for( iv_class = `S` iv_minutes = 15 iv_km = -1 )-err_code ). cl_abap_unit_assert=>assert_equals( exp = {{p}}cl_rent=>c_err-bad_class act = price_for( iv_class = `X` iv_minutes = 15 iv_km = 0 )-err_code ). ENDMETHOD. ENDCLASS.