CLASS {{p}}t20_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. CLASS-DATA go_env TYPE REF TO if_osql_test_environment. CLASS-METHODS class_setup. CLASS-METHODS class_teardown. CLASS-METHODS get_fields RETURNING VALUE(rt_fields) TYPE ddfields. CLASS-METHODS field_of IMPORTING iv_name TYPE fieldname RETURNING VALUE(rs_field) TYPE dfies. CLASS-METHODS not_null_flag IMPORTING iv_name TYPE fieldname RETURNING VALUE(rv_flag) TYPE abap_bool. METHODS setup. METHODS field_names FOR TESTING. METHODS key_fields FOR TESTING. METHODS field_types FOR TESTING. METHODS field_lengths FOR TESTING. METHODS decimals FOR TESTING. METHODS not_null_fields FOR TESTING. METHODS store_and_read FOR TESTING. METHODS duplicate_key FOR TESTING. ENDCLASS. CLASS {{p}}t20_hidden IMPLEMENTATION. METHOD class_setup. go_env = cl_osql_test_environment=>create( i_dependency_list = VALUE #( ( '{{P}}RESCUE' ) ) ). ENDMETHOD. METHOD class_teardown. go_env->destroy( ). ENDMETHOD. METHOD setup. go_env->clear_doubles( ). ENDMETHOD. METHOD get_fields. DATA lo_struct TYPE REF TO cl_abap_structdescr. lo_struct ?= cl_abap_typedescr=>describe_by_name( '{{P}}RESCUE' ). rt_fields = lo_struct->get_ddic_field_list( ). ENDMETHOD. METHOD field_of. DATA(lt_fields) = get_fields( ). LOOP AT lt_fields INTO DATA(ls_field) WHERE fieldname = iv_name. rs_field = ls_field. RETURN. ENDLOOP. ENDMETHOD. METHOD not_null_flag. SELECT SINGLE notnull FROM dd03l WHERE tabname = '{{P}}RESCUE' AND fieldname = @iv_name AND as4local = 'A' INTO @rv_flag. ENDMETHOD. METHOD field_names. DATA(lt_fields) = get_fields( ). cl_abap_unit_assert=>assert_equals( exp = 9 act = lines( lt_fields ) ). DATA(ls_field) = field_of( 'CLIENT' ). cl_abap_unit_assert=>assert_equals( exp = 'CLIENT' act = ls_field-fieldname ). ls_field = field_of( 'CALLOUT_ID' ). cl_abap_unit_assert=>assert_equals( exp = 'CALLOUT_ID' act = ls_field-fieldname ). ls_field = field_of( 'CALLOUT_DATE' ). cl_abap_unit_assert=>assert_equals( exp = 'CALLOUT_DATE' act = ls_field-fieldname ). ls_field = field_of( 'LOCATION' ). cl_abap_unit_assert=>assert_equals( exp = 'LOCATION' act = ls_field-fieldname ). ls_field = field_of( 'DURATION_MIN' ). cl_abap_unit_assert=>assert_equals( exp = 'DURATION_MIN' act = ls_field-fieldname ). ls_field = field_of( 'TEAM_SIZE' ). cl_abap_unit_assert=>assert_equals( exp = 'TEAM_SIZE' act = ls_field-fieldname ). ls_field = field_of( 'RESCUED_COUNT' ). cl_abap_unit_assert=>assert_equals( exp = 'RESCUED_COUNT' act = ls_field-fieldname ). ls_field = field_of( 'FEE_AMOUNT' ). cl_abap_unit_assert=>assert_equals( exp = 'FEE_AMOUNT' act = ls_field-fieldname ). ls_field = field_of( 'CURRENCY_CODE' ). cl_abap_unit_assert=>assert_equals( exp = 'CURRENCY_CODE' act = ls_field-fieldname ). ENDMETHOD. METHOD key_fields. DATA(ls_field) = field_of( 'CLIENT' ). cl_abap_unit_assert=>assert_equals( exp = 'X' act = ls_field-keyflag ). ls_field = field_of( 'CALLOUT_ID' ). cl_abap_unit_assert=>assert_equals( exp = 'X' act = ls_field-keyflag ). ls_field = field_of( 'CALLOUT_DATE' ). cl_abap_unit_assert=>assert_initial( act = ls_field-keyflag ). ls_field = field_of( 'LOCATION' ). cl_abap_unit_assert=>assert_initial( act = ls_field-keyflag ). ls_field = field_of( 'DURATION_MIN' ). cl_abap_unit_assert=>assert_initial( act = ls_field-keyflag ). ls_field = field_of( 'TEAM_SIZE' ). cl_abap_unit_assert=>assert_initial( act = ls_field-keyflag ). ls_field = field_of( 'RESCUED_COUNT' ). cl_abap_unit_assert=>assert_initial( act = ls_field-keyflag ). ls_field = field_of( 'FEE_AMOUNT' ). cl_abap_unit_assert=>assert_initial( act = ls_field-keyflag ). ls_field = field_of( 'CURRENCY_CODE' ). cl_abap_unit_assert=>assert_initial( act = ls_field-keyflag ). ENDMETHOD. METHOD field_types. DATA(ls_field) = field_of( 'CLIENT' ). cl_abap_unit_assert=>assert_equals( exp = 'CLNT' act = ls_field-datatype ). ls_field = field_of( 'CALLOUT_ID' ). cl_abap_unit_assert=>assert_equals( exp = 'CHAR' act = ls_field-datatype ). ls_field = field_of( 'CALLOUT_DATE' ). cl_abap_unit_assert=>assert_equals( exp = 'DATS' act = ls_field-datatype ). ls_field = field_of( 'LOCATION' ). cl_abap_unit_assert=>assert_equals( exp = 'CHAR' act = ls_field-datatype ). ls_field = field_of( 'DURATION_MIN' ). cl_abap_unit_assert=>assert_equals( exp = 'INT4' act = ls_field-datatype ). ls_field = field_of( 'TEAM_SIZE' ). cl_abap_unit_assert=>assert_equals( exp = 'INT4' act = ls_field-datatype ). ls_field = field_of( 'RESCUED_COUNT' ). cl_abap_unit_assert=>assert_equals( exp = 'INT4' act = ls_field-datatype ). ls_field = field_of( 'FEE_AMOUNT' ). cl_abap_unit_assert=>assert_equals( exp = 'DEC' act = ls_field-datatype ). ls_field = field_of( 'CURRENCY_CODE' ). cl_abap_unit_assert=>assert_equals( exp = 'CUKY' act = ls_field-datatype ). ENDMETHOD. METHOD field_lengths. DATA(ls_field) = field_of( 'CLIENT' ). cl_abap_unit_assert=>assert_equals( exp = 3 act = CONV i( ls_field-leng ) ). ls_field = field_of( 'CALLOUT_ID' ). cl_abap_unit_assert=>assert_equals( exp = 10 act = CONV i( ls_field-leng ) ). ls_field = field_of( 'CALLOUT_DATE' ). cl_abap_unit_assert=>assert_equals( exp = 8 act = CONV i( ls_field-leng ) ). ls_field = field_of( 'LOCATION' ). cl_abap_unit_assert=>assert_equals( exp = 30 act = CONV i( ls_field-leng ) ). ls_field = field_of( 'DURATION_MIN' ). cl_abap_unit_assert=>assert_equals( exp = 10 act = CONV i( ls_field-leng ) ). ls_field = field_of( 'TEAM_SIZE' ). cl_abap_unit_assert=>assert_equals( exp = 10 act = CONV i( ls_field-leng ) ). ls_field = field_of( 'RESCUED_COUNT' ). cl_abap_unit_assert=>assert_equals( exp = 10 act = CONV i( ls_field-leng ) ). ls_field = field_of( 'FEE_AMOUNT' ). cl_abap_unit_assert=>assert_equals( exp = 13 act = CONV i( ls_field-leng ) ). ls_field = field_of( 'CURRENCY_CODE' ). cl_abap_unit_assert=>assert_equals( exp = 5 act = CONV i( ls_field-leng ) ). ENDMETHOD. METHOD decimals. DATA(ls_field) = field_of( 'FEE_AMOUNT' ). cl_abap_unit_assert=>assert_equals( exp = 2 act = CONV i( ls_field-decimals ) ). ls_field = field_of( 'DURATION_MIN' ). cl_abap_unit_assert=>assert_equals( exp = 0 act = CONV i( ls_field-decimals ) ). ls_field = field_of( 'CURRENCY_CODE' ). cl_abap_unit_assert=>assert_equals( exp = 0 act = CONV i( ls_field-decimals ) ). ENDMETHOD. METHOD not_null_fields. cl_abap_unit_assert=>assert_equals( exp = 'X' act = not_null_flag( 'CLIENT' ) ). cl_abap_unit_assert=>assert_equals( exp = 'X' act = not_null_flag( 'CALLOUT_ID' ) ). cl_abap_unit_assert=>assert_equals( exp = 'X' act = not_null_flag( 'CALLOUT_DATE' ) ). cl_abap_unit_assert=>assert_initial( act = not_null_flag( 'LOCATION' ) ). cl_abap_unit_assert=>assert_initial( act = not_null_flag( 'DURATION_MIN' ) ). cl_abap_unit_assert=>assert_initial( act = not_null_flag( 'TEAM_SIZE' ) ). cl_abap_unit_assert=>assert_initial( act = not_null_flag( 'RESCUED_COUNT' ) ). cl_abap_unit_assert=>assert_initial( act = not_null_flag( 'FEE_AMOUNT' ) ). cl_abap_unit_assert=>assert_initial( act = not_null_flag( 'CURRENCY_CODE' ) ). ENDMETHOD. METHOD store_and_read. DATA ls_rescue TYPE {{p}}rescue. ls_rescue-client = sy-mandt. ls_rescue-callout_id = 'C0001'. ls_rescue-callout_date = '20250115'. ls_rescue-location = 'NORTH RIDGE'. ls_rescue-duration_min = 95. ls_rescue-team_size = 6. ls_rescue-rescued_count = 2. ls_rescue-fee_amount = '1250.50'. ls_rescue-currency_code = 'EUR'. INSERT {{p}}rescue FROM @ls_rescue. cl_abap_unit_assert=>assert_subrc( exp = 0 ). DATA ls_read TYPE {{p}}rescue. SELECT SINGLE * FROM {{p}}rescue WHERE callout_id = 'C0001' INTO @ls_read. cl_abap_unit_assert=>assert_equals( exp = 'NORTH RIDGE' act = ls_read-location ). cl_abap_unit_assert=>assert_equals( exp = '20250115' act = ls_read-callout_date ). cl_abap_unit_assert=>assert_equals( exp = 95 act = ls_read-duration_min ). cl_abap_unit_assert=>assert_equals( exp = 6 act = ls_read-team_size ). cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_read-rescued_count ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '1250.50' ) act = CONV decfloat34( ls_read-fee_amount ) ). cl_abap_unit_assert=>assert_equals( exp = 'EUR' act = ls_read-currency_code ). ENDMETHOD. METHOD duplicate_key. DATA ls_rescue TYPE {{p}}rescue. ls_rescue-client = sy-mandt. ls_rescue-callout_id = 'C0002'. ls_rescue-callout_date = '20250116'. INSERT {{p}}rescue FROM @ls_rescue. cl_abap_unit_assert=>assert_subrc( exp = 0 ). INSERT {{p}}rescue FROM @ls_rescue. cl_abap_unit_assert=>assert_subrc( exp = 4 ). ENDMETHOD. ENDCLASS.