@@ -4062,7 +4062,32 @@ describe('Model', function() {
4062
4062
assert . ok ( doc . createdAt . valueOf ( ) >= now . valueOf ( ) ) ;
4063
4063
assert . ok ( doc . updatedAt ) ;
4064
4064
assert . ok ( doc . updatedAt . valueOf ( ) >= now . valueOf ( ) ) ;
4065
+ } ) ;
4066
+
4067
+ it ( 'throwOnValidationError (gh-14572)' , async function ( ) {
4068
+ const schema = new Schema ( {
4069
+ num : Number
4070
+ } ) ;
4071
+
4072
+ const M = db . model ( 'Test' , schema ) ;
4073
+
4074
+ const ops = [
4075
+ {
4076
+ insertOne : {
4077
+ document : {
4078
+ num : 'not a number'
4079
+ }
4080
+ }
4081
+ }
4082
+ ] ;
4065
4083
4084
+ const err = await M . bulkWrite (
4085
+ ops ,
4086
+ { ordered : false , throwOnValidationError : true }
4087
+ ) . then ( ( ) => null , err => err ) ;
4088
+ assert . ok ( err ) ;
4089
+ assert . equal ( err . name , 'MongooseBulkWriteError' ) ;
4090
+ assert . equal ( err . validationErrors [ 0 ] . errors [ 'num' ] . name , 'CastError' ) ;
4066
4091
} ) ;
4067
4092
4068
4093
it ( 'with child timestamps and array filters (gh-7032)' , async function ( ) {
@@ -6602,14 +6627,14 @@ describe('Model', function() {
6602
6627
} ) ;
6603
6628
6604
6629
it ( 'insertMany should throw an error if there were operations that failed validation, ' +
6605
- 'but all operations that passed validation succeeded (gh-13256)' , async function ( ) {
6630
+ 'but all operations that passed validation succeeded (gh-14572) (gh- 13256)' , async function ( ) {
6606
6631
const userSchema = new Schema ( {
6607
6632
age : { type : Number }
6608
6633
} ) ;
6609
6634
6610
6635
const User = db . model ( 'User' , userSchema ) ;
6611
6636
6612
- const err = await User . insertMany ( [
6637
+ let err = await User . insertMany ( [
6613
6638
new User ( { age : 12 } ) ,
6614
6639
new User ( { age : 12 } ) ,
6615
6640
new User ( { age : 'NaN' } )
@@ -6623,7 +6648,20 @@ describe('Model', function() {
6623
6648
assert . ok ( err . results [ 2 ] instanceof Error ) ;
6624
6649
assert . equal ( err . results [ 2 ] . errors [ 'age' ] . name , 'CastError' ) ;
6625
6650
6626
- const docs = await User . find ( ) ;
6651
+ let docs = await User . find ( ) ;
6652
+ assert . deepStrictEqual ( docs . map ( doc => doc . age ) , [ 12 , 12 ] ) ;
6653
+
6654
+ err = await User . insertMany ( [
6655
+ new User ( { age : 'NaN' } )
6656
+ ] , { ordered : false , throwOnValidationError : true } )
6657
+ . then ( ( ) => null )
6658
+ . catch ( err => err ) ;
6659
+
6660
+ assert . ok ( err ) ;
6661
+ assert . equal ( err . name , 'MongooseBulkWriteError' ) ;
6662
+ assert . equal ( err . validationErrors [ 0 ] . errors [ 'age' ] . name , 'CastError' ) ;
6663
+
6664
+ docs = await User . find ( ) ;
6627
6665
assert . deepStrictEqual ( docs . map ( doc => doc . age ) , [ 12 , 12 ] ) ;
6628
6666
} ) ;
6629
6667
0 commit comments