@@ -263,131 +263,131 @@ def tearDown(self):
263263 result = self ._df_api .repoList (list_all = True )
264264
265265
266- def test_record_with_schema_enforcement (self ):
267- """Test record create and update with schema validation and enforcement."""
268-
269- # Create a schema to use with records
270- schema_def = json .dumps ({
271- "type" : "object" ,
272- "properties" : {
273- "temperature" : {"type" : "number" },
274- "pressure" : {"type" : "number" },
275- "sample_id" : {"type" : "string" }
276- },
277- "required" : ["temperature" , "sample_id" ]
278- })
279-
280- self ._df_api .schemaCreate (
281- "test_rec_schema" ,
282- definition = schema_def ,
283- description = "Schema for record integration test" ,
284- )
285-
286- # --- Record create with valid metadata and schema enforce ---
287- valid_metadata = json .dumps ({
288- "temperature" : 300.5 ,
289- "pressure" : 101.3 ,
290- "sample_id" : "S-001"
291- })
292-
293- data_result = self ._df_api .dataCreate (
294- title = "Schema Enforced Record" ,
295- metadata = valid_metadata ,
296- schema = "test_rec_schema" ,
297- schema_enforce = True ,
298- parent_id = "root" ,
299- )
300-
301- rec_id = data_result [0 ].data [0 ].id
302- self .assertEqual (data_result [0 ].data [0 ].title , "Schema Enforced Record" )
303- # No md_err_msg means validation passed
304- self .assertFalse (data_result [0 ].data [0 ].md_err_msg )
305-
306- # --- Record create with invalid metadata and schema enforce should fail ---
307- invalid_metadata = json .dumps ({
308- "temperature" : "not_a_number" ,
309- "sample_id" : 12345
310- })
311-
312- with self .assertRaises (Exception ):
313- self ._df_api .dataCreate (
314- title = "Should Fail" ,
315- metadata = invalid_metadata ,
266+ def test_record_with_schema_enforcement (self ):
267+ """Test record create and update with schema validation and enforcement."""
268+
269+ # Create a schema to use with records
270+ schema_def = json .dumps ({
271+ "type" : "object" ,
272+ "properties" : {
273+ "temperature" : {"type" : "number" },
274+ "pressure" : {"type" : "number" },
275+ "sample_id" : {"type" : "string" }
276+ },
277+ "required" : ["temperature" , "sample_id" ]
278+ })
279+
280+ self ._df_api .schemaCreate (
281+ "test_rec_schema" ,
282+ definition = schema_def ,
283+ description = "Schema for record integration test" ,
284+ )
285+
286+ # --- Record create with valid metadata and schema enforce ---
287+ valid_metadata = json .dumps ({
288+ "temperature" : 300.5 ,
289+ "pressure" : 101.3 ,
290+ "sample_id" : "S-001"
291+ })
292+
293+ data_result = self ._df_api .dataCreate (
294+ title = "Schema Enforced Record" ,
295+ metadata = valid_metadata ,
316296 schema = "test_rec_schema" ,
317297 schema_enforce = True ,
318298 parent_id = "root" ,
319299 )
320-
321- # --- Record create with invalid metadata but NO enforce (warning only) ---
322- warn_result = self ._df_api .dataCreate (
323- title = "Schema Warn Record" ,
324- metadata = invalid_metadata ,
325- schema = "test_rec_schema" ,
326- parent_id = "root" ,
327- )
328-
329- warn_rec_id = warn_result [0 ].data [0 ].id
330- # Should have md_err_msg set but record still created
331- self .assertTrue (warn_result [0 ].data [0 ].md_err_msg )
332-
333- # --- Record update with valid metadata merge ---
334- merge_metadata = json .dumps ({"pressure" : 200.0 })
335-
336- update_result = self ._df_api .dataUpdate (
337- rec_id ,
338- metadata = merge_metadata ,
339- schema = "test_rec_schema" ,
340- schema_enforce = True ,
341- )
342-
343- self .assertFalse (update_result [0 ].data [0 ].md_err_msg )
344-
345- # --- Record update with metadata set (replace) and enforce ---
346- # Missing required field "sample_id" should fail with enforce
347- incomplete_metadata = json .dumps ({"temperature" : 400.0 })
348-
349- with self .assertRaises (Exception ):
350- self ._df_api .dataUpdate (
300+
301+ rec_id = data_result [0 ].data [0 ].id
302+ self .assertEqual (data_result [0 ].data [0 ].title , "Schema Enforced Record" )
303+ # No md_err_msg means validation passed
304+ self .assertFalse (data_result [0 ].data [0 ].md_err_msg )
305+
306+ # --- Record create with invalid metadata and schema enforce should fail ---
307+ invalid_metadata = json .dumps ({
308+ "temperature" : "not_a_number" ,
309+ "sample_id" : 12345
310+ })
311+
312+ with self .assertRaises (Exception ):
313+ self ._df_api .dataCreate (
314+ title = "Should Fail" ,
315+ metadata = invalid_metadata ,
316+ schema = "test_rec_schema" ,
317+ schema_enforce = True ,
318+ parent_id = "root" ,
319+ )
320+
321+ # --- Record create with invalid metadata but NO enforce (warning only) ---
322+ warn_result = self ._df_api .dataCreate (
323+ title = "Schema Warn Record" ,
324+ metadata = invalid_metadata ,
325+ schema = "test_rec_schema" ,
326+ parent_id = "root" ,
327+ )
328+
329+ warn_rec_id = warn_result [0 ].data [0 ].id
330+ # Should have md_err_msg set but record still created
331+ self .assertTrue (warn_result [0 ].data [0 ].md_err_msg )
332+
333+ # --- Record update with valid metadata merge ---
334+ merge_metadata = json .dumps ({"pressure" : 200.0 })
335+
336+ update_result = self ._df_api .dataUpdate (
351337 rec_id ,
352- metadata = incomplete_metadata ,
353- metadata_set = True ,
338+ metadata = merge_metadata ,
354339 schema = "test_rec_schema" ,
355340 schema_enforce = True ,
356341 )
357-
358- # --- Pre-validate metadata before committing ---
359- validate_result = self ._df_api .metadataValidate (
360- "test_rec_schema" ,
361- metadata = valid_metadata ,
362- )
363-
364- # No errors expected
365- self .assertFalse (validate_result [0 ].errors )
366-
367- validate_result_bad = self ._df_api .metadataValidate (
368- "test_rec_schema" ,
369- metadata = invalid_metadata ,
370- )
371-
372- # Errors expected
373- self .assertTrue (validate_result_bad [0 ].errors )
374-
375- # --- Cleanup ---
376- task_result = self ._df_api .dataDelete ([rec_id , warn_rec_id ])
377-
378- status = task_result [0 ].task [0 ].status
379- count = 0
380- while status < 3 :
381- if count > 20 :
382- break
383- time .sleep (self ._timeout )
384- task_result = self ._df_api .taskView (task_result [0 ].task [0 ].id )
342+
343+ self .assertFalse (update_result [0 ].data [0 ].md_err_msg )
344+
345+ # --- Record update with metadata set (replace) and enforce ---
346+ # Missing required field "sample_id" should fail with enforce
347+ incomplete_metadata = json .dumps ({"temperature" : 400.0 })
348+
349+ with self .assertRaises (Exception ):
350+ self ._df_api .dataUpdate (
351+ rec_id ,
352+ metadata = incomplete_metadata ,
353+ metadata_set = True ,
354+ schema = "test_rec_schema" ,
355+ schema_enforce = True ,
356+ )
357+
358+ # --- Pre-validate metadata before committing ---
359+ validate_result = self ._df_api .metadataValidate (
360+ "test_rec_schema" ,
361+ metadata = valid_metadata ,
362+ )
363+
364+ # No errors expected
365+ self .assertFalse (validate_result [0 ].errors )
366+
367+ validate_result_bad = self ._df_api .metadataValidate (
368+ "test_rec_schema" ,
369+ metadata = invalid_metadata ,
370+ )
371+
372+ # Errors expected
373+ self .assertTrue (validate_result_bad [0 ].errors )
374+
375+ # --- Cleanup ---
376+ task_result = self ._df_api .dataDelete ([rec_id , warn_rec_id ])
377+
385378 status = task_result [0 ].task [0 ].status
386- count = count + 1
387-
388- self .assertEqual (status , 3 )
389-
390- self ._df_api .schemaDelete ("test_rec_schema" )
379+ count = 0
380+ while status < 3 :
381+ if count > 20 :
382+ break
383+ time .sleep (self ._timeout )
384+ task_result = self ._df_api .taskView (task_result [0 ].task [0 ].id )
385+ status = task_result [0 ].task [0 ].status
386+ count = count + 1
387+
388+ self .assertEqual (status , 3 )
389+
390+ self ._df_api .schemaDelete ("test_rec_schema" )
391391
392392
393393if __name__ == "__main__" :
0 commit comments