CLASS {{p}}jump_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-DATA gt_fields TYPE ddfields. CLASS-METHODS class_setup. CLASS-METHODS class_teardown. METHODS setup. METHODS field_info IMPORTING iv_name TYPE fieldname RETURNING VALUE(rs_info) TYPE dfies. METHODS assert_field_exists IMPORTING iv_name TYPE fieldname. METHODS all_fields_exist FOR TESTING. METHODS key_fields FOR TESTING. METHODS char_fields FOR TESTING. METHODS date_field FOR TESTING. METHODS minutes_field FOR TESTING. METHODS amount_field FOR TESTING. METHODS client_field FOR TESTING. METHODS insert_and_read FOR TESTING. METHODS duplicate_key FOR TESTING. METHODS filter_by_date FOR TESTING. ENDCLASS. CLASS {{p}}jump_hidden IMPLEMENTATION. METHOD class_setup. DATA(lo_struct) = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_name( '{{P}}JUMP' ) ). gt_fields = lo_struct->get_ddic_field_list( ). go_env = cl_osql_test_environment=>create( i_dependency_list = VALUE #( ( '{{P}}JUMP' ) ) ). ENDMETHOD. METHOD class_teardown. go_env->destroy( ). ENDMETHOD. METHOD setup. go_env->clear_doubles( ). ENDMETHOD. METHOD field_info. READ TABLE gt_fields INTO rs_info WITH KEY fieldname = iv_name. ENDMETHOD. METHOD assert_field_exists. cl_abap_unit_assert=>assert_equals( exp = iv_name act = field_info( iv_name )-fieldname ). ENDMETHOD. METHOD all_fields_exist. cl_abap_unit_assert=>assert_equals( exp = 8 act = lines( gt_fields ) ). assert_field_exists( 'CLIENT' ). assert_field_exists( 'SESSION_ID' ). assert_field_exists( 'VISITOR_ID' ). assert_field_exists( 'JUMP_DATE' ). assert_field_exists( 'JUMP_MINUTES' ). assert_field_exists( 'LOCKER_NO' ). assert_field_exists( 'FEE_AMOUNT' ). assert_field_exists( 'PAID' ). ENDMETHOD. METHOD key_fields. cl_abap_unit_assert=>assert_equals( exp = 'X' act = field_info( 'CLIENT' )-keyflag ). cl_abap_unit_assert=>assert_equals( exp = 'X' act = field_info( 'SESSION_ID' )-keyflag ). cl_abap_unit_assert=>assert_equals( exp = ' ' act = field_info( 'VISITOR_ID' )-keyflag ). cl_abap_unit_assert=>assert_equals( exp = ' ' act = field_info( 'JUMP_DATE' )-keyflag ). cl_abap_unit_assert=>assert_equals( exp = ' ' act = field_info( 'JUMP_MINUTES' )-keyflag ). cl_abap_unit_assert=>assert_equals( exp = ' ' act = field_info( 'LOCKER_NO' )-keyflag ). cl_abap_unit_assert=>assert_equals( exp = ' ' act = field_info( 'FEE_AMOUNT' )-keyflag ). cl_abap_unit_assert=>assert_equals( exp = ' ' act = field_info( 'PAID' )-keyflag ). ENDMETHOD. METHOD char_fields. cl_abap_unit_assert=>assert_equals( exp = 'C' act = field_info( 'SESSION_ID' )-inttype ). cl_abap_unit_assert=>assert_equals( exp = 10 act = field_info( 'SESSION_ID' )-leng ). cl_abap_unit_assert=>assert_equals( exp = 'C' act = field_info( 'VISITOR_ID' )-inttype ). cl_abap_unit_assert=>assert_equals( exp = 10 act = field_info( 'VISITOR_ID' )-leng ). cl_abap_unit_assert=>assert_equals( exp = 'N' act = field_info( 'LOCKER_NO' )-inttype ). cl_abap_unit_assert=>assert_equals( exp = 4 act = field_info( 'LOCKER_NO' )-leng ). cl_abap_unit_assert=>assert_equals( exp = 'C' act = field_info( 'PAID' )-inttype ). cl_abap_unit_assert=>assert_equals( exp = 1 act = field_info( 'PAID' )-leng ). ENDMETHOD. METHOD date_field. cl_abap_unit_assert=>assert_equals( exp = 'D' act = field_info( 'JUMP_DATE' )-inttype ). cl_abap_unit_assert=>assert_equals( exp = 8 act = field_info( 'JUMP_DATE' )-leng ). ENDMETHOD. METHOD minutes_field. cl_abap_unit_assert=>assert_equals( exp = 'I' act = field_info( 'JUMP_MINUTES' )-inttype ). cl_abap_unit_assert=>assert_equals( exp = 10 act = field_info( 'JUMP_MINUTES' )-leng ). ENDMETHOD. METHOD amount_field. cl_abap_unit_assert=>assert_equals( exp = 'P' act = field_info( 'FEE_AMOUNT' )-inttype ). cl_abap_unit_assert=>assert_equals( exp = 9 act = field_info( 'FEE_AMOUNT' )-leng ). cl_abap_unit_assert=>assert_equals( exp = 2 act = field_info( 'FEE_AMOUNT' )-decimals ). ENDMETHOD. METHOD client_field. cl_abap_unit_assert=>assert_equals( exp = 'C' act = field_info( 'CLIENT' )-inttype ). cl_abap_unit_assert=>assert_equals( exp = 3 act = field_info( 'CLIENT' )-leng ). ENDMETHOD. METHOD insert_and_read. DATA(ls_jump) = VALUE {{p}}jump( session_id = 'S000000001' visitor_id = 'V000000001' jump_date = '20250401' jump_minutes = 60 locker_no = '0007' fee_amount = '12.50' paid = 'X' ). INSERT {{p}}jump FROM @ls_jump. cl_abap_unit_assert=>assert_equals( exp = 0 act = sy-subrc ). SELECT SINGLE * FROM {{p}}jump WHERE session_id = 'S000000001' INTO @DATA(ls_read). cl_abap_unit_assert=>assert_equals( exp = ls_jump-visitor_id act = ls_read-visitor_id ). cl_abap_unit_assert=>assert_equals( exp = ls_jump-jump_date act = ls_read-jump_date ). cl_abap_unit_assert=>assert_equals( exp = ls_jump-jump_minutes act = ls_read-jump_minutes ). cl_abap_unit_assert=>assert_equals( exp = ls_jump-locker_no act = ls_read-locker_no ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( ls_jump-fee_amount ) act = CONV decfloat34( ls_read-fee_amount ) ). cl_abap_unit_assert=>assert_equals( exp = ls_jump-paid act = ls_read-paid ). ENDMETHOD. METHOD duplicate_key. DATA(ls_jump) = VALUE {{p}}jump( session_id = 'S000000002' visitor_id = 'V000000002' jump_date = '20250402' ). INSERT {{p}}jump FROM @ls_jump. cl_abap_unit_assert=>assert_equals( exp = 0 act = sy-subrc ). INSERT {{p}}jump FROM @ls_jump. cl_abap_unit_assert=>assert_equals( exp = 4 act = sy-subrc ). ENDMETHOD. METHOD filter_by_date. DATA lt_jump TYPE STANDARD TABLE OF {{p}}jump WITH EMPTY KEY. lt_jump = VALUE #( ( session_id = 'S1' visitor_id = 'A' jump_date = '20250401' ) ( session_id = 'S2' visitor_id = 'B' jump_date = '20250401' ) ( session_id = 'S3' visitor_id = 'C' jump_date = '20250402' ) ). INSERT {{p}}jump FROM TABLE @lt_jump. cl_abap_unit_assert=>assert_equals( exp = 0 act = sy-subrc ). SELECT * FROM {{p}}jump INTO TABLE @DATA(lt_all). cl_abap_unit_assert=>assert_equals( exp = 3 act = lines( lt_all ) ). SELECT * FROM {{p}}jump WHERE jump_date = '20250401' INTO TABLE @DATA(lt_day). cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_day ) ). ENDMETHOD. ENDCLASS.