160 lines
6.7 KiB
ABAP
160 lines
6.7 KiB
ABAP
CLASS {{p}}parcel_fee_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
|
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
PUBLIC SECTION.
|
|
INTERFACES {{p}}if_parcel_fee.
|
|
PRIVATE SECTION.
|
|
METHODS zone_values FOR TESTING.
|
|
METHODS reason_values FOR TESTING.
|
|
METHODS limit_values FOR TESTING.
|
|
METHODS surcharge_values FOR TESTING.
|
|
METHODS type_lengths FOR TESTING.
|
|
METHODS check_input_sig FOR TESTING.
|
|
METHODS base_fee_sig FOR TESTING.
|
|
METHODS weight_surcharge_sig FOR TESTING.
|
|
METHODS total_fee_sig FOR TESTING.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}parcel_fee_hidden IMPLEMENTATION.
|
|
METHOD {{p}}if_parcel_fee~check_input.
|
|
IF iv_weight_g < {{p}}if_parcel_fee=>c_limit-min_weight
|
|
OR iv_weight_g > {{p}}if_parcel_fee=>c_limit-max_weight.
|
|
rv_reason = {{p}}if_parcel_fee=>c_reason-weight.
|
|
ELSEIF iv_zone <> {{p}}if_parcel_fee=>c_zone-home
|
|
AND iv_zone <> {{p}}if_parcel_fee=>c_zone-national
|
|
AND iv_zone <> {{p}}if_parcel_fee=>c_zone-europe.
|
|
rv_reason = {{p}}if_parcel_fee=>c_reason-zone.
|
|
ELSE.
|
|
rv_reason = {{p}}if_parcel_fee=>c_reason-ok.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD {{p}}if_parcel_fee~base_fee.
|
|
CASE iv_zone.
|
|
WHEN {{p}}if_parcel_fee=>c_zone-home.
|
|
rv_cents = 350.
|
|
WHEN {{p}}if_parcel_fee=>c_zone-national.
|
|
rv_cents = 620.
|
|
WHEN {{p}}if_parcel_fee=>c_zone-europe.
|
|
rv_cents = 990.
|
|
WHEN OTHERS.
|
|
rv_cents = 0.
|
|
ENDCASE.
|
|
ENDMETHOD.
|
|
|
|
METHOD {{p}}if_parcel_fee~weight_surcharge.
|
|
IF iv_weight_g > 1000.
|
|
rv_cents = ( iv_weight_g - 1000 + 999 ) DIV 1000
|
|
* {{p}}if_parcel_fee=>c_surcharge-per_step.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD {{p}}if_parcel_fee~total_fee.
|
|
IF me->{{p}}if_parcel_fee~check_input( iv_weight_g = iv_weight_g
|
|
iv_zone = iv_zone )
|
|
<> {{p}}if_parcel_fee=>c_reason-ok.
|
|
RETURN.
|
|
ENDIF.
|
|
rv_cents = me->{{p}}if_parcel_fee~base_fee( iv_zone )
|
|
+ me->{{p}}if_parcel_fee~weight_surcharge( iv_weight_g ).
|
|
IF iv_express = abap_true.
|
|
rv_cents = rv_cents + {{p}}if_parcel_fee=>c_surcharge-express.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD zone_values.
|
|
cl_abap_unit_assert=>assert_equals( exp = '1' act = {{p}}if_parcel_fee=>c_zone-home ).
|
|
cl_abap_unit_assert=>assert_equals( exp = '2' act = {{p}}if_parcel_fee=>c_zone-national ).
|
|
cl_abap_unit_assert=>assert_equals( exp = '3' act = {{p}}if_parcel_fee=>c_zone-europe ).
|
|
ENDMETHOD.
|
|
|
|
METHOD reason_values.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'OK' act = {{p}}if_parcel_fee=>c_reason-ok ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 'WEIGHT' act = {{p}}if_parcel_fee=>c_reason-weight ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 'ZONE' act = {{p}}if_parcel_fee=>c_reason-zone ).
|
|
ENDMETHOD.
|
|
|
|
METHOD limit_values.
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = {{p}}if_parcel_fee=>c_limit-min_weight ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 31500 act = {{p}}if_parcel_fee=>c_limit-max_weight ).
|
|
ENDMETHOD.
|
|
|
|
METHOD surcharge_values.
|
|
cl_abap_unit_assert=>assert_equals( exp = 90 act = {{p}}if_parcel_fee=>c_surcharge-per_step ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 750 act = {{p}}if_parcel_fee=>c_surcharge-express ).
|
|
ENDMETHOD.
|
|
|
|
METHOD type_lengths.
|
|
DATA lv_zone TYPE {{p}}if_parcel_fee=>ty_zone.
|
|
DATA lv_reason TYPE {{p}}if_parcel_fee=>ty_reason.
|
|
DATA lv_weight TYPE {{p}}if_parcel_fee=>ty_weight_g.
|
|
DATA lv_cents TYPE {{p}}if_parcel_fee=>ty_cents.
|
|
DATA(lv_char1) = 'A'.
|
|
DATA(lv_char10) = 'ABCDEFGHIJ'.
|
|
DATA(lo_zone) = cl_abap_typedescr=>describe_by_data( lv_zone ).
|
|
DATA(lo_reason) = cl_abap_typedescr=>describe_by_data( lv_reason ).
|
|
DATA(lo_weight) = cl_abap_typedescr=>describe_by_data( lv_weight ).
|
|
DATA(lo_cents) = cl_abap_typedescr=>describe_by_data( lv_cents ).
|
|
DATA(lo_char1) = cl_abap_typedescr=>describe_by_data( lv_char1 ).
|
|
DATA(lo_char10) = cl_abap_typedescr=>describe_by_data( lv_char10 ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_char
|
|
act = lo_zone->type_kind ).
|
|
cl_abap_unit_assert=>assert_equals( exp = lo_char1->length act = lo_zone->length ).
|
|
cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_char
|
|
act = lo_reason->type_kind ).
|
|
cl_abap_unit_assert=>assert_equals( exp = lo_char10->length act = lo_reason->length ).
|
|
cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_int
|
|
act = lo_weight->type_kind ).
|
|
cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_int
|
|
act = lo_cents->type_kind ).
|
|
ENDMETHOD.
|
|
|
|
METHOD check_input_sig.
|
|
DATA lo_cut TYPE REF TO {{p}}if_parcel_fee.
|
|
lo_cut = me.
|
|
cl_abap_unit_assert=>assert_equals(
|
|
exp = {{p}}if_parcel_fee=>c_reason-ok
|
|
act = lo_cut->check_input( iv_weight_g = 500 iv_zone = {{p}}if_parcel_fee=>c_zone-home ) ).
|
|
cl_abap_unit_assert=>assert_equals(
|
|
exp = {{p}}if_parcel_fee=>c_reason-weight
|
|
act = lo_cut->check_input( iv_weight_g = 0 iv_zone = {{p}}if_parcel_fee=>c_zone-home ) ).
|
|
cl_abap_unit_assert=>assert_equals(
|
|
exp = {{p}}if_parcel_fee=>c_reason-zone
|
|
act = lo_cut->check_input( iv_weight_g = 500 iv_zone = '9' ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD base_fee_sig.
|
|
DATA lo_cut TYPE REF TO {{p}}if_parcel_fee.
|
|
lo_cut = me.
|
|
cl_abap_unit_assert=>assert_equals( exp = 350
|
|
act = lo_cut->base_fee( iv_zone = {{p}}if_parcel_fee=>c_zone-home ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 620
|
|
act = lo_cut->base_fee( iv_zone = {{p}}if_parcel_fee=>c_zone-national ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 990
|
|
act = lo_cut->base_fee( iv_zone = {{p}}if_parcel_fee=>c_zone-europe ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD weight_surcharge_sig.
|
|
DATA lo_cut TYPE REF TO {{p}}if_parcel_fee.
|
|
lo_cut = me.
|
|
cl_abap_unit_assert=>assert_equals( exp = 0
|
|
act = lo_cut->weight_surcharge( iv_weight_g = 1000 ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 90
|
|
act = lo_cut->weight_surcharge( iv_weight_g = 1001 ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 180
|
|
act = lo_cut->weight_surcharge( iv_weight_g = 2001 ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD total_fee_sig.
|
|
DATA lo_cut TYPE REF TO {{p}}if_parcel_fee.
|
|
lo_cut = me.
|
|
cl_abap_unit_assert=>assert_equals( exp = 530
|
|
act = lo_cut->total_fee( iv_weight_g = 2500 iv_zone = '1' iv_express = abap_false ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1280
|
|
act = lo_cut->total_fee( iv_weight_g = 2500 iv_zone = '1' iv_express = abap_true ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 0
|
|
act = lo_cut->total_fee( iv_weight_g = 0 iv_zone = '1' iv_express = abap_false ) ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|