@@ -635,6 +635,73 @@ describe('Joi', () => {
635
635
Helper . validate ( schema , { stripUnknown : { arrays : false , objects : true } , allowUnknown : true } , [ [ obj , true , { a : 1 , b : 'a' } ] ] ) ;
636
636
} ) ;
637
637
638
+ it ( 'validates enforces local behavior of unknown(true) when stripUnknown is set' , ( ) => {
639
+
640
+ const schema = Joi . object ( {
641
+ a : Joi . number ( ) . min ( 0 ) . max ( 3 ) ,
642
+ loosyObject : Joi . object ( {
643
+ b1 : Joi . string ( )
644
+ } ) . unknown ( true ) , // allows extra keys
645
+ anotherLoosyObject : Joi . object ( {
646
+ c1 : Joi . string ( )
647
+ } ) . unknown ( ) // also allows extra keys
648
+ } ) ;
649
+
650
+ const obj = {
651
+ a : 1 ,
652
+ loosyObject : {
653
+ b1 : 'c1' ,
654
+ b2 : 'c2'
655
+ } ,
656
+ anotherLoosyObject : {
657
+ c1 : 'c1' ,
658
+ c2 : 'c2'
659
+ }
660
+ } ;
661
+
662
+ Helper . validate ( schema , { stripUnknown : true } , [ [ obj , true , {
663
+ a : 1 ,
664
+ loosyObject : {
665
+ b1 : 'c1' ,
666
+ b2 : 'c2'
667
+ } ,
668
+ anotherLoosyObject : {
669
+ c1 : 'c1' ,
670
+ c2 : 'c2'
671
+ }
672
+ } ] ] ) ;
673
+ } ) ;
674
+
675
+ it ( 'validates enforces local behavior of unknown(false) when stripUnknown is set' , ( ) => {
676
+
677
+ const schema = Joi . object ( {
678
+ a : Joi . number ( ) . min ( 0 ) . max ( 3 ) ,
679
+ strictObject : Joi . object ( {
680
+ b1 : Joi . string ( )
681
+ } ) . unknown ( false ) // it shouldn't allow extra keys
682
+ } ) ;
683
+
684
+ const obj = {
685
+ a : 1 ,
686
+ strictObject : {
687
+ b1 : 'b1' ,
688
+ b2 : 'b2'
689
+ }
690
+ } ;
691
+
692
+ Helper . validate ( schema , { stripUnknown : true } , [ [ obj , false , {
693
+ message : '"strictObject.b2" is not allowed' ,
694
+ path : [ 'strictObject' , 'b2' ] ,
695
+ type : 'object.unknown' ,
696
+ context : {
697
+ child : 'b2' ,
698
+ label : 'strictObject.b2' ,
699
+ key : 'b2' ,
700
+ value : 'b2'
701
+ }
702
+ } ] ] ) ;
703
+ } ) ;
704
+
638
705
it ( 'validates dependencies when stripUnknown is set' , ( ) => {
639
706
640
707
const schema = Joi . object ( {
0 commit comments