CLASS {{p}}snow_fee_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}snow_fee. METHODS setup. METHODS assert_fee IMPORTING iv_area TYPE {{p}}snow_fee=>ty_area iv_priority TYPE {{p}}snow_fee=>ty_priority iv_distance TYPE {{p}}snow_fee=>ty_distance iv_expected TYPE {{p}}snow_fee=>ty_fee. METHODS minimum_charge FOR TESTING. METHODS small_area_rate FOR TESTING. METHODS medium_area_rate FOR TESTING. METHODS medium_area_upper FOR TESTING. METHODS large_area_rate FOR TESTING. METHODS express_surcharge FOR TESTING. METHODS emergency_surcharge FOR TESTING. METHODS unknown_priority FOR TESTING. METHODS minimum_with_express FOR TESTING. METHODS travel_charged FOR TESTING. METHODS travel_not_surcharged FOR TESTING. METHODS zero_area_returns_zero FOR TESTING. ENDCLASS. CLASS {{p}}snow_fee_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}snow_fee( ). ENDMETHOD. METHOD assert_fee. cl_abap_unit_assert=>assert_equals( exp = iv_expected act = mo_cut->calculate( iv_area = iv_area iv_priority = iv_priority iv_distance = iv_distance ) ). ENDMETHOD. METHOD minimum_charge. assert_fee( iv_area = 100 iv_priority = 'S' iv_distance = 0 iv_expected = '45.00' ). ENDMETHOD. METHOD small_area_rate. assert_fee( iv_area = 500 iv_priority = 'S' iv_distance = 0 iv_expected = '100.00' ). ENDMETHOD. METHOD medium_area_rate. assert_fee( iv_area = 625 iv_priority = 'S' iv_distance = 0 iv_expected = '100.00' ). ENDMETHOD. METHOD medium_area_upper. assert_fee( iv_area = 2000 iv_priority = 'S' iv_distance = 0 iv_expected = '320.00' ). ENDMETHOD. METHOD large_area_rate. assert_fee( iv_area = 2500 iv_priority = 'S' iv_distance = 0 iv_expected = '300.00' ). ENDMETHOD. METHOD express_surcharge. assert_fee( iv_area = 1000 iv_priority = 'E' iv_distance = 0 iv_expected = '200.00' ). ENDMETHOD. METHOD emergency_surcharge. assert_fee( iv_area = 1000 iv_priority = 'X' iv_distance = 0 iv_expected = '240.00' ). ENDMETHOD. METHOD unknown_priority. assert_fee( iv_area = 1000 iv_priority = 'Z' iv_distance = 0 iv_expected = '160.00' ). ENDMETHOD. METHOD minimum_with_express. assert_fee( iv_area = 100 iv_priority = 'E' iv_distance = 0 iv_expected = '56.25' ). ENDMETHOD. METHOD travel_charged. assert_fee( iv_area = 1000 iv_priority = 'S' iv_distance = 30 iv_expected = '168.00' ). ENDMETHOD. METHOD travel_not_surcharged. assert_fee( iv_area = 1000 iv_priority = 'E' iv_distance = 30 iv_expected = '208.00' ). ENDMETHOD. METHOD zero_area_returns_zero. assert_fee( iv_area = 0 iv_priority = 'X' iv_distance = 30 iv_expected = '0.00' ). ENDMETHOD. ENDCLASS.