CLASS ltc_med_copay DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}if_med_copay. METHODS setup. METHODS standard_pays_minimum FOR TESTING. METHODS standard_pays_percentage FOR TESTING. METHODS chronic_pays_percentage FOR TESTING. METHODS exempt_pays_nothing FOR TESTING. METHODS copay_is_capped_at_total FOR TESTING. METHODS zero_price_is_rejected FOR TESTING. METHODS zero_quantity_is_rejected FOR TESTING. METHODS unknown_tier_is_rejected FOR TESTING. ENDCLASS. CLASS ltc_med_copay IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}med_copay( ). ENDMETHOD. METHOD standard_pays_minimum. DATA(ls_result) = mo_cut->calculate( iv_price = '10.00' iv_quantity = 1 iv_tier = 'S' ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_med_copay=>ty_amount( '5.00' ) act = ls_result-copay ). ENDMETHOD. METHOD standard_pays_percentage. DATA(ls_result) = mo_cut->calculate( iv_price = '100.00' iv_quantity = 1 iv_tier = 'S' ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_med_copay=>ty_amount( '30.00' ) act = ls_result-copay ). ENDMETHOD. METHOD chronic_pays_percentage. DATA(ls_result) = mo_cut->calculate( iv_price = '66.67' iv_quantity = 1 iv_tier = 'C' ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_med_copay=>ty_amount( '6.67' ) act = ls_result-copay ). ENDMETHOD. METHOD exempt_pays_nothing. DATA(ls_result) = mo_cut->calculate( iv_price = '100.00' iv_quantity = 3 iv_tier = 'E' ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_med_copay=>ty_amount( '0.00' ) act = ls_result-copay ). ENDMETHOD. METHOD copay_is_capped_at_total. DATA(ls_result) = mo_cut->calculate( iv_price = '2.00' iv_quantity = 1 iv_tier = 'S' ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_med_copay=>ty_amount( '2.00' ) act = ls_result-copay ). ENDMETHOD. METHOD zero_price_is_rejected. DATA(ls_result) = mo_cut->calculate( iv_price = '0.00' iv_quantity = 2 iv_tier = 'S' ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_med_copay=>c_reason-price act = ls_result-reason ). ENDMETHOD. METHOD zero_quantity_is_rejected. DATA(ls_result) = mo_cut->calculate( iv_price = '10.00' iv_quantity = 0 iv_tier = 'C' ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_med_copay=>c_reason-quantity act = ls_result-reason ). ENDMETHOD. METHOD unknown_tier_is_rejected. DATA(ls_result) = mo_cut->calculate( iv_price = '10.00' iv_quantity = 1 iv_tier = 'Z' ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_med_copay=>c_reason-tier act = ls_result-reason ). ENDMETHOD. ENDCLASS.