@@ -428,19 +428,24 @@ TEST_CASE("Collection", "[collection]") {
428428 [&](mongoc_bulk_operation_t *) { bulk_operation_destroy_called = true ; });
429429
430430 SECTION (" Insert One" , " [collection::insert_one]" ) {
431- bulk_operation_insert->interpose ([&](mongoc_bulk_operation_t *, const bson_t * doc) {
432- bulk_operation_op_called = true ;
433- REQUIRE (bson_get_data (doc) == filter_doc.view ().data ());
434- });
431+ bulk_operation_insert_with_opts->interpose (
432+ [&](mongoc_bulk_operation_t *, const bson_t * doc, const bson_t *, bson_error_t *) {
433+ bulk_operation_op_called = true ;
434+ REQUIRE (bson_get_data (doc) == filter_doc.view ().data ());
435+ return true ;
436+ });
435437
436438 mongo_coll.insert_one (filter_doc.view ());
439+ REQUIRE (bulk_operation_execute_called);
437440 }
438441
439442 SECTION (" Insert One Bypassing Validation" , " [collection::insert_one]" ) {
440- bulk_operation_insert->interpose ([&](mongoc_bulk_operation_t *, const bson_t * doc) {
441- bulk_operation_op_called = true ;
442- REQUIRE (bson_get_data (doc) == filter_doc.view ().data ());
443- });
443+ bulk_operation_insert_with_opts->interpose (
444+ [&](mongoc_bulk_operation_t *, const bson_t * doc, const bson_t *, bson_error_t *) {
445+ bulk_operation_op_called = true ;
446+ REQUIRE (bson_get_data (doc) == filter_doc.view ().data ());
447+ return true ;
448+ });
444449
445450 expect_set_bypass_document_validation_called = true ;
446451 SECTION (" ...set to false" ) {
@@ -452,13 +457,16 @@ TEST_CASE("Collection", "[collection]") {
452457 options::insert opts{};
453458 opts.bypass_document_validation (expected_bypass_document_validation);
454459 mongo_coll.insert_one (filter_doc.view (), opts);
460+ REQUIRE (bulk_operation_execute_called);
455461 }
456462
457463 SECTION (" Insert Many Ordered" , " [collection::insert_many]" ) {
458- bulk_operation_insert->interpose ([&](mongoc_bulk_operation_t *, const bson_t * doc) {
459- bulk_operation_op_called = true ;
460- REQUIRE (bson_get_data (doc) == filter_doc.view ().data ());
461- });
464+ bulk_operation_insert_with_opts->interpose (
465+ [&](mongoc_bulk_operation_t *, const bson_t * doc, const bson_t *, bson_error_t *) {
466+ bulk_operation_op_called = true ;
467+ REQUIRE (bson_get_data (doc) == filter_doc.view ().data ());
468+ return true ;
469+ });
462470
463471 // The interposed collection_create_bulk_operation_with_opts validates this setting.
464472 SECTION (" ...set to false" ) {
@@ -472,6 +480,7 @@ TEST_CASE("Collection", "[collection]") {
472480 std::vector<bsoncxx::document::view> docs{};
473481 docs.push_back (filter_doc.view ());
474482 mongo_coll.insert_many (docs, opts);
483+ REQUIRE (bulk_operation_execute_called);
475484 }
476485
477486 SECTION (" Update One" , " [collection::update_one]" ) {
@@ -530,6 +539,50 @@ TEST_CASE("Collection", "[collection]") {
530539 }
531540
532541 mongo_coll.update_one (filter_doc.view (), modification_doc.view (), options);
542+ REQUIRE (bulk_operation_execute_called);
543+ }
544+
545+ SECTION (" Insert One Error" , " [collection::insert_one]" ) {
546+ bulk_operation_insert_with_opts->interpose (
547+ [&](mongoc_bulk_operation_t *, const bson_t *, const bson_t *, bson_error_t * err) {
548+ bulk_operation_op_called = true ;
549+ bson_set_error (err, MONGOC_ERROR_BSON, MONGOC_ERROR_BSON_INVALID, " err" );
550+ return false ;
551+ });
552+
553+ REQUIRE_THROWS_AS (mongo_coll.insert_one (filter_doc.view ()), mongocxx::logic_error);
554+ REQUIRE (!bulk_operation_execute_called);
555+ }
556+
557+ SECTION (" Insert Many Error" , " [collection::insert_many]" ) {
558+ bulk_operation_insert_with_opts->interpose (
559+ [&](mongoc_bulk_operation_t *, const bson_t *, const bson_t *, bson_error_t * err) {
560+ bulk_operation_op_called = true ;
561+ bson_set_error (err, MONGOC_ERROR_BSON, MONGOC_ERROR_BSON_INVALID, " err" );
562+ return false ;
563+ });
564+
565+ std::vector<bsoncxx::document::view> docs{};
566+ docs.push_back (filter_doc.view ());
567+ expected_order_setting = true ;
568+ REQUIRE_THROWS_AS (mongo_coll.insert_many (docs), mongocxx::logic_error);
569+ REQUIRE (!bulk_operation_execute_called);
570+ }
571+
572+ SECTION (" Update One Error" , " [collection::update_one]" ) {
573+ bulk_operation_update_one_with_opts->interpose ([&](mongoc_bulk_operation_t *,
574+ const bson_t *,
575+ const bson_t *,
576+ const bson_t *,
577+ bson_error_t * err) {
578+ bulk_operation_op_called = true ;
579+ bson_set_error (err, MONGOC_ERROR_BSON, MONGOC_ERROR_BSON_INVALID, " err" );
580+ return false ;
581+ });
582+
583+ REQUIRE_THROWS_AS (mongo_coll.update_one (filter_doc.view (), modification_doc.view ()),
584+ mongocxx::logic_error);
585+ REQUIRE (!bulk_operation_execute_called);
533586 }
534587
535588 SECTION (" Update Many" , " [collection::update_many]" ) {
@@ -580,6 +633,23 @@ TEST_CASE("Collection", "[collection]") {
580633 }
581634
582635 mongo_coll.update_many (filter_doc.view (), modification_doc.view (), options);
636+ REQUIRE (bulk_operation_execute_called);
637+ }
638+
639+ SECTION (" Update Many Error" , " [collection::update_many]" ) {
640+ bulk_operation_update_many_with_opts->interpose ([&](mongoc_bulk_operation_t *,
641+ const bson_t *,
642+ const bson_t *,
643+ const bson_t *,
644+ bson_error_t * err) {
645+ bulk_operation_op_called = true ;
646+ bson_set_error (err, MONGOC_ERROR_BSON, MONGOC_ERROR_BSON_INVALID, " err" );
647+ return false ;
648+ });
649+
650+ REQUIRE_THROWS_AS (mongo_coll.update_many (filter_doc.view (), modification_doc.view ()),
651+ mongocxx::logic_error);
652+ REQUIRE (!bulk_operation_execute_called);
583653 }
584654
585655 SECTION (" Replace One" , " [collection::replace_one]" ) {
@@ -630,6 +700,23 @@ TEST_CASE("Collection", "[collection]") {
630700 }
631701
632702 mongo_coll.replace_one (filter_doc.view (), modification_doc.view (), options);
703+ REQUIRE (bulk_operation_execute_called);
704+ }
705+
706+ SECTION (" Replace One Error" , " [collection::update_one]" ) {
707+ bulk_operation_replace_one_with_opts->interpose ([&](mongoc_bulk_operation_t *,
708+ const bson_t *,
709+ const bson_t *,
710+ const bson_t *,
711+ bson_error_t * err) {
712+ bulk_operation_op_called = true ;
713+ bson_set_error (err, MONGOC_ERROR_BSON, MONGOC_ERROR_BSON_INVALID, " err" );
714+ return false ;
715+ });
716+
717+ REQUIRE_THROWS_AS (mongo_coll.replace_one (filter_doc.view (), modification_doc.view ()),
718+ mongocxx::logic_error);
719+ REQUIRE (!bulk_operation_execute_called);
633720 }
634721
635722 SECTION (" Delete One" , " [collection::delete_one]" ) {
@@ -641,6 +728,19 @@ TEST_CASE("Collection", "[collection]") {
641728 });
642729
643730 mongo_coll.delete_one (filter_doc.view ());
731+ REQUIRE (bulk_operation_execute_called);
732+ }
733+
734+ SECTION (" Delete One Error" , " [collection::delete_one]" ) {
735+ bulk_operation_remove_one_with_opts->interpose (
736+ [&](mongoc_bulk_operation_t *, const bson_t *, const bson_t *, bson_error_t * err) {
737+ bulk_operation_op_called = true ;
738+ bson_set_error (err, MONGOC_ERROR_BSON, MONGOC_ERROR_BSON_INVALID, " err" );
739+ return false ;
740+ });
741+
742+ REQUIRE_THROWS_AS (mongo_coll.delete_one (filter_doc.view ()), mongocxx::logic_error);
743+ REQUIRE (!bulk_operation_execute_called);
644744 }
645745
646746 SECTION (" Delete Many" , " [collection::delete_many]" ) {
@@ -652,13 +752,25 @@ TEST_CASE("Collection", "[collection]") {
652752 });
653753
654754 mongo_coll.delete_many (filter_doc.view ());
755+ REQUIRE (bulk_operation_execute_called);
756+ }
757+
758+ SECTION (" Delete Many Error" , " [collection::delete_one]" ) {
759+ bulk_operation_remove_many_with_opts->interpose (
760+ [&](mongoc_bulk_operation_t *, const bson_t *, const bson_t *, bson_error_t * err) {
761+ bulk_operation_op_called = true ;
762+ bson_set_error (err, MONGOC_ERROR_BSON, MONGOC_ERROR_BSON_INVALID, " err" );
763+ return false ;
764+ });
765+
766+ REQUIRE_THROWS_AS (mongo_coll.delete_many (filter_doc.view ()), mongocxx::logic_error);
767+ REQUIRE (!bulk_operation_execute_called);
655768 }
656769
657770 REQUIRE (collection_create_bulk_operation_called);
658771 REQUIRE (expect_set_bypass_document_validation_called ==
659772 bulk_operation_set_bypass_document_validation_called);
660773 REQUIRE (bulk_operation_op_called);
661- REQUIRE (bulk_operation_execute_called);
662774 REQUIRE (bulk_operation_destroy_called);
663775 }
664776}
0 commit comments