@@ -550,6 +550,84 @@ describe('ParseObject', () => {
550
550
expect ( o2 . attributes ) . toEqual ( { } ) ;
551
551
} ) ;
552
552
553
+ it ( 'can set sub property of a local changed object without creating an op' , ( ) => {
554
+ const o = new ParseObject ( 'Person' ) ;
555
+ o . set ( 'data' , { a : 2 } ) ;
556
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 1 ) ;
557
+
558
+ o . set ( 'datab' , { v : 2 } ) ;
559
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 2 ) ;
560
+
561
+ o . set ( 'data.b' , 3 ) ;
562
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 2 ) ;
563
+ expect ( o . _getPendingOps ( ) [ 0 ] [ 'data' ] . _value ) . toStrictEqual ( { a : 2 , b : 3 } ) ;
564
+
565
+ o . set ( { "data.c" : 5 , "data.d.a" : 4 } ) ;
566
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 2 ) ;
567
+ expect ( o . _getPendingOps ( ) [ 0 ] [ 'data' ] . _value ) . toStrictEqual ( { a : 2 , b : 3 , c : 5 , d : { a : 4 } } ) ;
568
+ } ) ;
569
+
570
+ it ( 'can unset sub property of a local changed object without creating an op' , ( ) => {
571
+ const o = new ParseObject ( 'Person' ) ;
572
+ o . set ( 'data' , { a : 2 , b : 4 } ) ;
573
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 1 ) ;
574
+
575
+ o . unset ( 'data.b' ) ;
576
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 1 ) ;
577
+ expect ( o . _getPendingOps ( ) [ 0 ] [ 'data' ] . _value ) . toStrictEqual ( { a : 2 } ) ;
578
+
579
+ o . unset ( 'data.c' ) ;
580
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 1 ) ;
581
+ expect ( o . _getPendingOps ( ) [ 0 ] [ 'data' ] . _value ) . toStrictEqual ( { a : 2 } ) ;
582
+
583
+ o . unset ( 'data.c.d' ) ;
584
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 1 ) ;
585
+ expect ( o . _getPendingOps ( ) [ 0 ] [ 'data' ] . _value ) . toStrictEqual ( { a : 2 } ) ;
586
+
587
+ o . set ( 'data.b.c' , 3 ) ;
588
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 1 ) ;
589
+ expect ( o . _getPendingOps ( ) [ 0 ] [ 'data' ] . _value ) . toStrictEqual ( { a : 2 , b : { c : 3 } } ) ;
590
+
591
+ o . unset ( 'data.b.c' ) ;
592
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 1 ) ;
593
+ expect ( o . _getPendingOps ( ) [ 0 ] [ 'data' ] . _value ) . toStrictEqual ( { a : 2 , b : { } } ) ;
594
+
595
+ o . unset ( 'data.b' ) ;
596
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 1 ) ;
597
+ expect ( o . _getPendingOps ( ) [ 0 ] [ 'data' ] . _value ) . toStrictEqual ( { a : 2 } ) ;
598
+ } ) ;
599
+
600
+ it ( 'can increment sub property of a local changed object without creating an op' , ( ) => {
601
+ const o = new ParseObject ( 'Person' ) ;
602
+ o . set ( 'data' , { a : 2 , b : 4 } ) ;
603
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 1 ) ;
604
+
605
+ o . increment ( 'data.a' , 3 ) ;
606
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 1 ) ;
607
+ expect ( o . _getPendingOps ( ) [ 0 ] [ 'data' ] . _value ) . toStrictEqual ( { a : 5 , b : 4 } ) ;
608
+ } ) ;
609
+
610
+ it ( 'collapse sub-property sets with parents as well' , ( ) => {
611
+ const o = new ParseObject ( 'Person' ) ;
612
+ o . _finishFetch ( {
613
+ objectId : 'o12312' ,
614
+ data : { a : 3 }
615
+ } ) ;
616
+ expect ( o . dirty ( ) ) . toBe ( false ) ;
617
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 0 ) ;
618
+
619
+ o . set ( 'data.b' , { c : 1 } ) ;
620
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 1 ) ;
621
+
622
+ o . set ( 'data.boo' , 4 ) ;
623
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 2 ) ;
624
+ expect ( o . _getPendingOps ( ) [ 0 ] [ 'data.boo' ] . _value ) . toStrictEqual ( 4 ) ;
625
+
626
+ o . set ( 'data.b.c' , 2 ) ;
627
+ expect ( Object . keys ( o . _getPendingOps ( ) [ 0 ] ) . length ) . toBe ( 2 ) ;
628
+ expect ( o . _getPendingOps ( ) [ 0 ] [ 'data.b' ] . _value ) . toStrictEqual ( { c : 2 } ) ;
629
+ } ) ;
630
+
553
631
it ( 'can clear all fields' , ( ) => {
554
632
const o = new ParseObject ( 'Person' ) ;
555
633
o . _finishFetch ( {
0 commit comments