@@ -4062,7 +4062,32 @@ describe('Model', function() {
40624062 assert . ok ( doc . createdAt . valueOf ( ) >= now . valueOf ( ) ) ;
40634063 assert . ok ( doc . updatedAt ) ;
40644064 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+ ] ;
40654083
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' ) ;
40664091 } ) ;
40674092
40684093 it ( 'with child timestamps and array filters (gh-7032)' , async function ( ) {
@@ -6602,14 +6627,14 @@ describe('Model', function() {
66026627 } ) ;
66036628
66046629 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 ( ) {
66066631 const userSchema = new Schema ( {
66076632 age : { type : Number }
66086633 } ) ;
66096634
66106635 const User = db . model ( 'User' , userSchema ) ;
66116636
6612- const err = await User . insertMany ( [
6637+ let err = await User . insertMany ( [
66136638 new User ( { age : 12 } ) ,
66146639 new User ( { age : 12 } ) ,
66156640 new User ( { age : 'NaN' } )
@@ -6623,7 +6648,20 @@ describe('Model', function() {
66236648 assert . ok ( err . results [ 2 ] instanceof Error ) ;
66246649 assert . equal ( err . results [ 2 ] . errors [ 'age' ] . name , 'CastError' ) ;
66256650
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 ( ) ;
66276665 assert . deepStrictEqual ( docs . map ( doc => doc . age ) , [ 12 , 12 ] ) ;
66286666 } ) ;
66296667
0 commit comments