@@ -229,6 +229,181 @@ describe('Parse Object', () => {
229
229
} ) ;
230
230
} ) ;
231
231
232
+ it ( 'can increment nested fields' , async ( ) => {
233
+ const obj = new TestObject ( ) ;
234
+ obj . set ( 'objectField' , { number : 5 } ) ;
235
+ assert . equal ( obj . get ( 'objectField' ) . number , 5 ) ;
236
+ await obj . save ( ) ;
237
+
238
+ obj . increment ( 'objectField.number' , 15 ) ;
239
+ assert . equal ( obj . get ( 'objectField' ) . number , 20 ) ;
240
+ await obj . save ( ) ;
241
+
242
+ assert . equal ( obj . get ( 'objectField' ) . number , 20 ) ;
243
+
244
+ const query = new Parse . Query ( TestObject ) ;
245
+ const result = await query . get ( obj . id ) ;
246
+ assert . equal ( result . get ( 'objectField' ) . number , 20 ) ;
247
+ } ) ;
248
+
249
+ it ( 'can increment non existing field' , async ( ) => {
250
+ const obj = new TestObject ( ) ;
251
+ obj . set ( 'objectField' , { number : 5 } ) ;
252
+ await obj . save ( ) ;
253
+
254
+ obj . increment ( 'objectField.unknown' , 15 ) ;
255
+ assert . deepEqual ( obj . get ( 'objectField' ) , {
256
+ number : 5 ,
257
+ unknown : 15 ,
258
+ } ) ;
259
+ await obj . save ( ) ;
260
+
261
+ const query = new Parse . Query ( TestObject ) ;
262
+ const result = await query . get ( obj . id ) ;
263
+ assert . equal ( result . get ( 'objectField' ) . number , 5 ) ;
264
+ assert . equal ( result . get ( 'objectField' ) . unknown , 15 ) ;
265
+ } ) ;
266
+
267
+ it ( 'can increment nested fields two levels' , async ( ) => {
268
+ const obj = new TestObject ( ) ;
269
+ obj . set ( 'objectField' , { foo : { bar : 5 } } ) ;
270
+ assert . equal ( obj . get ( 'objectField' ) . foo . bar , 5 ) ;
271
+ await obj . save ( ) ;
272
+
273
+ obj . increment ( 'objectField.foo.bar' , 15 ) ;
274
+ assert . equal ( obj . get ( 'objectField' ) . foo . bar , 20 ) ;
275
+ await obj . save ( ) ;
276
+
277
+ assert . equal ( obj . get ( 'objectField' ) . foo . bar , 20 ) ;
278
+
279
+ const query = new Parse . Query ( TestObject ) ;
280
+ const result = await query . get ( obj . id ) ;
281
+ assert . equal ( result . get ( 'objectField' ) . foo . bar , 20 ) ;
282
+ } ) ;
283
+
284
+ it ( 'can increment nested fields without object' , async ( ) => {
285
+ const obj = new TestObject ( ) ;
286
+ obj . set ( 'hello' , 'world' ) ;
287
+ await obj . save ( ) ;
288
+
289
+ obj . increment ( 'hello.dot' , 15 ) ;
290
+ try {
291
+ await obj . save ( ) ;
292
+ assert . equal ( false , true ) ;
293
+ } catch ( error ) {
294
+ assert . equal ( error . message , "Cannot create property 'dot' on string 'world'" ) ;
295
+ }
296
+ } ) ;
297
+
298
+ it ( 'can set nested fields' , async ( ) => {
299
+ const obj = new TestObject ( { objectField : { number : 5 } } ) ;
300
+ assert . equal ( obj . get ( 'objectField' ) . number , 5 ) ;
301
+ await obj . save ( ) ;
302
+
303
+ assert . equal ( obj . get ( 'objectField' ) . number , 5 ) ;
304
+ obj . set ( 'objectField.number' , 20 ) ;
305
+ assert . equal ( obj . get ( 'objectField' ) . number , 20 ) ;
306
+ await obj . save ( ) ;
307
+
308
+ const query = new Parse . Query ( TestObject ) ;
309
+ const result = await query . get ( obj . id ) ;
310
+ assert . equal ( result . get ( 'objectField' ) . number , 20 ) ;
311
+ } ) ;
312
+
313
+ it ( 'can set non existing fields' , async ( ) => {
314
+ const obj = new TestObject ( ) ;
315
+ obj . set ( 'objectField' , { number : 5 } ) ;
316
+ await obj . save ( ) ;
317
+
318
+ obj . set ( 'objectField.unknown' , 20 ) ;
319
+ await obj . save ( ) ;
320
+ const query = new Parse . Query ( TestObject ) ;
321
+ const result = await query . get ( obj . id ) ;
322
+ assert . equal ( result . get ( 'objectField' ) . number , 5 ) ;
323
+ assert . equal ( result . get ( 'objectField' ) . unknown , 20 ) ;
324
+ } ) ;
325
+
326
+ it ( 'ignore set nested fields on new object' , async ( ) => {
327
+ const obj = new TestObject ( ) ;
328
+ obj . set ( 'objectField.number' , 5 ) ;
329
+ assert . deepEqual ( obj . _getPendingOps ( ) [ 0 ] , { } ) ;
330
+ assert . equal ( obj . get ( 'objectField' ) , undefined ) ;
331
+
332
+ await obj . save ( ) ;
333
+ assert . equal ( obj . get ( 'objectField' ) , undefined ) ;
334
+ } ) ;
335
+
336
+ it ( 'can set nested fields two levels' , async ( ) => {
337
+ const obj = new TestObject ( { objectField : { foo : { bar : 5 } } } ) ;
338
+ assert . equal ( obj . get ( 'objectField' ) . foo . bar , 5 ) ;
339
+ await obj . save ( ) ;
340
+
341
+ assert . equal ( obj . get ( 'objectField' ) . foo . bar , 5 ) ;
342
+ obj . set ( 'objectField.foo.bar' , 20 ) ;
343
+ assert . equal ( obj . get ( 'objectField' ) . foo . bar , 20 ) ;
344
+ await obj . save ( ) ;
345
+
346
+ const query = new Parse . Query ( TestObject ) ;
347
+ const result = await query . get ( obj . id ) ;
348
+ assert . equal ( result . get ( 'objectField' ) . foo . bar , 20 ) ;
349
+ } ) ;
350
+
351
+ it ( 'can unset nested fields' , async ( ) => {
352
+ const obj = new TestObject ( {
353
+ objectField : {
354
+ number : 5 ,
355
+ string : 'hello' ,
356
+ }
357
+ } ) ;
358
+ await obj . save ( ) ;
359
+
360
+ obj . unset ( 'objectField.number' ) ;
361
+ assert . equal ( obj . get ( 'objectField' ) . number , undefined ) ;
362
+ assert . equal ( obj . get ( 'objectField' ) . string , 'hello' ) ;
363
+ await obj . save ( ) ;
364
+
365
+ const query = new Parse . Query ( TestObject ) ;
366
+ const result = await query . get ( obj . id ) ;
367
+ assert . equal ( result . get ( 'objectField' ) . number , undefined ) ;
368
+ assert . equal ( result . get ( 'objectField' ) . string , 'hello' ) ;
369
+ } ) ;
370
+
371
+ it ( 'can unset nested fields two levels' , async ( ) => {
372
+ const obj = new TestObject ( {
373
+ objectField : {
374
+ foo : {
375
+ bar : 5 ,
376
+ } ,
377
+ string : 'hello' ,
378
+ }
379
+ } ) ;
380
+ await obj . save ( ) ;
381
+
382
+ obj . unset ( 'objectField.foo.bar' ) ;
383
+ assert . equal ( obj . get ( 'objectField' ) . foo . bar , undefined ) ;
384
+ assert . equal ( obj . get ( 'objectField' ) . string , 'hello' ) ;
385
+ await obj . save ( ) ;
386
+
387
+ const query = new Parse . Query ( TestObject ) ;
388
+ const result = await query . get ( obj . id ) ;
389
+ assert . equal ( result . get ( 'objectField' ) . foo . bar , undefined ) ;
390
+ assert . equal ( result . get ( 'objectField' ) . string , 'hello' ) ;
391
+ } ) ;
392
+
393
+ it ( 'can unset non existing fields' , async ( ) => {
394
+ const obj = new TestObject ( ) ;
395
+ obj . set ( 'objectField' , { number : 5 } ) ;
396
+ await obj . save ( ) ;
397
+
398
+ obj . unset ( 'objectField.unknown' ) ;
399
+ await obj . save ( ) ;
400
+
401
+ const query = new Parse . Query ( TestObject ) ;
402
+ const result = await query . get ( obj . id ) ;
403
+ assert . equal ( result . get ( 'objectField' ) . number , 5 ) ;
404
+ assert . equal ( result . get ( 'objectField' ) . unknown , undefined ) ;
405
+ } ) ;
406
+
232
407
it ( 'can set keys to null' , ( done ) => {
233
408
const obj = new TestObject ( ) ;
234
409
obj . set ( 'foo' , null ) ;
0 commit comments