CLASS {{p}}farrier_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS run_visit IMPORTING iv_horses TYPE i iv_km TYPE decfloat34 iv_new_shoes TYPE abap_bool iv_contract TYPE abap_bool EXPORTING ev_fee TYPE decfloat34 ev_weeks TYPE i ev_reject TYPE abap_bool ev_subrc TYPE sysubrc. METHODS negative_horses FOR TESTING. METHODS zero_horses_rejected FOR TESTING. METHODS standard_visit FOR TESTING. METHODS four_horses_standard FOR TESTING. METHODS bulk_rate_from_fifth FOR TESTING. METHODS new_shoes_charge FOR TESTING. METHODS travel_minimum FOR TESTING. METHODS travel_rounded_up FOR TESTING. METHODS contract_discount FOR TESTING. METHODS contract_and_shoes FOR TESTING. ENDCLASS. CLASS {{p}}farrier_hidden IMPLEMENTATION. METHOD run_visit. CALL FUNCTION '{{P}}FARRIER_FEE' EXPORTING iv_horses = iv_horses iv_km = iv_km iv_new_shoes = iv_new_shoes iv_contract = iv_contract IMPORTING ev_fee = ev_fee ev_weeks = ev_weeks ev_reject = ev_reject EXCEPTIONS invalid_horses = 1 OTHERS = 2. ev_subrc = sy-subrc. ENDMETHOD. METHOD negative_horses. DATA lv_fee TYPE decfloat34. DATA lv_weeks TYPE i. DATA lv_reject TYPE abap_bool. DATA lv_subrc TYPE sysubrc. run_visit( EXPORTING iv_horses = -1 iv_km = 10 iv_new_shoes = abap_false iv_contract = abap_false IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_subrc ). ENDMETHOD. METHOD zero_horses_rejected. DATA lv_fee TYPE decfloat34. DATA lv_weeks TYPE i. DATA lv_reject TYPE abap_bool. DATA lv_subrc TYPE sysubrc. DATA lv_expected TYPE decfloat34 VALUE '0'. run_visit( EXPORTING iv_horses = 0 iv_km = 10 iv_new_shoes = abap_false iv_contract = abap_false IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_true( lv_reject ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_weeks ). ENDMETHOD. METHOD standard_visit. DATA lv_fee TYPE decfloat34. DATA lv_weeks TYPE i. DATA lv_reject TYPE abap_bool. DATA lv_subrc TYPE sysubrc. DATA lv_expected TYPE decfloat34 VALUE '100'. run_visit( EXPORTING iv_horses = 2 iv_km = 10 iv_new_shoes = abap_false iv_contract = abap_false IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_false( lv_reject ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = 6 act = lv_weeks ). ENDMETHOD. METHOD four_horses_standard. DATA lv_fee TYPE decfloat34. DATA lv_weeks TYPE i. DATA lv_reject TYPE abap_bool. DATA lv_subrc TYPE sysubrc. DATA lv_expected TYPE decfloat34 VALUE '190'. run_visit( EXPORTING iv_horses = 4 iv_km = 10 iv_new_shoes = abap_false iv_contract = abap_false IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ). ENDMETHOD. METHOD bulk_rate_from_fifth. DATA lv_fee TYPE decfloat34. DATA lv_weeks TYPE i. DATA lv_reject TYPE abap_bool. DATA lv_subrc TYPE sysubrc. DATA lv_expected TYPE decfloat34 VALUE '230'. run_visit( EXPORTING iv_horses = 5 iv_km = 10 iv_new_shoes = abap_false iv_contract = abap_false IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = 6 act = lv_weeks ). ENDMETHOD. METHOD new_shoes_charge. DATA lv_fee TYPE decfloat34. DATA lv_weeks TYPE i. DATA lv_reject TYPE abap_bool. DATA lv_subrc TYPE sysubrc. DATA lv_expected TYPE decfloat34 VALUE '160'. run_visit( EXPORTING iv_horses = 2 iv_km = 10 iv_new_shoes = abap_true iv_contract = abap_false IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = 6 act = lv_weeks ). ENDMETHOD. METHOD travel_minimum. DATA lv_fee TYPE decfloat34. DATA lv_weeks TYPE i. DATA lv_reject TYPE abap_bool. DATA lv_subrc TYPE sysubrc. DATA lv_expected TYPE decfloat34 VALUE '55'. run_visit( EXPORTING iv_horses = 1 iv_km = 3 iv_new_shoes = abap_false iv_contract = abap_false IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ). ENDMETHOD. METHOD travel_rounded_up. DATA lv_fee TYPE decfloat34. DATA lv_weeks TYPE i. DATA lv_reject TYPE abap_bool. DATA lv_subrc TYPE sysubrc. DATA lv_expected TYPE decfloat34 VALUE '61'. run_visit( EXPORTING iv_horses = 1 iv_km = 26 iv_new_shoes = abap_false iv_contract = abap_false IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ). ENDMETHOD. METHOD contract_discount. DATA lv_fee TYPE decfloat34. DATA lv_weeks TYPE i. DATA lv_reject TYPE abap_bool. DATA lv_subrc TYPE sysubrc. DATA lv_expected TYPE decfloat34 VALUE '88'. run_visit( EXPORTING iv_horses = 2 iv_km = 10 iv_new_shoes = abap_false iv_contract = abap_true IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lv_weeks ). ENDMETHOD. METHOD contract_and_shoes. DATA lv_fee TYPE decfloat34. DATA lv_weeks TYPE i. DATA lv_reject TYPE abap_bool. DATA lv_subrc TYPE sysubrc. DATA lv_expected TYPE decfloat34 VALUE '352'. run_visit( EXPORTING iv_horses = 5 iv_km = 50 iv_new_shoes = abap_true iv_contract = abap_true IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lv_weeks ). ENDMETHOD. ENDCLASS.