CLASS {{p}}t16_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. TYPES ty_fields TYPE STANDARD TABLE OF dfies WITH EMPTY KEY. TYPES ty_fieldname TYPE c LENGTH 30. TYPES ty_datatype TYPE c LENGTH 4. TYPES ty_flag TYPE c LENGTH 1. CLASS-DATA go_env TYPE REF TO if_osql_test_environment. CLASS-METHODS class_setup. CLASS-METHODS class_teardown. METHODS setup. METHODS field_names FOR TESTING. METHODS key_fields FOR TESTING. METHODS field_attributes FOR TESTING. METHODS insert_and_read FOR TESTING. METHODS read_by_date FOR TESTING. METHODS get_fields RETURNING VALUE(rt_fields) TYPE ty_fields. METHODS get_field IMPORTING it_fields TYPE ty_fields iv_name TYPE ty_fieldname RETURNING VALUE(rs_field) TYPE dfies. METHODS assert_present IMPORTING it_fields TYPE ty_fields iv_name TYPE ty_fieldname. METHODS assert_key IMPORTING it_fields TYPE ty_fields iv_name TYPE ty_fieldname iv_key TYPE ty_flag. METHODS assert_field IMPORTING it_fields TYPE ty_fields iv_name TYPE ty_fieldname iv_type TYPE ty_datatype iv_leng TYPE i iv_decimals TYPE i. METHODS to_struct_descr IMPORTING io_descr TYPE REF TO cl_abap_typedescr RETURNING VALUE(ro_struct) TYPE REF TO cl_abap_structdescr. ENDCLASS. CLASS {{p}}t16_hidden IMPLEMENTATION. METHOD class_setup. go_env = cl_osql_test_environment=>create( i_dependency_list = VALUE #( ( '{{P}}SESS' ) ) ). 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 = to_struct_descr( cl_abap_typedescr=>describe_by_name( '{{P}}SESS' ) ). rt_fields = lo_struct->get_ddic_field_list( ). ENDMETHOD. METHOD to_struct_descr. DATA lo_table TYPE REF TO cl_abap_tabledescr. TRY. ro_struct = CAST cl_abap_structdescr( io_descr ). CATCH cx_sy_move_cast_error. lo_table = CAST cl_abap_tabledescr( io_descr ). ro_struct = CAST cl_abap_structdescr( lo_table->get_table_line_type( ) ). ENDTRY. ENDMETHOD. METHOD get_field. READ TABLE it_fields INTO rs_field WITH KEY fieldname = iv_name. cl_abap_unit_assert=>assert_equals( exp = 0 act = sy-subrc msg = |Field { iv_name } is missing in table {{P}}SESS| ). ENDMETHOD. METHOD assert_present. DATA ls_field TYPE dfies. READ TABLE it_fields INTO ls_field WITH KEY fieldname = iv_name. cl_abap_unit_assert=>assert_equals( exp = 0 act = sy-subrc msg = |Field { iv_name } is missing in table {{P}}SESS| ). ENDMETHOD. METHOD assert_key. DATA ls_field TYPE dfies. DATA lv_flag TYPE ty_flag. ls_field = get_field( it_fields = it_fields iv_name = iv_name ). lv_flag = ls_field-keyflag. cl_abap_unit_assert=>assert_equals( exp = iv_key act = lv_flag msg = |Wrong key flag of field { iv_name }| ). ENDMETHOD. METHOD assert_field. DATA ls_field TYPE dfies. DATA lv_leng TYPE i. DATA lv_decimals TYPE i. ls_field = get_field( it_fields = it_fields iv_name = iv_name ). lv_leng = ls_field-leng. lv_decimals = ls_field-decimals. cl_abap_unit_assert=>assert_equals( exp = iv_leng act = lv_leng msg = |Wrong length of { iv_name }| ). cl_abap_unit_assert=>assert_equals( exp = iv_decimals act = lv_decimals msg = |Wrong decimals of { iv_name }| ). cl_abap_unit_assert=>assert_equals( exp = iv_type act = ls_field-datatype msg = |Wrong type of { iv_name }| ). ENDMETHOD. METHOD field_names. DATA lt_fields TYPE ty_fields. lt_fields = get_fields( ). cl_abap_unit_assert=>assert_equals( exp = 10 act = lines( lt_fields ) msg = 'Wrong number of fields in {{P}}SESS' ). assert_present( it_fields = lt_fields iv_name = 'CLIENT' ). assert_present( it_fields = lt_fields iv_name = 'STUDIO_ID' ). assert_present( it_fields = lt_fields iv_name = 'SESSION_NO' ). assert_present( it_fields = lt_fields iv_name = 'CUSTOMER' ). assert_present( it_fields = lt_fields iv_name = 'SESSION_DATE' ). assert_present( it_fields = lt_fields iv_name = 'BOOKED_HOURS' ). assert_present( it_fields = lt_fields iv_name = 'RATE_MODE' ). assert_present( it_fields = lt_fields iv_name = 'TARIFF_GROUP' ). assert_present( it_fields = lt_fields iv_name = 'TRACK_COUNT' ). assert_present( it_fields = lt_fields iv_name = 'SESSION_VALUE' ). ENDMETHOD. METHOD key_fields. DATA lt_fields TYPE ty_fields. lt_fields = get_fields( ). assert_key( it_fields = lt_fields iv_name = 'CLIENT' iv_key = 'X' ). assert_key( it_fields = lt_fields iv_name = 'STUDIO_ID' iv_key = 'X' ). assert_key( it_fields = lt_fields iv_name = 'SESSION_NO' iv_key = 'X' ). assert_key( it_fields = lt_fields iv_name = 'CUSTOMER' iv_key = ' ' ). assert_key( it_fields = lt_fields iv_name = 'SESSION_DATE' iv_key = ' ' ). assert_key( it_fields = lt_fields iv_name = 'BOOKED_HOURS' iv_key = ' ' ). assert_key( it_fields = lt_fields iv_name = 'RATE_MODE' iv_key = ' ' ). assert_key( it_fields = lt_fields iv_name = 'TARIFF_GROUP' iv_key = ' ' ). assert_key( it_fields = lt_fields iv_name = 'TRACK_COUNT' iv_key = ' ' ). assert_key( it_fields = lt_fields iv_name = 'SESSION_VALUE' iv_key = ' ' ). ENDMETHOD. METHOD field_attributes. DATA lt_fields TYPE ty_fields. lt_fields = get_fields( ). assert_field( it_fields = lt_fields iv_name = 'CLIENT' iv_type = 'CLNT' iv_leng = 3 iv_decimals = 0 ). assert_field( it_fields = lt_fields iv_name = 'STUDIO_ID' iv_type = 'CHAR' iv_leng = 4 iv_decimals = 0 ). assert_field( it_fields = lt_fields iv_name = 'SESSION_NO' iv_type = 'NUMC' iv_leng = 6 iv_decimals = 0 ). assert_field( it_fields = lt_fields iv_name = 'CUSTOMER' iv_type = 'CHAR' iv_leng = 10 iv_decimals = 0 ). assert_field( it_fields = lt_fields iv_name = 'SESSION_DATE' iv_type = 'DATS' iv_leng = 8 iv_decimals = 0 ). assert_field( it_fields = lt_fields iv_name = 'BOOKED_HOURS' iv_type = 'DEC' iv_leng = 5 iv_decimals = 2 ). assert_field( it_fields = lt_fields iv_name = 'RATE_MODE' iv_type = 'CHAR' iv_leng = 4 iv_decimals = 0 ). assert_field( it_fields = lt_fields iv_name = 'TARIFF_GROUP' iv_type = 'CHAR' iv_leng = 4 iv_decimals = 0 ). assert_field( it_fields = lt_fields iv_name = 'TRACK_COUNT' iv_type = 'INT4' iv_leng = 10 iv_decimals = 0 ). assert_field( it_fields = lt_fields iv_name = 'SESSION_VALUE' iv_type = 'DEC' iv_leng = 15 iv_decimals = 2 ). ENDMETHOD. METHOD insert_and_read. DATA lt_sess TYPE STANDARD TABLE OF {{p}}sess WITH EMPTY KEY. DATA lv_day TYPE d. lv_day = '20250110'. lt_sess = VALUE #( ( client = sy-mandt studio_id = 'R1' session_no = '000001' customer = 'CUST01' session_date = lv_day booked_hours = '3.50' rate_mode = 'STD' tariff_group = 'A' track_count = 8 session_value = '450.00' ) ). go_env->insert_test_data( lt_sess ). SELECT SINGLE * FROM {{p}}sess WHERE studio_id = 'R1' AND session_no = '000001' INTO @DATA(ls_read). cl_abap_unit_assert=>assert_equals( exp = 0 act = sy-subrc ). cl_abap_unit_assert=>assert_equals( exp = 'CUST01' act = ls_read-customer ). cl_abap_unit_assert=>assert_equals( exp = lv_day act = ls_read-session_date ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '3.50' ) act = CONV decfloat34( ls_read-booked_hours ) ). cl_abap_unit_assert=>assert_equals( exp = 'STD' act = ls_read-rate_mode ). cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_read-tariff_group ). cl_abap_unit_assert=>assert_equals( exp = 8 act = ls_read-track_count ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '450.00' ) act = CONV decfloat34( ls_read-session_value ) ). ENDMETHOD. METHOD read_by_date. DATA lt_sess TYPE STANDARD TABLE OF {{p}}sess WITH EMPTY KEY. DATA lv_day TYPE d. lv_day = '20250301'. lt_sess = VALUE #( ( client = sy-mandt studio_id = 'R1' session_no = '000010' customer = 'CUST10' session_date = lv_day booked_hours = '1.00' rate_mode = 'STD' tariff_group = 'A' track_count = 1 session_value = '80.00' ) ( client = sy-mandt studio_id = 'R2' session_no = '000011' customer = 'CUST11' session_date = '20250302' booked_hours = '2.00' rate_mode = 'STD' tariff_group = 'A' track_count = 2 session_value = '160.00' ) ). go_env->insert_test_data( lt_sess ). SELECT COUNT(*) FROM {{p}}sess WHERE session_date = @lv_day INTO @DATA(lv_count). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_count ). ENDMETHOD. ENDCLASS.