@@ -184,3 +184,200 @@ test('object with nested allOfs', (t) => {
184
184
t . fail ( )
185
185
}
186
186
} )
187
+
188
+ test ( 'object with $ref in allOf' , ( t ) => {
189
+ t . plan ( 1 )
190
+
191
+ const schema = {
192
+ title : 'object with $ref in allOf' ,
193
+ type : 'object' ,
194
+ definitions : {
195
+ id1 : {
196
+ type : 'object' ,
197
+ properties : {
198
+ id1 : {
199
+ type : 'integer'
200
+ }
201
+ }
202
+ }
203
+ } ,
204
+ allOf : [
205
+ {
206
+ $ref : '#/definitions/id1'
207
+ }
208
+ ]
209
+ }
210
+
211
+ try {
212
+ const stringify = build ( schema )
213
+ try {
214
+ const value = stringify ( {
215
+ id1 : 1 ,
216
+ id2 : 2 // extra prop shouldn't be in result
217
+ } )
218
+ t . is ( value , '{"id1":1}' )
219
+ } catch ( e ) {
220
+ t . fail ( )
221
+ }
222
+ } catch ( e ) {
223
+ t . fail ( )
224
+ }
225
+ } )
226
+
227
+ test ( 'object with $ref and other object in allOf' , ( t ) => {
228
+ t . plan ( 1 )
229
+
230
+ const schema = {
231
+ title : 'object with $ref in allOf' ,
232
+ type : 'object' ,
233
+ definitions : {
234
+ id1 : {
235
+ type : 'object' ,
236
+ properties : {
237
+ id1 : {
238
+ type : 'integer'
239
+ }
240
+ }
241
+ }
242
+ } ,
243
+ allOf : [
244
+ {
245
+ $ref : '#/definitions/id1'
246
+ } ,
247
+ {
248
+ type : 'object' ,
249
+ properties : {
250
+ id2 : {
251
+ type : 'integer'
252
+ }
253
+ }
254
+ }
255
+ ]
256
+ }
257
+
258
+ try {
259
+ const stringify = build ( schema )
260
+ try {
261
+ const value = stringify ( {
262
+ id1 : 1 ,
263
+ id2 : 2 ,
264
+ id3 : 3 // extra prop shouldn't be in result
265
+ } )
266
+ t . is ( value , '{"id1":1,"id2":2}' )
267
+ } catch ( e ) {
268
+ t . fail ( )
269
+ }
270
+ } catch ( e ) {
271
+ t . fail ( )
272
+ }
273
+ } )
274
+
275
+ test ( 'object with multiple $refs in allOf' , ( t ) => {
276
+ t . plan ( 1 )
277
+
278
+ const schema = {
279
+ title : 'object with $ref in allOf' ,
280
+ type : 'object' ,
281
+ definitions : {
282
+ id1 : {
283
+ type : 'object' ,
284
+ properties : {
285
+ id1 : {
286
+ type : 'integer'
287
+ }
288
+ }
289
+ } ,
290
+ id2 : {
291
+ type : 'object' ,
292
+ properties : {
293
+ id2 : {
294
+ type : 'integer'
295
+ }
296
+ }
297
+ }
298
+ } ,
299
+ allOf : [
300
+ {
301
+ $ref : '#/definitions/id1'
302
+ } ,
303
+ {
304
+ $ref : '#/definitions/id2'
305
+ }
306
+ ]
307
+ }
308
+
309
+ try {
310
+ const stringify = build ( schema )
311
+ try {
312
+ const value = stringify ( {
313
+ id1 : 1 ,
314
+ id2 : 2 ,
315
+ id3 : 3 // extra prop shouldn't be in result
316
+ } )
317
+ t . is ( value , '{"id1":1,"id2":2}' )
318
+ } catch ( e ) {
319
+ t . fail ( )
320
+ }
321
+ } catch ( e ) {
322
+ t . fail ( )
323
+ }
324
+ } )
325
+
326
+ test ( 'object with external $refs in allOf' , ( t ) => {
327
+ t . plan ( 1 )
328
+
329
+ const externalSchema = {
330
+ first : {
331
+ definitions : {
332
+ id1 : {
333
+ type : 'object' ,
334
+ properties : {
335
+ id1 : {
336
+ type : 'integer'
337
+ }
338
+ }
339
+ }
340
+ }
341
+ } ,
342
+ second : {
343
+ id2 : {
344
+ $id : '#id2' ,
345
+ type : 'object' ,
346
+ properties : {
347
+ id2 : {
348
+ type : 'integer'
349
+ }
350
+ }
351
+ }
352
+ }
353
+ }
354
+
355
+ const schema = {
356
+ title : 'object with $ref in allOf' ,
357
+ type : 'object' ,
358
+ allOf : [
359
+ {
360
+ $ref : 'first#/definitions/id1'
361
+ } ,
362
+ {
363
+ $ref : 'second#id2'
364
+ }
365
+ ]
366
+ }
367
+
368
+ try {
369
+ const stringify = build ( schema , { schema : externalSchema } )
370
+ try {
371
+ const value = stringify ( {
372
+ id1 : 1 ,
373
+ id2 : 2 ,
374
+ id3 : 3 // extra prop shouldn't be in result
375
+ } )
376
+ t . is ( value , '{"id1":1,"id2":2}' )
377
+ } catch ( e ) {
378
+ t . fail ( )
379
+ }
380
+ } catch ( e ) {
381
+ t . fail ( )
382
+ }
383
+ } )
0 commit comments