@@ -146,6 +146,43 @@ describe.onServer('Remote Methods', function() {
146146 } ) ;
147147 } ) ;
148148
149+ describe ( 'Model.upsertWithWhere(where, data, callback)' , function ( ) {
150+ it ( 'Updates when a Model instance is retreived from data source' , function ( done ) {
151+ var taskEmitter = new TaskEmitter ( ) ;
152+ taskEmitter
153+ . task ( User , 'create' , { first : 'jill' , second : 'pill' } )
154+ . task ( User , 'create' , { first : 'bob' , second : 'sob' } )
155+ . on ( 'done' , function ( ) {
156+ User . upsertWithWhere ( { second : 'pill' } , { second : 'jones' } , function ( err , user ) {
157+ if ( err ) return done ( err ) ;
158+ var id = user . id ;
159+ User . findById ( id , function ( err , user ) {
160+ if ( err ) return done ( err ) ;
161+ assert . equal ( user . second , 'jones' ) ;
162+ done ( ) ;
163+ } ) ;
164+ } ) ;
165+ } ) ;
166+ } ) ;
167+
168+ it ( 'Creates when no Model instance is retreived from data source' , function ( done ) {
169+ var taskEmitter = new TaskEmitter ( ) ;
170+ taskEmitter
171+ . task ( User , 'create' , { first : 'simon' , second : 'somers' } )
172+ . on ( 'done' , function ( ) {
173+ User . upsertWithWhere ( { first : 'somers' } , { first : 'Simon' } , function ( err , user ) {
174+ if ( err ) return done ( err ) ;
175+ var id = user . id ;
176+ User . findById ( id , function ( err , user ) {
177+ if ( err ) return done ( err ) ;
178+ assert . equal ( user . first , 'Simon' ) ;
179+ done ( ) ;
180+ } ) ;
181+ } ) ;
182+ } ) ;
183+ } ) ;
184+ } ) ;
185+
149186 describe ( 'Example Remote Method' , function ( ) {
150187 it ( 'Call the method using HTTP / REST' , function ( done ) {
151188 request ( app )
@@ -515,6 +552,7 @@ describe.onServer('Remote Methods', function() {
515552 describe ( 'Model.checkAccessTypeForMethod(remoteMethod)' , function ( ) {
516553 shouldReturn ( 'create' , ACL . WRITE ) ;
517554 shouldReturn ( 'updateOrCreate' , ACL . WRITE ) ;
555+ shouldReturn ( 'upsertWithWhere' , ACL . WRITE ) ;
518556 shouldReturn ( 'upsert' , ACL . WRITE ) ;
519557 shouldReturn ( 'exists' , ACL . READ ) ;
520558 shouldReturn ( 'findById' , ACL . READ ) ;
@@ -634,6 +672,7 @@ describe.onServer('Remote Methods', function() {
634672 // 'destroyAll', 'deleteAll', 'remove',
635673 'create' ,
636674 'upsert' , 'updateOrCreate' , 'patchOrCreate' ,
675+ 'upsertWithWhere' , 'patchOrCreateWithWhere' ,
637676 'exists' ,
638677 'findById' ,
639678 'replaceById' ,
0 commit comments