@@ -2,7 +2,6 @@ import "es6-shim";
22import { Contains , IsDefined , MinLength , ValidateNested } from "../../src/decorator/decorators" ;
33import { Validator } from "../../src/validation/Validator" ;
44import { expect } from "chai" ;
5- import { inspect } from "util" ;
65import { ValidationTypes } from "../../src/validation/ValidationTypes" ;
76
87import { should , use } from "chai" ;
@@ -67,6 +66,12 @@ describe("nested validation", function () {
6766
6867 @ValidateNested ( )
6968 mySubClasses : MySubClass [ ] ;
69+
70+ @ValidateNested ( )
71+ mySubSubClasses : MySubClass [ ] [ ] ;
72+
73+ @ValidateNested ( )
74+ mySubSubSubClasses : MySubClass [ ] [ ] [ ] ;
7075 }
7176
7277 const model = new MyClass ( ) ;
@@ -76,8 +81,13 @@ describe("nested validation", function () {
7681 model . mySubClasses = [ new MySubClass ( ) , new MySubClass ( ) ] ;
7782 model . mySubClasses [ 0 ] . name = "my" ;
7883 model . mySubClasses [ 1 ] . name = "not-short" ;
84+ model . mySubSubClasses = [ [ new MySubClass ( ) ] ] ;
85+ model . mySubSubClasses [ 0 ] [ 0 ] . name = "sub" ;
86+ model . mySubSubSubClasses = [ [ [ new MySubClass ( ) ] ] ] ;
87+ model . mySubSubSubClasses [ 0 ] [ 0 ] [ 0 ] . name = "sub" ;
88+
7989 return validator . validate ( model ) . then ( errors => {
80- errors . length . should . be . equal ( 3 ) ;
90+ errors . length . should . be . equal ( 5 ) ;
8191
8292 errors [ 0 ] . target . should . be . equal ( model ) ;
8393 errors [ 0 ] . property . should . be . equal ( "title" ) ;
@@ -107,6 +117,47 @@ describe("nested validation", function () {
107117 subSubError . property . should . be . equal ( "name" ) ;
108118 subSubError . constraints . should . be . eql ( { minLength : "name must be longer than or equal to 5 characters" } ) ;
109119 subSubError . value . should . be . equal ( "my" ) ;
120+
121+ errors [ 3 ] . target . should . be . equal ( model ) ;
122+ errors [ 3 ] . property . should . be . equal ( "mySubSubClasses" ) ;
123+ errors [ 3 ] . value . should . be . equal ( model . mySubSubClasses ) ;
124+ expect ( errors [ 3 ] . constraints ) . to . be . undefined ;
125+ const subError3 = errors [ 3 ] . children [ 0 ] ;
126+ subError3 . target . should . be . equal ( model . mySubSubClasses ) ;
127+ subError3 . value . should . be . equal ( model . mySubSubClasses [ 0 ] ) ;
128+ subError3 . property . should . be . equal ( "0" ) ;
129+ const subSubError3 = subError3 . children [ 0 ] ;
130+ subSubError3 . target . should . be . equal ( model . mySubSubClasses [ 0 ] ) ;
131+ subSubError3 . value . should . be . equal ( model . mySubSubClasses [ 0 ] [ 0 ] ) ;
132+ subSubError3 . property . should . be . equal ( "0" ) ;
133+ const subSubSubError3 = subSubError3 . children [ 0 ] ;
134+ subSubSubError3 . target . should . be . equal ( model . mySubSubClasses [ 0 ] [ 0 ] ) ;
135+ subSubSubError3 . property . should . be . equal ( "name" ) ;
136+ subSubSubError3 . constraints . should . be . eql ( { minLength : "name must be longer than or equal to 5 characters" } ) ;
137+ subSubSubError3 . value . should . be . equal ( "sub" ) ;
138+
139+
140+ errors [ 4 ] . target . should . be . equal ( model ) ;
141+ errors [ 4 ] . property . should . be . equal ( "mySubSubSubClasses" ) ;
142+ errors [ 4 ] . value . should . be . equal ( model . mySubSubSubClasses ) ;
143+ expect ( errors [ 4 ] . constraints ) . to . be . undefined ;
144+ const subError4 = errors [ 4 ] . children [ 0 ] ;
145+ subError4 . target . should . be . equal ( model . mySubSubSubClasses ) ;
146+ subError4 . value . should . be . equal ( model . mySubSubSubClasses [ 0 ] ) ;
147+ subError4 . property . should . be . equal ( "0" ) ;
148+ const subSubError4 = subError4 . children [ 0 ] ;
149+ subSubError4 . target . should . be . equal ( model . mySubSubSubClasses [ 0 ] ) ;
150+ subSubError4 . value . should . be . equal ( model . mySubSubSubClasses [ 0 ] [ 0 ] ) ;
151+ subSubError4 . property . should . be . equal ( "0" ) ;
152+ const subSubSubError4 = subSubError4 . children [ 0 ] ;
153+ subSubSubError4 . target . should . be . equal ( model . mySubSubSubClasses [ 0 ] [ 0 ] ) ;
154+ subSubSubError4 . value . should . be . equal ( model . mySubSubSubClasses [ 0 ] [ 0 ] [ 0 ] ) ;
155+ subSubSubError4 . property . should . be . equal ( "0" ) ;
156+ const subSubSubSubError4 = subSubSubError4 . children [ 0 ] ;
157+ subSubSubSubError4 . target . should . be . equal ( model . mySubSubSubClasses [ 0 ] [ 0 ] [ 0 ] ) ;
158+ subSubSubSubError4 . property . should . be . equal ( "name" ) ;
159+ subSubSubSubError4 . constraints . should . be . eql ( { minLength : "name must be longer than or equal to 5 characters" } ) ;
160+ subSubSubSubError4 . value . should . be . equal ( "sub" ) ;
110161 } ) ;
111162 } ) ;
112163
0 commit comments