CLASS {{p}}pyro_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PUBLIC SECTION. INTERFACES {{p}}if_pyro_order. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}if_pyro_order. METHODS setup. METHODS reason_values FOR TESTING. METHODS reason_length FOR TESTING. METHODS zone_length FOR TESTING. METHODS amount_type FOR TESTING. METHODS order_structure FOR TESTING. METHODS reason_structure FOR TESTING. METHODS limit_values FOR TESTING. METHODS distance_values FOR TESTING. METHODS check_order_call FOR TESTING. METHODS calc_fee_call FOR TESTING. ENDCLASS. CLASS {{p}}pyro_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}pyro_hidden( ). ENDMETHOD. METHOD {{p}}if_pyro_order~check_order. rv_reason = {{p}}if_pyro_order=>c_reason-ok. ENDMETHOD. METHOD {{p}}if_pyro_order~calc_fee. rv_fee = 0. ENDMETHOD. METHOD reason_values. DATA lv_exp TYPE {{p}}if_pyro_order=>ty_reason. lv_exp = 'OK'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_reason-ok ). lv_exp = 'CALIBRE'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_reason-calibre ). lv_exp = 'ZONE'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_reason-zone ). lv_exp = 'WIND'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_reason-wind ). lv_exp = 'TIME'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_reason-time ). lv_exp = 'DISTANCE'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_reason-distance ). ENDMETHOD. METHOD reason_length. DATA lv_reason TYPE {{p}}if_pyro_order=>ty_reason. DATA lv_exp TYPE {{p}}if_pyro_order=>ty_reason. DATA lv_long TYPE c LENGTH 13. DATA lv_kind TYPE c LENGTH 1. DATA lv_len TYPE i. DATA(lo_descr) = cl_abap_typedescr=>describe_by_data( lv_reason ). lv_kind = 'C'. cl_abap_unit_assert=>assert_equals( exp = lv_kind act = lo_descr->type_kind ). lv_long = 'ABCDEFGHIJKLM'. lv_reason = lv_long. lv_exp = 'ABCDEFGHIJKL'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_reason ). lv_len = 12. cl_abap_unit_assert=>assert_equals( exp = lv_len act = strlen( lv_reason ) ). ENDMETHOD. METHOD zone_length. DATA lv_zone TYPE {{p}}if_pyro_order=>ty_zone. DATA lv_exp TYPE {{p}}if_pyro_order=>ty_zone. DATA lv_long TYPE c LENGTH 2. DATA lv_kind TYPE c LENGTH 1. DATA lv_len TYPE i. DATA(lo_descr) = cl_abap_typedescr=>describe_by_data( lv_zone ). lv_kind = 'C'. cl_abap_unit_assert=>assert_equals( exp = lv_kind act = lo_descr->type_kind ). lv_long = 'AB'. lv_zone = lv_long. lv_exp = 'A'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_zone ). lv_len = 1. cl_abap_unit_assert=>assert_equals( exp = lv_len act = strlen( lv_zone ) ). ENDMETHOD. METHOD amount_type. DATA lv_amount TYPE {{p}}if_pyro_order=>ty_amount. DATA lv_exp TYPE {{p}}if_pyro_order=>ty_amount. DATA lv_kind TYPE c LENGTH 1. DATA lv_dec TYPE i. DATA lv_len TYPE i. DATA(lo_descr) = cl_abap_typedescr=>describe_by_data( lv_amount ). lv_kind = 'P'. cl_abap_unit_assert=>assert_equals( exp = lv_kind act = lo_descr->type_kind ). lv_dec = 2. cl_abap_unit_assert=>assert_equals( exp = lv_dec act = lo_descr->decimals ). lv_len = 8. cl_abap_unit_assert=>assert_equals( exp = lv_len act = lo_descr->length ). lv_amount = '1234.56'. lv_exp = '1234.56'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_amount ). ENDMETHOD. METHOD order_structure. DATA ls_order TYPE {{p}}if_pyro_order=>ty_order. DATA lv_count TYPE i. DATA lv_kind TYPE c LENGTH 1. DATA lv_name TYPE c LENGTH 30. DATA lv_exp_name TYPE c LENGTH 30. DATA(lo_struct) = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_data( ls_order ) ). DATA(lt_comp) = lo_struct->get_components( ). lv_count = 6. cl_abap_unit_assert=>assert_equals( exp = lv_count act = lines( lt_comp ) ). lv_name = lt_comp[ 1 ]-name. lv_exp_name = 'CALIBRE_MM'. cl_abap_unit_assert=>assert_equals( exp = lv_exp_name act = lv_name ). lv_kind = 'I'. DATA(lo_elem) = cl_abap_typedescr=>describe_by_data( ls_order-calibre_mm ). cl_abap_unit_assert=>assert_equals( exp = lv_kind act = lo_elem->type_kind ). lo_elem = cl_abap_typedescr=>describe_by_data( ls_order-wind_kmh ). cl_abap_unit_assert=>assert_equals( exp = lv_kind act = lo_elem->type_kind ). lo_elem = cl_abap_typedescr=>describe_by_data( ls_order-start_hour ). cl_abap_unit_assert=>assert_equals( exp = lv_kind act = lo_elem->type_kind ). lo_elem = cl_abap_typedescr=>describe_by_data( ls_order-crowd_m ). cl_abap_unit_assert=>assert_equals( exp = lv_kind act = lo_elem->type_kind ). lo_elem = cl_abap_typedescr=>describe_by_data( ls_order-duration_min ). cl_abap_unit_assert=>assert_equals( exp = lv_kind act = lo_elem->type_kind ). DATA lv_zone_kind TYPE c LENGTH 1. lv_zone_kind = 'C'. lo_elem = cl_abap_typedescr=>describe_by_data( ls_order-zone_code ). cl_abap_unit_assert=>assert_equals( exp = lv_zone_kind act = lo_elem->type_kind ). ENDMETHOD. METHOD reason_structure. DATA(ls_reason) = {{p}}if_pyro_order=>c_reason. DATA lv_count TYPE i. DATA(lo_struct) = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_data( ls_reason ) ). DATA(lt_comp) = lo_struct->get_components( ). lv_count = 6. cl_abap_unit_assert=>assert_equals( exp = lv_count act = lines( lt_comp ) ). ENDMETHOD. METHOD limit_values. DATA lv_exp TYPE i. lv_exp = 30. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_limit-max_wind_kmh ). lv_exp = 18. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_limit-min_start_hour ). lv_exp = 23. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_limit-max_start_hour ). lv_exp = 10. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_limit-free_minutes ). lv_exp = 5000. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_limit-max_fee_euro ). ENDMETHOD. METHOD distance_values. DATA lv_exp TYPE i. lv_exp = 30. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_distance-calibre_50 ). lv_exp = 45. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_distance-calibre_75 ). lv_exp = 60. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_distance-calibre_100 ). lv_exp = 90. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_distance-calibre_150 ). lv_exp = 120. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = {{p}}if_pyro_order=>c_distance-calibre_200 ). ENDMETHOD. METHOD check_order_call. DATA ls_order TYPE {{p}}if_pyro_order=>ty_order. DATA lv_exp TYPE {{p}}if_pyro_order=>ty_reason. ls_order = VALUE #( calibre_mm = 100 zone_code = 'A' wind_kmh = 10 start_hour = 20 crowd_m = 60 duration_min = 15 ). DATA(lv_reason) = mo_cut->check_order( ls_order ). lv_exp = 'OK'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_reason ). ENDMETHOD. METHOD calc_fee_call. DATA ls_order TYPE {{p}}if_pyro_order=>ty_order. DATA lv_exp TYPE {{p}}if_pyro_order=>ty_amount. ls_order = VALUE #( calibre_mm = 100 zone_code = 'A' wind_kmh = 10 start_hour = 20 crowd_m = 60 duration_min = 15 ). DATA(lv_fee) = mo_cut->calc_fee( ls_order ). lv_exp = 0. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. ENDCLASS.