@@ -669,6 +669,69 @@ describe('ParseObject', () => {
669
669
} ) ;
670
670
} ) ;
671
671
672
+ it ( 'can set multiple nested fields (regression test for #1450)' , ( ) => {
673
+ const o = new ParseObject ( 'Person' ) ;
674
+ o . _finishFetch ( {
675
+ objectId : 'setNested2_1450' ,
676
+ objectField : {
677
+ number : 5 ,
678
+ letter : 'a' ,
679
+ nested : {
680
+ number : 0 ,
681
+ letter : 'b' ,
682
+ } ,
683
+ } ,
684
+ } ) ;
685
+
686
+ expect ( o . attributes ) . toEqual ( {
687
+ objectField : { number : 5 , letter : 'a' , nested : { number : 0 , letter : 'b' } } ,
688
+ } ) ;
689
+ o . set ( 'objectField.number' , 20 ) ;
690
+ o . set ( 'objectField.letter' , 'b' ) ;
691
+ o . set ( 'objectField.nested.number' , 1 ) ;
692
+ o . set ( 'objectField.nested.letter' , 'c' ) ;
693
+
694
+ expect ( o . attributes ) . toEqual ( {
695
+ objectField : { number : 20 , letter : 'b' , nested : { number : 1 , letter : 'c' } } ,
696
+ } ) ;
697
+ expect ( o . op ( 'objectField.number' ) instanceof SetOp ) . toBe ( true ) ;
698
+ expect ( o . dirtyKeys ( ) ) . toEqual ( [
699
+ 'objectField.number' ,
700
+ 'objectField.letter' ,
701
+ 'objectField.nested.number' ,
702
+ 'objectField.nested.letter' ,
703
+ 'objectField' ,
704
+ ] ) ;
705
+ expect ( o . _getSaveJSON ( ) ) . toEqual ( {
706
+ 'objectField.number' : 20 ,
707
+ 'objectField.letter' : 'b' ,
708
+ 'objectField.nested.number' : 1 ,
709
+ 'objectField.nested.letter' : 'c' ,
710
+ } ) ;
711
+
712
+ o . revert ( 'objectField.nested.number' ) ;
713
+ o . revert ( 'objectField.nested.letter' ) ;
714
+ expect ( o . _getSaveJSON ( ) ) . toEqual ( {
715
+ 'objectField.number' : 20 ,
716
+ 'objectField.letter' : 'b' ,
717
+ } ) ;
718
+ expect ( o . attributes ) . toEqual ( {
719
+ objectField : { number : 20 , letter : 'b' , nested : { number : 0 , letter : 'b' } } ,
720
+ } ) ;
721
+
722
+ // Also test setting new root fields using the dot notation
723
+ o . set ( 'objectField2.number' , 0 ) ;
724
+ expect ( o . _getSaveJSON ( ) ) . toEqual ( {
725
+ 'objectField.number' : 20 ,
726
+ 'objectField.letter' : 'b' ,
727
+ 'objectField2.number' : 0 ,
728
+ } ) ;
729
+ expect ( o . attributes ) . toEqual ( {
730
+ objectField : { number : 20 , letter : 'b' , nested : { number : 0 , letter : 'b' } } ,
731
+ objectField2 : { number : 0 } ,
732
+ } ) ;
733
+ } ) ;
734
+
672
735
it ( 'can increment a nested field' , ( ) => {
673
736
const o = new ParseObject ( 'Person' ) ;
674
737
o . _finishFetch ( {
0 commit comments