122 lines
5.3 KiB
ABAP
122 lines
5.3 KiB
ABAP
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.
|