diff --git a/src/samplers/array.js b/src/samplers/array.js index dbd4c43..5a38447 100644 --- a/src/samplers/array.js +++ b/src/samplers/array.js @@ -13,6 +13,9 @@ export function sampleArray(schema, options = {}, spec, context) { if (Array.isArray(items)) { return items[itemNumber] || {}; } + if (items.oneOf && Array.isArray(items.oneOf)) { + return items.oneOf[itemNumber] || {}; + } return items || {}; }; diff --git a/test/unit/object.spec.js b/test/unit/object.spec.js index 537c629..72a818a 100644 --- a/test/unit/object.spec.js +++ b/test/unit/object.spec.js @@ -183,4 +183,79 @@ describe('sampleObject', () => { barId: '3c966637-4898-4972-9a9d-baefa6cd6c89' }); }) + + it('should generate both items of oneOf', () => { + res = sampleObject({ + 'type': 'object', + 'properties': { + 'my_obj': { + 'type': 'object', + 'properties': { + 'elements': { + 'items': { + 'oneOf': [ + { + 'type': 'object', + 'properties': { + 'name': { + 'type': 'string', + 'description': '', + 'enum': [ + 'obj_a' + ] + } + }, + 'title': 'obj_a', + 'required': [ + 'name' + ] + }, + { + 'type': 'object', + 'properties': { + 'name': { + 'type': 'string', + 'description': '', + 'enum': [ + 'obj_b' + ] + } + }, + 'title': 'obj_b', + 'required': [ + 'name' + ] + } + ] + }, + 'type': 'array', + 'minItems': 2, + 'maxItems': 2, + 'uniqueItems': true + } + }, + 'title': '', + 'required': [ + 'elements' + ] + } + }, + 'required': [ + 'my_obj' + ] + }) + + expect(res).deep.equal({ + 'my_obj': { + 'elements': [ + { + 'name': 'obj_a' + }, + { + 'name': 'obj_b' + } + ] + } + }) + }); });