@@ -126,10 +126,11 @@ describe('zod-nesjs create-zod-dto', () => {
126
126
const metadataFactory = getMetadataFactory ( schema ) ;
127
127
128
128
const generatedSchema = metadataFactory ( ) ;
129
- const personName = generatedSchema ?. person . properties ?. name as SchemaObject30
130
- const tags = generatedSchema ?. person . properties ?. tags as SchemaObject30
131
- const tagsItems = tags . items as SchemaObject30
132
- const tagName = tagsItems . properties ?. name as SchemaObject30
129
+ const personName = generatedSchema ?. person . properties
130
+ ?. name as SchemaObject30 ;
131
+ const tags = generatedSchema ?. person . properties ?. tags as SchemaObject30 ;
132
+ const tagsItems = tags . items as SchemaObject30 ;
133
+ const tagName = tagsItems . properties ?. name as SchemaObject30 ;
133
134
134
135
expect ( generatedSchema ) . toBeDefined ( ) ;
135
136
expect ( personName . type ) . toEqual ( 'string' ) ;
@@ -150,6 +151,62 @@ describe('zod-nesjs create-zod-dto', () => {
150
151
expect ( generatedSchema ?. name . type ) . toEqual ( 'string' ) ;
151
152
expect ( generatedSchema ?. name . nullable ) . toBe ( true ) ;
152
153
} ) ;
154
+
155
+ it ( 'should correct work with optional fields and make required fields false' , ( ) => {
156
+ const schema = z . object ( {
157
+ pagination : z
158
+ . object ( {
159
+ limit : z . number ( ) ,
160
+ offset : z . number ( ) ,
161
+ } )
162
+ . optional ( ) ,
163
+ filter : z
164
+ . object ( {
165
+ category : z . string ( ) . uuid ( ) ,
166
+ userId : z . string ( ) . uuid ( ) ,
167
+ } )
168
+ . optional ( ) ,
169
+ sort : z
170
+ . object ( {
171
+ field : z . string ( ) ,
172
+ order : z . string ( ) ,
173
+ } )
174
+ . optional ( ) ,
175
+ } ) ;
176
+ const metadataFactory = getMetadataFactory ( schema ) ;
177
+
178
+ const generatedSchema = metadataFactory ( ) ;
179
+ expect ( generatedSchema ?. pagination . required ) . toEqual ( false ) ;
180
+ expect ( generatedSchema ?. sort . required ) . toEqual ( false ) ;
181
+ expect ( generatedSchema ?. filter . required ) . toEqual ( false ) ;
182
+ } ) ;
183
+
184
+ it ( 'should correct work with optional fields and make required field true and optional field false' , ( ) => {
185
+ const schema = z . object ( {
186
+ pagination : z
187
+ . object ( {
188
+ limit : z . number ( ) ,
189
+ offset : z . number ( ) ,
190
+ } )
191
+ . optional ( ) ,
192
+ filter : z
193
+ . object ( {
194
+ category : z . string ( ) . uuid ( ) ,
195
+ userId : z . string ( ) . uuid ( ) ,
196
+ } )
197
+ . optional ( ) ,
198
+ sort : z . object ( {
199
+ field : z . string ( ) ,
200
+ order : z . string ( ) ,
201
+ } ) ,
202
+ } ) ;
203
+ const metadataFactory = getMetadataFactory ( schema ) ;
204
+
205
+ const generatedSchema = metadataFactory ( ) ;
206
+ expect ( generatedSchema ?. pagination . required ) . toEqual ( false ) ;
207
+ expect ( generatedSchema ?. sort . required ) . toEqual ( true ) ;
208
+ expect ( generatedSchema ?. filter . required ) . toEqual ( false ) ;
209
+ } ) ;
153
210
} ) ;
154
211
155
212
function getMetadataFactory ( zodRef : OpenApiZodAny ) {
0 commit comments