@@ -18,7 +18,10 @@ class TestVisionEvents(unittest.TestCase):
1818 WORKSPACE = "test-ws"
1919
2020 def _make_workspace (self ):
21- from roboflow .core .workspace import Workspace
21+ try :
22+ from roboflow .core .workspace import Workspace
23+ except ImportError :
24+ self .skipTest ("Workspace requires PIL (not available in slim install)" )
2225
2326 info = {
2427 "workspace" : {
@@ -434,5 +437,63 @@ def test_upload_image_error(self):
434437 os .unlink (tmp_path )
435438
436439
440+ class TestVisionEventsAdapter (unittest .TestCase ):
441+ """Tests that call the adapter directly (no Workspace). Work in slim installs."""
442+
443+ API_KEY = "test_key"
444+
445+ @responses .activate
446+ def test_adapter_write_event (self ):
447+ from roboflow .adapters import vision_events_api
448+
449+ responses .add (responses .POST , _BASE , json = {"eventId" : "e1" , "created" : True }, status = 201 )
450+ result = vision_events_api .write_event (self .API_KEY , {"eventId" : "e1" , "eventType" : "custom" , "useCaseId" : "uc" })
451+ self .assertEqual (result ["eventId" ], "e1" )
452+ self .assertEqual (responses .calls [0 ].request .headers ["Authorization" ], f"Bearer { self .API_KEY } " )
453+
454+ @responses .activate
455+ def test_adapter_write_batch (self ):
456+ from roboflow .adapters import vision_events_api
457+
458+ responses .add (responses .POST , f"{ _BASE } /batch" , json = {"created" : 1 , "eventIds" : ["e1" ]}, status = 201 )
459+ result = vision_events_api .write_batch (self .API_KEY , [{"eventId" : "e1" }])
460+ self .assertEqual (result ["created" ], 1 )
461+
462+ @responses .activate
463+ def test_adapter_query (self ):
464+ from roboflow .adapters import vision_events_api
465+
466+ body = {"events" : [{"eventId" : "e1" }], "nextCursor" : None , "hasMore" : False , "lookbackDays" : 14 }
467+ responses .add (responses .POST , f"{ _BASE } /query" , json = body , status = 200 )
468+ result = vision_events_api .query (self .API_KEY , {"useCaseId" : "uc" })
469+ self .assertEqual (len (result ["events" ]), 1 )
470+
471+ @responses .activate
472+ def test_adapter_list_use_cases (self ):
473+ from roboflow .adapters import vision_events_api
474+
475+ body = {"useCases" : [{"id" : "uc-1" , "name" : "QA" }], "lookbackDays" : 14 }
476+ responses .add (responses .GET , f"{ _BASE } /use-cases" , json = body , status = 200 )
477+ result = vision_events_api .list_use_cases (self .API_KEY )
478+ self .assertEqual (len (result ["useCases" ]), 1 )
479+
480+ @responses .activate
481+ def test_adapter_get_metadata_schema (self ):
482+ from roboflow .adapters import vision_events_api
483+
484+ body = {"useCaseId" : "uc-1" , "fields" : {"temp" : {"types" : ["number" ]}}}
485+ responses .add (responses .GET , f"{ _BASE } /custom-metadata-schema/uc-1" , json = body , status = 200 )
486+ result = vision_events_api .get_custom_metadata_schema (self .API_KEY , "uc-1" )
487+ self .assertEqual (result ["fields" ]["temp" ]["types" ], ["number" ])
488+
489+ @responses .activate
490+ def test_adapter_error_raises_roboflow_error (self ):
491+ from roboflow .adapters import vision_events_api
492+
493+ responses .add (responses .POST , _BASE , json = {"error" : "forbidden" }, status = 403 )
494+ with self .assertRaises (RoboflowError ):
495+ vision_events_api .write_event (self .API_KEY , {"eventId" : "x" })
496+
497+
437498if __name__ == "__main__" :
438499 unittest .main ()
0 commit comments