@@ -617,6 +617,81 @@ public async Task MongoClient_bulkWrite_unacknowledged_write_concern_uses_w0_all
617
617
documentCount . Should ( ) . Be ( numModels ) ;
618
618
}
619
619
620
+ // https://specifications.readthedocs.io/en/latest/crud/tests/#16-generated-document-identifiers-are-the-first-field-in-their-document
621
+ // The next three consecutive tests defined below are part of the prose test linked above.
622
+ [ Theory ]
623
+ [ ParameterAttributeData ]
624
+ public async Task Ensure_generated_ids_are_first_fields_in_document_using_insertOne ( [ Values ( true , false ) ] bool async )
625
+ {
626
+ var eventCapturer = new EventCapturer ( ) . Capture < CommandStartedEvent > ( ) ;
627
+ using var client = CreateMongoClient ( eventCapturer ) ;
628
+ var testCollection = client . GetDatabase ( "test" ) . GetCollection < BsonDocument > ( "test" ) ;
629
+
630
+ var document = new BsonDocument ( "x" , 1 ) ;
631
+ if ( async)
632
+ {
633
+ await testCollection . InsertOneAsync ( document ) ;
634
+ }
635
+ else
636
+ {
637
+ testCollection . InsertOne ( document ) ;
638
+ }
639
+
640
+ var insertEvents = eventCapturer . Events . OfType < CommandStartedEvent > ( ) . Where ( e => e . CommandName == "insert" ) . ToArray ( ) ;
641
+ insertEvents. Length . Should ( ) . Be ( 1 ) ;
642
+ insertEvents[ 0 ] . Command [ "documents" ] [ 0 ] . AsBsonDocument . Names . First ( ) . Should ( ) . Be ( "_id" ) ;
643
+ document. Names . Should ( ) . Contain ( "_id" ) ;
644
+ }
645
+
646
+ [ Theory ]
647
+ [ ParameterAttributeData ]
648
+ public async Task Ensure_generated_ids_are_first_fields_in_document_using_collection_bulkWrite( [ Values ( true , false ) ] bool async)
649
+ {
650
+ var eventCapturer = new EventCapturer ( ) . Capture < CommandStartedEvent > ( ) ;
651
+ using var client = CreateMongoClient( eventCapturer ) ;
652
+ var testCollection = client. GetDatabase ( "test" ) . GetCollection < BsonDocument > ( "test" ) ;
653
+
654
+ var document = new BsonDocument( "x" , 1 ) ;
655
+ if ( async)
656
+ {
657
+ await testCollection . BulkWriteAsync ( [ new InsertOneModel < BsonDocument > ( document ) ] ) ;
658
+ }
659
+ else
660
+ {
661
+ testCollection . BulkWrite ( [ new InsertOneModel < BsonDocument > ( document ) ] ) ;
662
+ }
663
+
664
+ var insertEvents = eventCapturer . Events . OfType < CommandStartedEvent > ( ) . Where ( e => e . CommandName == "insert" ) . ToArray ( ) ;
665
+ insertEvents. Length . Should ( ) . Be ( 1 ) ;
666
+ insertEvents[ 0 ] . Command [ "documents" ] [ 0 ] . AsBsonDocument . Names . First ( ) . Should ( ) . Be ( "_id" ) ;
667
+ document. Names . Should ( ) . Contain ( "_id" ) ;
668
+ }
669
+
670
+ [ Theory ]
671
+ [ ParameterAttributeData ]
672
+ public async Task Ensure_generated_ids_are_first_fields_in_document_using_client_bulkWrite( [ Values ( true , false ) ] bool async)
673
+ {
674
+ RequireServer . Check ( ) . Supports ( Feature . ClientBulkWrite ) . Serverless ( false ) ;
675
+
676
+ var eventCapturer = new EventCapturer ( ) . Capture < CommandStartedEvent > ( ) ;
677
+ using var client = CreateMongoClient( eventCapturer ) ;
678
+
679
+ var document = new BsonDocument ( "x" , 1 ) ;
680
+ if ( async)
681
+ {
682
+ await client . BulkWriteAsync ( [ new BulkWriteInsertOneModel < BsonDocument > ( "test.test" , document ) ] ) ;
683
+ }
684
+ else
685
+ {
686
+ client . BulkWrite ( [ new BulkWriteInsertOneModel < BsonDocument > ( "test.test" , document ) ] ) ;
687
+ }
688
+
689
+ var bulkEvents = eventCapturer . Events . OfType < CommandStartedEvent > ( ) . Where ( e => e . CommandName == "bulkWrite" ) . ToArray ( ) ;
690
+ bulkEvents. Length . Should ( ) . Be ( 1 ) ;
691
+ bulkEvents[ 0 ] . Command [ "ops" ] [ 0 ] [ "document" ] . AsBsonDocument . Names . First ( ) . Should ( ) . Be ( "_id" ) ;
692
+ document. Names . Should ( ) . Contain ( "_id" ) ;
693
+ }
694
+
620
695
// private methods
621
696
private FailPoint ConfigureFailPoint( string failpointCommand )
622
697
{
0 commit comments