CLASS {{p}}t61_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. METHODS setup. METHODS table_descr RETURNING VALUE(ro_descr) TYPE REF TO cl_abap_structdescr. METHODS trimmed IMPORTING iv_value TYPE clike RETURNING VALUE(rv_value) TYPE string. METHODS field_names FOR TESTING. METHODS field_lengths FOR TESTING. METHODS field_types FOR TESTING. METHODS field_decimals FOR TESTING. METHODS insert_and_read FOR TESTING. METHODS reads_two_jobs FOR TESTING. ENDCLASS. CLASS {{p}}t61_hidden IMPLEMENTATION. METHOD class_setup. go_env = cl_osql_test_environment=>create( i_dependency_list = VALUE #( ( '{{P}}WINJOB' ) ) ). ENDMETHOD. METHOD class_teardown. go_env->destroy( ). ENDMETHOD. METHOD setup. go_env->clear_doubles( ). ENDMETHOD. METHOD table_descr. ro_descr = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_name( '{{P}}WINJOB' ) ). ENDMETHOD. METHOD trimmed. rv_value = iv_value. SHIFT rv_value RIGHT DELETING TRAILING space. ENDMETHOD. METHOD field_names. DATA(lt_components) = table_descr( )->get_components( ). DATA(lv_act) = ``. LOOP AT lt_components INTO DATA(ls_comp). lv_act = lv_act && ls_comp-name && `;`. ENDLOOP. cl_abap_unit_assert=>assert_equals( exp = `CLIENT;JOB_ID;CUSTOMER;WORK_HOURS;CALC_MODE;ORDER_DATE;PANE_COUNT;GROUP_CODE;NET_VALUE;` act = lv_act ). ENDMETHOD. METHOD field_lengths. DATA(lt_components) = table_descr( )->get_components( ). DATA(lv_act) = ``. LOOP AT lt_components INTO DATA(ls_comp). DATA(lo_elem) = CAST cl_abap_elemdescr( ls_comp-type ). IF lo_elem->type_kind = 'C'. DATA(lv_len) = lo_elem->length / 2. lv_act = lv_act && |{ lv_len }| && `;`. ENDIF. ENDLOOP. cl_abap_unit_assert=>assert_equals( exp = `3;10;10;2;4;` act = lv_act ). ENDMETHOD. METHOD field_types. DATA(lt_components) = table_descr( )->get_components( ). DATA(lv_act) = ``. LOOP AT lt_components INTO DATA(ls_comp). DATA(lo_elem) = CAST cl_abap_elemdescr( ls_comp-type ). lv_act = lv_act && lo_elem->type_kind && `;`. ENDLOOP. cl_abap_unit_assert=>assert_equals( exp = `C;C;C;I;C;D;I;C;P;` act = lv_act ). ENDMETHOD. METHOD field_decimals. DATA(lt_components) = table_descr( )->get_components( ). DATA(lv_act) = ``. LOOP AT lt_components INTO DATA(ls_comp). DATA(lo_elem) = CAST cl_abap_elemdescr( ls_comp-type ). IF lo_elem->type_kind = 'P'. lv_act = lv_act && |{ lo_elem->decimals }| && `;`. ENDIF. ENDLOOP. cl_abap_unit_assert=>assert_equals( exp = `2;` act = lv_act ). ENDMETHOD. METHOD insert_and_read. DATA lt_job TYPE STANDARD TABLE OF {{p}}winjob WITH EMPTY KEY. lt_job = VALUE #( ( client = sy-mandt job_id = 'J1' customer = 'CUST01' work_hours = 3 calc_mode = 'HR' order_date = '20240115' pane_count = 12 group_code = 'PRIV' net_value = '125.50' ) ). go_env->insert_test_data( lt_job ). SELECT SINGLE * FROM {{p}}winjob WHERE job_id = 'J1' INTO @DATA(ls_read). cl_abap_unit_assert=>assert_equals( exp = `CUST01` act = trimmed( ls_read-customer ) ). cl_abap_unit_assert=>assert_equals( exp = 3 act = ls_read-work_hours ). cl_abap_unit_assert=>assert_equals( exp = `PRIV` act = trimmed( ls_read-group_code ) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '125.50' ) act = CONV decfloat34( ls_read-net_value ) ). ENDMETHOD. METHOD reads_two_jobs. DATA lt_job TYPE STANDARD TABLE OF {{p}}winjob WITH EMPTY KEY. lt_job = VALUE #( ( client = sy-mandt job_id = 'K1' customer = 'ALPHA' ) ( client = sy-mandt job_id = 'K2' customer = 'BETA' ) ). go_env->insert_test_data( lt_job ). SELECT COUNT(*) FROM {{p}}winjob INTO @DATA(lv_count). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_count ). ENDMETHOD. ENDCLASS.