@@ -7015,6 +7015,53 @@ describe('Model', function() {
70157015 ) ;
70167016 } ) ;
70177017
7018+ it ( 'increments version key on successful save (gh-15800)' , async function ( ) {
7019+ // Arrange
7020+ const userSchema = new Schema ( {
7021+ name : [ String ] ,
7022+ email : { type : String , minLength : 3 }
7023+ } ) ;
7024+
7025+ const User = db . model ( 'User' , userSchema ) ;
7026+ const user1 = new User ( { name : [ '123' ] , email : '12314' } ) ;
7027+ await user1 . save ( ) ;
7028+
7029+ // Act
7030+ const user = await User . findOne ( { _id : user1 . _id } ) ;
7031+ assert . ok ( user ) ;
7032+
7033+ // Before, __v should be 0
7034+ assert . equal ( user . __v , 0 ) ;
7035+
7036+ // markModified on array field (triggers $set)
7037+ user . markModified ( 'name' ) ;
7038+ await User . bulkSave ( [ user ] ) ;
7039+
7040+ const dbUser1 = await User . findById ( user . _id ) ;
7041+ assert . equal ( dbUser1 . __v , 1 ) ;
7042+ assert . equal ( user . __v , 1 ) ;
7043+
7044+ // Update another path and markModified
7045+ user . email = '1375' ;
7046+ await User . bulkSave ( [ user ] ) ;
7047+ const dbUser2 = await User . findById ( user . _id ) ;
7048+ assert . equal ( dbUser2 . __v , 1 ) ;
7049+ assert . equal ( user . __v , 1 ) ;
7050+
7051+ let reloaded = await User . findById ( user . _id ) ;
7052+ assert . equal ( reloaded . __v , 1 ) ;
7053+
7054+ user . email = '1' ;
7055+ await assert . rejects (
7056+ ( ) => User . bulkSave ( [ user ] ) ,
7057+ / e m a i l .* i s s h o r t e r t h a n t h e m i n i m u m a l l o w e d l e n g t h /
7058+ ) ;
7059+ assert . equal ( user . __v , 1 ) ;
7060+
7061+ reloaded = await User . findById ( user . _id ) ;
7062+ assert . equal ( reloaded . __v , 1 ) ;
7063+ } ) ;
7064+
70187065 it ( 'saves new documents with ordered: false (gh-15495)' , async function ( ) {
70197066 const userSchema = new Schema ( {
70207067 name : { type : String }
0 commit comments