@@ -354,33 +354,22 @@ private void AssertChangeStreamDocument(ChangeStreamDocument<BsonDocument> actua
354
354
{
355
355
JsonDrivenHelper. EnsureAllFieldsAreValid( expectedDocument, "_id", "documentKey", "operationType", "ns", "fullDocument") ;
356
356
357
- // assert that all properties of a ChangeStreamDocument can be accessed without an exception being thrown
358
- var backingDocument = actualDocument. BackingDocument;
359
- var clusterTime = actualDocument. ClusterTime;
360
- var collectionNamespace = actualDocument. CollectionNamespace;
361
- var documentKey = actualDocument. DocumentKey;
362
- var fullDocument = actualDocument. FullDocument;
363
- var operationType = actualDocument. OperationType;
364
- var resumeToken = actualDocument. ResumeToken;
365
- var updateDescription = actualDocument. UpdateDescription;
366
-
367
- backingDocument. Should( ) . NotBeNull( ) ;
368
- clusterTime. Should( ) . NotBeNull( ) ;
357
+ AssertChangeStreamDocumentPropertyValuesAgainstBackingDocument( actualDocument) ;
369
358
370
359
if ( expectedDocument. Contains( "_id") )
371
360
{
372
- resumeToken . Should( ) . NotBeNull( ) ;
361
+ actualDocument . ResumeToken . Should( ) . NotBeNull( ) ;
373
362
}
374
363
375
364
if ( expectedDocument. Contains( "documentKey") )
376
365
{
377
- documentKey . Should( ) . NotBeNull( ) ;
366
+ actualDocument . DocumentKey . Should( ) . NotBeNull( ) ;
378
367
}
379
368
380
369
if ( expectedDocument. Contains( "operationType") )
381
370
{
382
371
var expectedOperationType = ( ChangeStreamOperationType) Enum. Parse( typeof ( ChangeStreamOperationType) , expectedDocument[ "operationType"] . AsString, ignoreCase: true) ;
383
- operationType . Should( ) . Be( expectedOperationType) ;
372
+ actualDocument . OperationType . Should( ) . Be( expectedOperationType) ;
384
373
}
385
374
386
375
if ( expectedDocument. Contains( "ns") )
@@ -390,14 +379,64 @@ private void AssertChangeStreamDocument(ChangeStreamDocument<BsonDocument> actua
390
379
var expectedDatabaseName = ns[ "db"] . AsString;
391
380
var expectedCollectionName = ns[ "coll"] . AsString;
392
381
var expectedCollectionNamespace = new CollectionNamespace( new DatabaseNamespace( expectedDatabaseName) , expectedCollectionName) ;
393
- collectionNamespace . Should( ) . Be( expectedCollectionNamespace) ;
382
+ actualDocument . CollectionNamespace . Should( ) . Be( expectedCollectionNamespace) ;
394
383
}
395
384
396
385
if ( expectedDocument. Contains( "fullDocument") )
397
386
{
387
+ var actualFullDocument = actualDocument. FullDocument;
388
+ actualFullDocument. Remove( "_id") ;
398
389
var expectedFullDocument = expectedDocument[ "fullDocument"] . AsBsonDocument;
399
- fullDocument. Remove( "_id") ;
400
- fullDocument. Should( ) . Be( expectedFullDocument) ;
390
+ actualFullDocument. Should( ) . Be( expectedFullDocument) ;
391
+ }
392
+ }
393
+
394
+ private void AssertChangeStreamDocumentPropertyValuesAgainstBackingDocument( ChangeStreamDocument< BsonDocument> actualDocument)
395
+ {
396
+ var backingDocument = actualDocument. BackingDocument;
397
+ backingDocument. Should( ) . NotBeNull( ) ;
398
+
399
+ var clusterTime = actualDocument. ClusterTime;
400
+ if ( backingDocument. Contains( "clusterTime") )
401
+ {
402
+ clusterTime. Should( ) . Be( backingDocument[ "clusterTime"] . AsBsonTimestamp) ;
403
+ }
404
+ else
405
+ {
406
+ clusterTime. Should( ) . BeNull( ) ;
407
+ }
408
+
409
+ var collectionNamespace = actualDocument. CollectionNamespace;
410
+ collectionNamespace. DatabaseNamespace. DatabaseName. Should( ) . Be( backingDocument[ "ns"] [ "db"] . AsString) ;
411
+ collectionNamespace. CollectionName. Should( ) . Be( backingDocument[ "ns"] [ "coll"] . AsString) ;
412
+
413
+ var documentKey = actualDocument. DocumentKey;
414
+ documentKey. Should( ) . Be( backingDocument[ "documentKey"] . AsBsonDocument) ;
415
+
416
+ var fullDocument = actualDocument. FullDocument;
417
+ if ( backingDocument. Contains( "fullDocument") )
418
+ {
419
+ fullDocument. Should( ) . Be( backingDocument[ "fullDocument"] . AsBsonDocument) ;
420
+ }
421
+ else
422
+ {
423
+ fullDocument. Should( ) . BeNull( ) ;
424
+ }
425
+
426
+ var operationType = actualDocument. OperationType;
427
+ operationType. ToString( ) . ToLowerInvariant( ) . Should( ) . Be( backingDocument[ "operationType"] . AsString) ;
428
+
429
+ var resumeToken = actualDocument. ResumeToken;
430
+ resumeToken. Should( ) . Be( backingDocument[ "_id"] . AsBsonDocument) ;
431
+
432
+ var updateDescription = actualDocument. UpdateDescription;
433
+ if ( backingDocument. Contains( "updateDescription") )
434
+ {
435
+ updateDescription. Should( ) . Be( backingDocument[ "updateDescription"] . AsBsonDocument) ;
436
+ }
437
+ else
438
+ {
439
+ updateDescription. Should( ) . BeNull( ) ;
401
440
}
402
441
}
403
442
0 commit comments