CLASS {{p}}well_test 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_has_fields FOR TESTING. METHODS store_and_read FOR TESTING. METHODS duplicate_key_rejected FOR TESTING. ENDCLASS. CLASS {{p}}well_test IMPLEMENTATION. METHOD class_setup. go_env = cl_osql_test_environment=>create( i_dependency_list = VALUE #( ( '{{P}}WELL' ) ) ). ENDMETHOD. METHOD class_teardown. go_env->destroy( ). ENDMETHOD. METHOD setup. go_env->clear_doubles( ). ENDMETHOD. METHOD table_has_fields. DATA(lo_struct) = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_name( '{{P}}WELL' ) ). DATA(lt_fields) = lo_struct->get_ddic_field_list( ). cl_abap_unit_assert=>assert_equals( exp = 10 act = lines( lt_fields ) ). READ TABLE lt_fields TRANSPORTING NO FIELDS WITH KEY fieldname = 'DEPTH_M'. cl_abap_unit_assert=>assert_subrc( exp = 0 ). ENDMETHOD. METHOD store_and_read. DATA ls_job TYPE {{p}}well. ls_job-client = sy-mandt. ls_job-job_id = 'J1'. ls_job-site_name = 'FARM NORTH'. ls_job-depth_m = '120.50'. ls_job-depth_unit = 'M'. ls_job-price = '4500.00'. ls_job-currency_code = 'EUR'. INSERT {{p}}well FROM ls_job. cl_abap_unit_assert=>assert_subrc( exp = 0 ). SELECT SINGLE site_name, depth_m FROM {{p}}well WHERE job_id = 'J1' INTO @DATA(ls_db). cl_abap_unit_assert=>assert_equals( exp = 'FARM NORTH' act = ls_db-site_name ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '120.50' ) act = CONV decfloat34( ls_db-depth_m ) ). ENDMETHOD. METHOD duplicate_key_rejected. DATA ls_job TYPE {{p}}well. ls_job-client = sy-mandt. ls_job-job_id = 'J9'. INSERT {{p}}well FROM ls_job. INSERT {{p}}well FROM ls_job. cl_abap_unit_assert=>assert_equals( exp = 4 act = sy-subrc ). ENDMETHOD. ENDCLASS.