CLASS ltc_commission DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}if_commission. METHODS setup. METHODS assert_bonus IMPORTING iv_expected TYPE {{p}}if_commission=>ty_amount iv_sales TYPE {{p}}if_commission=>ty_amount iv_target TYPE {{p}}if_commission=>ty_amount iv_years TYPE i. METHODS zero_or_negative FOR TESTING. METHODS below_half_target FOR TESTING. METHODS at_target FOR TESTING. METHODS above_target FOR TESTING. METHODS top_tier FOR TESTING. METHODS loyalty_bonus FOR TESTING. METHODS cap_applied FOR TESTING. ENDCLASS. CLASS ltc_commission IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}commission_calc( ). ENDMETHOD. METHOD assert_bonus. cl_abap_unit_assert=>assert_equals( exp = iv_expected act = mo_cut->calculate( iv_sales = iv_sales iv_target = iv_target iv_years = iv_years ) ). ENDMETHOD. METHOD zero_or_negative. assert_bonus( iv_expected = 0 iv_sales = 0 iv_target = 1000 iv_years = 0 ). assert_bonus( iv_expected = 0 iv_sales = -100 iv_target = 1000 iv_years = 0 ). assert_bonus( iv_expected = 0 iv_sales = 1000 iv_target = 0 iv_years = 0 ). ENDMETHOD. METHOD below_half_target. assert_bonus( iv_expected = 0 iv_sales = 400 iv_target = 1000 iv_years = 0 ). ENDMETHOD. METHOD at_target. assert_bonus( iv_expected = 10 iv_sales = 1000 iv_target = 1000 iv_years = 0 ). ENDMETHOD. METHOD above_target. assert_bonus( iv_expected = 16 iv_sales = 1200 iv_target = 1000 iv_years = 0 ). ENDMETHOD. METHOD top_tier. assert_bonus( iv_expected = 50 iv_sales = 2000 iv_target = 1000 iv_years = 0 ). ENDMETHOD. METHOD loyalty_bonus. assert_bonus( iv_expected = 210 iv_sales = 1000 iv_target = 1000 iv_years = 5 ). assert_bonus( iv_expected = 510 iv_sales = 1000 iv_target = 1000 iv_years = 10 ). ENDMETHOD. METHOD cap_applied. assert_bonus( iv_expected = 5000 iv_sales = 100000 iv_target = 1000 iv_years = 10 ). ENDMETHOD. ENDCLASS.