130 lines
4.8 KiB
ABAP
130 lines
4.8 KiB
ABAP
CLASS {{p}}t31_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
|
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
PRIVATE SECTION.
|
|
METHODS call
|
|
IMPORTING
|
|
iv_width TYPE i
|
|
iv_height TYPE i
|
|
iv_glass TYPE string
|
|
iv_urgent TYPE abap_bool DEFAULT abap_false
|
|
EXPORTING
|
|
ev_fee TYPE decfloat34
|
|
ev_subrc TYPE sysubrc.
|
|
METHODS simple_pane_fee FOR TESTING.
|
|
METHODS minimum_fee FOR TESTING.
|
|
METHODS safety_pane_fee FOR TESTING.
|
|
METHODS insulated_pane_fee FOR TESTING.
|
|
METHODS rounding_half_up FOR TESTING.
|
|
METHODS urgent_surcharge FOR TESTING.
|
|
METHODS urgent_after_minimum FOR TESTING.
|
|
METHODS maximum_fee FOR TESTING.
|
|
METHODS invalid_size_rejected FOR TESTING.
|
|
METHODS invalid_glass_rejected FOR TESTING.
|
|
METHODS class_calculates_fee FOR TESTING.
|
|
METHODS class_rejects_bad_size FOR TESTING.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}t31_hidden IMPLEMENTATION.
|
|
METHOD call.
|
|
CALL FUNCTION '{{P}}GLAZ_FEE'
|
|
EXPORTING
|
|
iv_width_mm = iv_width
|
|
iv_height_mm = iv_height
|
|
iv_glass = iv_glass
|
|
iv_urgent = iv_urgent
|
|
IMPORTING
|
|
ev_fee = ev_fee
|
|
EXCEPTIONS
|
|
invalid_input = 1
|
|
OTHERS = 2.
|
|
ev_subrc = sy-subrc.
|
|
ENDMETHOD.
|
|
|
|
METHOD simple_pane_fee.
|
|
call( EXPORTING iv_width = 1000 iv_height = 1000 iv_glass = `SIMPLE`
|
|
IMPORTING ev_fee = DATA(lv_fee) ev_subrc = DATA(lv_rc) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '45.00' ) act = lv_fee ).
|
|
ENDMETHOD.
|
|
|
|
METHOD minimum_fee.
|
|
call( EXPORTING iv_width = 500 iv_height = 400 iv_glass = `SIMPLE`
|
|
IMPORTING ev_fee = DATA(lv_fee) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '35.00' ) act = lv_fee ).
|
|
ENDMETHOD.
|
|
|
|
METHOD safety_pane_fee.
|
|
call( EXPORTING iv_width = 1200 iv_height = 800 iv_glass = `SAFETY`
|
|
IMPORTING ev_fee = DATA(lv_fee) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '86.40' ) act = lv_fee ).
|
|
ENDMETHOD.
|
|
|
|
METHOD insulated_pane_fee.
|
|
call( EXPORTING iv_width = 2000 iv_height = 1500 iv_glass = `INSULATED`
|
|
IMPORTING ev_fee = DATA(lv_fee) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '420.00' ) act = lv_fee ).
|
|
ENDMETHOD.
|
|
|
|
METHOD rounding_half_up.
|
|
call( EXPORTING iv_width = 1000 iv_height = 1001 iv_glass = `SIMPLE`
|
|
IMPORTING ev_fee = DATA(lv_fee) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '45.05' ) act = lv_fee ).
|
|
ENDMETHOD.
|
|
|
|
METHOD urgent_surcharge.
|
|
call( EXPORTING iv_width = 1000 iv_height = 1000 iv_glass = `SIMPLE` iv_urgent = abap_true
|
|
IMPORTING ev_fee = DATA(lv_fee) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '67.50' ) act = lv_fee ).
|
|
ENDMETHOD.
|
|
|
|
METHOD urgent_after_minimum.
|
|
call( EXPORTING iv_width = 500 iv_height = 400 iv_glass = `SIMPLE` iv_urgent = abap_true
|
|
IMPORTING ev_fee = DATA(lv_fee) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '52.50' ) act = lv_fee ).
|
|
ENDMETHOD.
|
|
|
|
METHOD maximum_fee.
|
|
call( EXPORTING iv_width = 2000 iv_height = 1500 iv_glass = `INSULATED` iv_urgent = abap_true
|
|
IMPORTING ev_fee = DATA(lv_fee) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '480.00' ) act = lv_fee ).
|
|
ENDMETHOD.
|
|
|
|
METHOD invalid_size_rejected.
|
|
call( EXPORTING iv_width = 0 iv_height = 1000 iv_glass = `SIMPLE`
|
|
IMPORTING ev_subrc = DATA(lv_rc) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ).
|
|
call( EXPORTING iv_width = 1000 iv_height = -5 iv_glass = `SIMPLE`
|
|
IMPORTING ev_subrc = DATA(lv_rc2) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc2 ).
|
|
ENDMETHOD.
|
|
|
|
METHOD invalid_glass_rejected.
|
|
call( EXPORTING iv_width = 1000 iv_height = 1000 iv_glass = `TINTED`
|
|
IMPORTING ev_subrc = DATA(lv_rc) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ).
|
|
ENDMETHOD.
|
|
|
|
METHOD class_calculates_fee.
|
|
DATA(lo_calc) = NEW {{p}}glaz_calc( ).
|
|
TRY.
|
|
DATA(lv_fee) = lo_calc->calculate( iv_width_mm = 1200 iv_height_mm = 800
|
|
iv_glass = `SAFETY` iv_urgent = abap_false ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '86.40' ) act = lv_fee ).
|
|
CATCH cx_abap_invalid_value.
|
|
cl_abap_unit_assert=>fail( msg = `valid input was rejected` ).
|
|
ENDTRY.
|
|
ENDMETHOD.
|
|
|
|
METHOD class_rejects_bad_size.
|
|
DATA(lo_calc) = NEW {{p}}glaz_calc( ).
|
|
TRY.
|
|
lo_calc->calculate( iv_width_mm = 1000 iv_height_mm = 0
|
|
iv_glass = `SIMPLE` iv_urgent = abap_false ).
|
|
cl_abap_unit_assert=>fail( msg = `invalid size was accepted` ).
|
|
CATCH cx_abap_invalid_value.
|
|
cl_abap_unit_assert=>assert_true( abap_true ).
|
|
ENDTRY.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|