CLASS {{p}}claim_check_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}claim_checker. METHODS setup. METHODS valid_claim RETURNING VALUE(rs_claim) TYPE {{p}}claim_checker=>ty_claim. METHODS payout IMPORTING is_claim TYPE {{p}}claim_checker=>ty_claim RETURNING VALUE(rv_payout) TYPE {{p}}claim_checker=>ty_amount. METHODS assert_reason IMPORTING is_claim TYPE {{p}}claim_checker=>ty_claim iv_reason TYPE {{p}}cx_claim_error=>ty_reason. METHODS rejects_wrong_prefix FOR TESTING. METHODS rejects_blank_policy FOR TESTING. METHODS rejects_late_report FOR TESTING. METHODS rejects_negative_days FOR TESTING. METHODS rejects_old_vehicle FOR TESTING. METHODS accepts_max_age FOR TESTING. METHODS rejects_few_photos FOR TESTING. METHODS rejects_zero_damage FOR TESTING. METHODS rejects_high_deductible FOR TESTING. METHODS pays_damage_minus_deduct FOR TESTING. METHODS caps_high_payout FOR TESTING. METHODS policy_before_late FOR TESTING. ENDCLASS. CLASS {{p}}claim_check_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}claim_checker( ). ENDMETHOD. METHOD valid_claim. rs_claim = VALUE #( policy_id = 'P123456789' vehicle_age = 3 damage = '2500.00' deductible = '500.00' report_days = 5 photo_count = 3 ). ENDMETHOD. METHOD payout. TRY. rv_payout = mo_cut->check_claim( is_claim ). CATCH {{p}}cx_claim_error INTO DATA(lo_error). cl_abap_unit_assert=>fail( msg = |Unexpected rejection { lo_error->mv_reason }| ). ENDTRY. ENDMETHOD. METHOD assert_reason. TRY. mo_cut->check_claim( is_claim ). cl_abap_unit_assert=>fail( msg = |No exception with reason { iv_reason }| ). CATCH {{p}}cx_claim_error INTO DATA(lo_error). cl_abap_unit_assert=>assert_equals( exp = iv_reason act = lo_error->mv_reason msg = 'reason' ). cl_abap_unit_assert=>assert_char_cp( act = lo_error->get_text( ) exp = |*{ iv_reason }*| msg = 'message text' ). ENDTRY. ENDMETHOD. METHOD rejects_wrong_prefix. DATA(ls_claim) = valid_claim( ). ls_claim-policy_id = 'X123456789'. assert_reason( is_claim = ls_claim iv_reason = 'POLICY' ). ENDMETHOD. METHOD rejects_blank_policy. DATA(ls_claim) = valid_claim( ). ls_claim-policy_id = 'P12 456789'. assert_reason( is_claim = ls_claim iv_reason = 'POLICY' ). ENDMETHOD. METHOD rejects_late_report. DATA(ls_claim) = valid_claim( ). ls_claim-report_days = 15. assert_reason( is_claim = ls_claim iv_reason = 'LATE' ). ENDMETHOD. METHOD rejects_negative_days. DATA(ls_claim) = valid_claim( ). ls_claim-report_days = -1. assert_reason( is_claim = ls_claim iv_reason = 'LATE' ). ENDMETHOD. METHOD rejects_old_vehicle. DATA(ls_claim) = valid_claim( ). ls_claim-vehicle_age = 13. assert_reason( is_claim = ls_claim iv_reason = 'AGED' ). ENDMETHOD. METHOD accepts_max_age. DATA(ls_claim) = valid_claim( ). ls_claim-vehicle_age = 12. ls_claim-photo_count = 2. cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}claim_checker=>ty_amount( '2000.00' ) act = payout( ls_claim ) ). ENDMETHOD. METHOD rejects_few_photos. DATA(ls_claim) = valid_claim( ). ls_claim-photo_count = 1. assert_reason( is_claim = ls_claim iv_reason = 'PHOTOS' ). ENDMETHOD. METHOD rejects_zero_damage. DATA(ls_claim) = valid_claim( ). ls_claim-damage = 0. assert_reason( is_claim = ls_claim iv_reason = 'DAMAGE' ). ENDMETHOD. METHOD rejects_high_deductible. DATA(ls_claim) = valid_claim( ). ls_claim-deductible = '3000.00'. assert_reason( is_claim = ls_claim iv_reason = 'DEDUCT' ). ENDMETHOD. METHOD pays_damage_minus_deduct. DATA(ls_claim) = valid_claim( ). ls_claim-report_days = 14. cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}claim_checker=>ty_amount( '2000.00' ) act = payout( ls_claim ) ). ENDMETHOD. METHOD caps_high_payout. DATA(ls_claim) = valid_claim( ). ls_claim-damage = '20000.00'. ls_claim-deductible = '1000.00'. cl_abap_unit_assert=>assert_equals( exp = {{p}}claim_checker=>c_max_payout act = payout( ls_claim ) ). ENDMETHOD. METHOD policy_before_late. DATA(ls_claim) = valid_claim( ). ls_claim-policy_id = 'X123456789'. ls_claim-report_days = 30. assert_reason( is_claim = ls_claim iv_reason = 'POLICY' ). ENDMETHOD. ENDCLASS.