@@ -18,6 +18,14 @@ def test_eventgrid_input_type(self):
1818 self .assertFalse (check_input_type (str ))
1919 self .assertFalse (check_input_type (bytes ))
2020
21+ def test_cloudevent_input_type (self ):
22+ check_input_type = azf_event_grid .EventGridEventInConverter .\
23+ check_input_type_annotation
24+ self .assertTrue (check_input_type (func .CloudEvent ))
25+ self .assertFalse (check_input_type (List [func .CloudEvent ]))
26+ self .assertFalse (check_input_type (str ))
27+ self .assertFalse (check_input_type (bytes ))
28+
2129 def test_eventgrid_output_type (self ):
2230 check_output_type = azf_event_grid .EventGridEventOutConverter .\
2331 check_output_type_annotation
@@ -148,6 +156,66 @@ def _generate_multiple_eventgrid_event(with_date=True):
148156 data_version = 'dataVersion' ,
149157 )]
150158
159+ def test_cloudevent_decode (self ):
160+ event = azf_event_grid .EventGridEventInConverter .decode (
161+ data = self ._generate_single_cloudevent_datum (), trigger_metadata = None
162+ )
163+ self .assertIsInstance (event , azf_event_grid .azf_eventgrid .CloudEvent )
164+ self .assertEqual (event .id , "A234-1234-1234" )
165+ self .assertEqual (event .source , "/mycontext/subcontext" )
166+ self .assertEqual (event .type , "com.example.type" )
167+ self .assertEqual (event .specversion , "1.0" )
168+ self .assertEqual (event .subject , "mysubject" )
169+ self .assertEqual (event .datacontenttype , "application/json" )
170+ self .assertIsNotNone (event .time )
171+ self .assertIsNotNone (event .get_json ())
172+ self .assertEqual (event .get_json ().get ("key" ), "value" )
173+
174+ def test_cloudevent_decode_with_null_data (self ):
175+ event = azf_event_grid .EventGridEventInConverter .decode (
176+ data = self ._generate_single_cloudevent_datum (with_data = False ),
177+ trigger_metadata = None
178+ )
179+ self .assertIsInstance (event , azf_event_grid .azf_eventgrid .CloudEvent )
180+ self .assertEqual (event .id , "A234-1234-1234" )
181+ self .assertIsNone (event .get_json ())
182+
183+ def test_cloudevent_decode_with_extensions (self ):
184+ event = azf_event_grid .EventGridEventInConverter .decode (
185+ data = self ._generate_single_cloudevent_datum (with_extensions = True ),
186+ trigger_metadata = None
187+ )
188+ self .assertIsInstance (event , azf_event_grid .azf_eventgrid .CloudEvent )
189+ self .assertEqual (event .extension_attrs .get ("customext" ), "extvalue" )
190+
191+ def test_eventgrid_schema_not_broken (self ):
192+ event = azf_event_grid .EventGridEventInConverter .decode (
193+ data = self ._generate_single_eventgrid_datum (), trigger_metadata = None
194+ )
195+ self .assertIsInstance (event , azf_event_grid .azf_eventgrid .EventGridEvent )
196+ self .assertEqual (event .id , "00010001-0001-0001-0001-000100010001" )
197+ self .assertEqual (event .topic , "/TestTopic/namespaces/test" )
198+ self .assertEqual (event .event_type , "captureFileCreated" )
199+
200+ @staticmethod
201+ def _generate_single_cloudevent_datum (with_data = True ,
202+ with_extensions = False ):
203+ payload = {
204+ "specversion" : "1.0" ,
205+ "type" : "com.example.type" ,
206+ "source" : "/mycontext/subcontext" ,
207+ "id" : "A234-1234-1234" ,
208+ "time" : "2018-04-05T17:31:00Z" ,
209+ "subject" : "mysubject" ,
210+ "datacontenttype" : "application/json" ,
211+ }
212+ if with_data :
213+ payload ["data" ] = {"key" : "value" }
214+ if with_extensions :
215+ payload ["customext" ] = "extvalue"
216+ import json as _json
217+ return func .meta .Datum (_json .dumps (payload ), 'json' )
218+
151219 @staticmethod
152220 def _generate_single_eventgrid_str (in_bytes = False ):
153221 string_representation = '{"id": "id", ' \
0 commit comments