@@ -155,6 +155,11 @@ def test_s3_eventbridge_notification_object_restore_completed_event():
155
155
handle_s3_eventbridge_object_restore_completed (event_dict , LambdaContext ())
156
156
157
157
158
+ def test_s3_eventbridge_notification_object_restore_completed_event_no_envelope ():
159
+ event_dict = load_event ("s3EventBridgeNotificationObjectRestoreCompletedEvent.json" )
160
+ handle_s3_eventbridge_object_restore_completed_no_envelope (event_dict , LambdaContext ())
161
+
162
+
158
163
@event_parser (model = S3Model )
159
164
def handle_s3_delete_object (event : S3Model , _ : LambdaContext ):
160
165
records = list (event .Records )
@@ -415,3 +420,35 @@ def handle_s3_eventbridge_object_restore_completed(event: S3EventNotificationEve
415
420
assert source_ip_address == event .source_ip_address
416
421
assert source_storage_class == event .source_storage_class
417
422
assert version == event .version
423
+
424
+
425
+ @event_parser (model = S3EventNotificationEventBridgeModel )
426
+ def handle_s3_eventbridge_object_restore_completed_no_envelope (
427
+ event : S3EventNotificationEventBridgeModel , _ : LambdaContext
428
+ ):
429
+ """
430
+ Tests that the `S3EventNotificationEventBridgeModel` parses events from
431
+ https://docs.aws.amazon.com/AmazonS3/latest/userguide/ev-events.html
432
+ """
433
+
434
+ raw_event = load_event ("s3EventBridgeNotificationObjectRestoreCompletedEvent.json" )
435
+
436
+ assert event .version == raw_event ["version" ]
437
+ assert event .id == raw_event ["id" ]
438
+ assert event .detail_type == raw_event ["detail-type" ]
439
+ assert event .source == raw_event ["source" ]
440
+ assert event .account == raw_event ["account" ]
441
+ assert event .time == datetime .fromisoformat (raw_event ["time" ].replace ("Z" , "+00:00" ))
442
+ assert event .region == raw_event ["region" ]
443
+ assert event .resources == raw_event ["resources" ]
444
+
445
+ assert event .detail .version == raw_event ["detail" ]["version" ]
446
+ assert event .detail .bucket .name == raw_event ["detail" ]["bucket" ]["name" ]
447
+ assert event .detail .object .key == raw_event ["detail" ]["object" ]["key" ]
448
+ assert event .detail .object .size == raw_event ["detail" ]["object" ]["size" ]
449
+ assert event .detail .object .etag == raw_event ["detail" ]["object" ]["etag" ]
450
+ assert event .detail .object .sequencer == raw_event ["detail" ]["object" ]["sequencer" ]
451
+ assert event .detail .request_id == raw_event ["detail" ]["request-id" ]
452
+ assert event .detail .requester == raw_event ["detail" ]["requester" ]
453
+ assert event .detail .restore_expiry_time == raw_event ["detail" ]["restore-expiry-time" ]
454
+ assert event .detail .source_storage_class == raw_event ["detail" ]["source-storage-class" ]
0 commit comments