@@ -480,4 +480,58 @@ describe('formReducer() (V1)', () => {
480
480
}
481
481
} ) ;
482
482
} ) ) ;
483
+
484
+ describe ( 'valid state of parent forms' , ( ) => {
485
+ const reducer = formReducer ( 'test' , {
486
+ foo : 'foo' ,
487
+ meta : {
488
+ bar : 'deep' ,
489
+ } ,
490
+ } ) ;
491
+
492
+ const invalidFoo = reducer ( undefined ,
493
+ actions . setValidity ( 'test.foo' , false ) ) ;
494
+
495
+ it ( 'parent form should be invalid if child is invalid' , ( ) => {
496
+ assert . isFalse ( invalidFoo . $form . valid ) ;
497
+ assert . isFalse ( invalidFoo . foo . valid ) ;
498
+ } ) ;
499
+
500
+ const invalidFooBar = reducer ( invalidFoo ,
501
+ actions . setValidity ( 'test.meta.bar' , false ) ) ;
502
+
503
+ it ( 'parent form should remain invalid if grandchild is invalid' , ( ) => {
504
+ assert . isFalse ( invalidFooBar . $form . valid ) ;
505
+ assert . isFalse ( invalidFooBar . foo . valid ) ;
506
+ assert . isFalse ( invalidFooBar . meta . bar . valid ) ;
507
+ } ) ;
508
+
509
+ const focusedNewField = reducer ( invalidFooBar ,
510
+ actions . focus ( 'test.meta.new' , true ) ) ;
511
+
512
+ it ( 'parent form should remain invalid if new field dynamically added' , ( ) => {
513
+ assert . isFalse ( focusedNewField . $form . valid ) ;
514
+ assert . isFalse ( focusedNewField . foo . valid ) ;
515
+ assert . isFalse ( focusedNewField . meta . bar . valid ) ;
516
+ assert . isTrue ( focusedNewField . meta . new . valid ) ;
517
+ } ) ;
518
+
519
+ const invalidFooValidBar = reducer ( focusedNewField ,
520
+ actions . setValidity ( 'test.meta.bar' , true ) ) ;
521
+
522
+ it ( 'parent form should remain invalid if only grandchild is valid' , ( ) => {
523
+ assert . isFalse ( invalidFooValidBar . $form . valid ) ;
524
+ assert . isFalse ( invalidFooValidBar . foo . valid ) ;
525
+ assert . isTrue ( invalidFooValidBar . meta . bar . valid ) ;
526
+ } ) ;
527
+
528
+ const validFooValidBar = reducer ( invalidFooValidBar ,
529
+ actions . setValidity ( 'test.foo' , true ) ) ;
530
+
531
+ it ( 'parent form should be valid if all descendants are valid' , ( ) => {
532
+ assert . isTrue ( validFooValidBar . $form . valid ) ;
533
+ assert . isTrue ( validFooValidBar . foo . valid ) ;
534
+ assert . isTrue ( validFooValidBar . meta . bar . valid ) ;
535
+ } ) ;
536
+ } ) ;
483
537
} ) ;
0 commit comments