CLASS ltc_photo_pricer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}photo_pricer. METHODS setup. METHODS studio_quote FOR TESTING. METHODS outdoor_quote FOR TESTING. METHODS studio_ignores_distance FOR TESTING. METHODS rounds_up_minutes FOR TESTING. METHODS rejects_unknown_session FOR TESTING. METHODS rejects_bad_minutes FOR TESTING. METHODS rejects_outdoor_no_distance FOR TESTING. METHODS build_request IMPORTING iv_session TYPE {{p}}photo_pricer=>ty_session iv_minutes TYPE i iv_persons TYPE i iv_photos TYPE i iv_distance_km TYPE i RETURNING VALUE(rs_request) TYPE {{p}}photo_pricer=>ty_request. ENDCLASS. CLASS ltc_photo_pricer IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}photo_pricer( ). ENDMETHOD. METHOD build_request. rs_request = VALUE #( session = iv_session minutes = iv_minutes persons = iv_persons photos = iv_photos distance_km = iv_distance_km ). ENDMETHOD. METHOD studio_quote. DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-studio iv_minutes = 90 iv_persons = 3 iv_photos = 10 iv_distance_km = 0 ). DATA(ls_quote) = mo_cut->calculate( ls_request ). cl_abap_unit_assert=>assert_equals( exp = {{p}}photo_pricer=>c_reason-ok act = ls_quote-reason ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}photo_pricer=>ty_amount( 180 ) act = ls_quote-total ). ENDMETHOD. METHOD outdoor_quote. DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-outdoor iv_minutes = 45 iv_persons = 10 iv_photos = 50 iv_distance_km = 20 ). DATA(ls_quote) = mo_cut->calculate( ls_request ). cl_abap_unit_assert=>assert_equals( exp = {{p}}photo_pricer=>c_reason-ok act = ls_quote-reason ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}photo_pricer=>ty_amount( 435 ) act = ls_quote-total ). ENDMETHOD. METHOD studio_ignores_distance. DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-studio iv_minutes = 30 iv_persons = 1 iv_photos = 0 iv_distance_km = 25 ). DATA(ls_quote) = mo_cut->calculate( ls_request ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}photo_pricer=>ty_amount( 0 ) act = ls_quote-travel_fee ). ENDMETHOD. METHOD rounds_up_minutes. DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-studio iv_minutes = 31 iv_persons = 1 iv_photos = 0 iv_distance_km = 0 ). DATA(ls_quote) = mo_cut->calculate( ls_request ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}photo_pricer=>ty_amount( 60 ) act = ls_quote-time_fee ). ENDMETHOD. METHOD rejects_unknown_session. DATA(ls_request) = build_request( iv_session = 'WEDDING' iv_minutes = 60 iv_persons = 2 iv_photos = 0 iv_distance_km = 0 ). DATA(ls_quote) = mo_cut->calculate( ls_request ). cl_abap_unit_assert=>assert_equals( exp = {{p}}photo_pricer=>c_reason-session act = ls_quote-reason ). ENDMETHOD. METHOD rejects_bad_minutes. DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-studio iv_minutes = 29 iv_persons = 2 iv_photos = 0 iv_distance_km = 0 ). DATA(ls_quote) = mo_cut->calculate( ls_request ). cl_abap_unit_assert=>assert_equals( exp = {{p}}photo_pricer=>c_reason-minutes act = ls_quote-reason ). ENDMETHOD. METHOD rejects_outdoor_no_distance. DATA(ls_request) = build_request( iv_session = {{p}}photo_pricer=>c_session-outdoor iv_minutes = 60 iv_persons = 2 iv_photos = 0 iv_distance_km = 0 ). DATA(ls_quote) = mo_cut->calculate( ls_request ). cl_abap_unit_assert=>assert_equals( exp = {{p}}photo_pricer=>c_reason-distance act = ls_quote-reason ). ENDMETHOD. ENDCLASS.