CLASS {{p}}t42_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC 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 iv_msg TYPE string. METHODS zero_sales FOR TESTING. METHODS zero_target FOR TESTING. METHODS negative_sales FOR TESTING. METHODS below_half_target FOR TESTING. METHODS exactly_half_target FOR TESTING. METHODS at_target FOR TESTING. METHODS above_target FOR TESTING. METHODS top_tier FOR TESTING. METHODS rounds_to_cent FOR TESTING. METHODS loyalty_five_years FOR TESTING. METHODS loyalty_ten_years FOR TESTING. METHODS cap_applied FOR TESTING. ENDCLASS. CLASS {{p}}t42_hidden 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 ) msg = iv_msg ). ENDMETHOD. METHOD zero_sales. assert_bonus( iv_expected = 0 iv_sales = 0 iv_target = 1000 iv_years = 0 iv_msg = 'zero sales' ). ENDMETHOD. METHOD zero_target. assert_bonus( iv_expected = 0 iv_sales = 1000 iv_target = 0 iv_years = 0 iv_msg = 'zero target' ). ENDMETHOD. METHOD negative_sales. assert_bonus( iv_expected = 0 iv_sales = -100 iv_target = 1000 iv_years = 0 iv_msg = 'negative sales' ). ENDMETHOD. METHOD below_half_target. assert_bonus( iv_expected = 0 iv_sales = '499.99' iv_target = 1000 iv_years = 0 iv_msg = 'below half target' ). ENDMETHOD. METHOD exactly_half_target. assert_bonus( iv_expected = 5 iv_sales = 500 iv_target = 1000 iv_years = 0 iv_msg = 'exactly half target' ). ENDMETHOD. METHOD at_target. assert_bonus( iv_expected = 10 iv_sales = 1000 iv_target = 1000 iv_years = 0 iv_msg = 'at target' ). ENDMETHOD. METHOD above_target. assert_bonus( iv_expected = 16 iv_sales = 1200 iv_target = 1000 iv_years = 0 iv_msg = 'above target' ). ENDMETHOD. METHOD top_tier. assert_bonus( iv_expected = 50 iv_sales = 2000 iv_target = 1000 iv_years = 0 iv_msg = 'top tier' ). ENDMETHOD. METHOD rounds_to_cent. assert_bonus( iv_expected = '12.35' iv_sales = '1234.55' iv_target = '1234.55' iv_years = 0 iv_msg = 'rounding' ). ENDMETHOD. METHOD loyalty_five_years. assert_bonus( iv_expected = 210 iv_sales = 1000 iv_target = 1000 iv_years = 5 iv_msg = 'five years' ). ENDMETHOD. METHOD loyalty_ten_years. assert_bonus( iv_expected = 510 iv_sales = 1000 iv_target = 1000 iv_years = 10 iv_msg = 'ten years' ). ENDMETHOD. METHOD cap_applied. assert_bonus( iv_expected = 5000 iv_sales = 100000 iv_target = 1000 iv_years = 10 iv_msg = 'cap' ). ENDMETHOD. ENDCLASS.