CLASS ltc_trade_in_valuer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}if_trade_in. METHODS setup. METHODS premium_new_car FOR TESTING. METHODS volume_one_year FOR TESTING. METHODS mileage_rounds_down FOR TESTING. METHODS floor_at_minimum FOR TESTING. METHODS unknown_brand FOR TESTING. METHODS unknown_grade FOR TESTING. METHODS negative_age FOR TESTING. METHODS mileage_too_high FOR TESTING. ENDCLASS. CLASS ltc_trade_in_valuer IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}trade_in_valuer( ). ENDMETHOD. METHOD premium_new_car. DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-premium iv_grade = {{p}}if_trade_in=>c_grade-b iv_age_months = 0 iv_mileage = 0 ). cl_abap_unit_assert=>assert_equals( exp = 30000 act = ls_result-amount ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-ok act = ls_result-reason ). ENDMETHOD. METHOD volume_one_year. DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume iv_grade = {{p}}if_trade_in=>c_grade-a iv_age_months = 12 iv_mileage = 0 ). cl_abap_unit_assert=>assert_equals( exp = 19360 act = ls_result-amount ). ENDMETHOD. METHOD mileage_rounds_down. DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume iv_grade = {{p}}if_trade_in=>c_grade-b iv_age_months = 0 iv_mileage = 25000 ). cl_abap_unit_assert=>assert_equals( exp = 19600 act = ls_result-amount ). ENDMETHOD. METHOD floor_at_minimum. DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-budget iv_grade = {{p}}if_trade_in=>c_grade-d iv_age_months = 600 iv_mileage = 0 ). cl_abap_unit_assert=>assert_equals( exp = 500 act = ls_result-amount ). ENDMETHOD. METHOD unknown_brand. DATA(ls_result) = mo_cut->assess( iv_brand = 'FORD' iv_grade = {{p}}if_trade_in=>c_grade-b iv_age_months = 0 iv_mileage = 0 ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-brand act = ls_result-reason ). ENDMETHOD. METHOD unknown_grade. DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume iv_grade = 'X' iv_age_months = 0 iv_mileage = 0 ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-grade act = ls_result-reason ). ENDMETHOD. METHOD negative_age. DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume iv_grade = {{p}}if_trade_in=>c_grade-b iv_age_months = -1 iv_mileage = 0 ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-age act = ls_result-reason ). ENDMETHOD. METHOD mileage_too_high. DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume iv_grade = {{p}}if_trade_in=>c_grade-b iv_age_months = 0 iv_mileage = 1000001 ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-mileage act = ls_result-reason ). ENDMETHOD. ENDCLASS.