Skip to content

Commit

Permalink
fix(json-schema-2020-12-samples): skip anyOf and oneOf while merging …
Browse files Browse the repository at this point in the history
…schemas (#9853)

Refs #9198
  • Loading branch information
glowcloud committed Apr 23, 2024
1 parent dee2ad0 commit f7373a0
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 4 deletions.
20 changes: 16 additions & 4 deletions src/core/plugins/json-schema-2020-12-samples/fn/main.js
Expand Up @@ -320,21 +320,27 @@ export const sampleFromSchemaGeneric = (
}

if (Array.isArray(contains.anyOf)) {
// eslint-disable-next-line no-unused-vars
const { anyOf, ...containsWithoutAnyOf } = items

sampleArray.push(
...contains.anyOf.map((anyOfSchema) =>
sampleFromSchemaGeneric(
merge(anyOfSchema, contains, config),
merge(anyOfSchema, containsWithoutAnyOf, config),
config,
undefined,
respectXML
)
)
)
} else if (Array.isArray(contains.oneOf)) {
// eslint-disable-next-line no-unused-vars
const { oneOf, ...containsWithoutOneOf } = items

sampleArray.push(
...contains.oneOf.map((oneOfSchema) =>
sampleFromSchemaGeneric(
merge(oneOfSchema, contains, config),
merge(oneOfSchema, containsWithoutOneOf, config),
config,
undefined,
respectXML
Expand All @@ -357,21 +363,27 @@ export const sampleFromSchemaGeneric = (
}

if (Array.isArray(items.anyOf)) {
// eslint-disable-next-line no-unused-vars
const { anyOf, ...itemsWithoutAnyOf } = items

sampleArray.push(
...items.anyOf.map((i) =>
sampleFromSchemaGeneric(
merge(i, items, config),
merge(i, itemsWithoutAnyOf, config),
config,
undefined,
respectXML
)
)
)
} else if (Array.isArray(items.oneOf)) {
// eslint-disable-next-line no-unused-vars
const { oneOf, ...itemsWithoutOneOf } = items

sampleArray.push(
...items.oneOf.map((i) =>
sampleFromSchemaGeneric(
merge(i, items, config),
merge(i, itemsWithoutOneOf, config),
config,
undefined,
respectXML
Expand Down
30 changes: 30 additions & 0 deletions test/unit/core/plugins/json-schema-2020-12-samples/fn.js
Expand Up @@ -810,6 +810,36 @@ describe("sampleFromSchema", () => {
expect(sampleFromSchema(definition)).toEqual(expected)
})

it("returns array of samples for oneOf with objects", function () {
const definition = {
type: "array",
items: {
oneOf: [
{
type: "object",
properties: {
name: {
type: "string",
},
},
},
{
type: "object",
properties: {
id: {
type: "string",
},
},
},
],
},
}

const expected = [{ name: "string" }, { id: "string" }]

expect(sampleFromSchema(definition)).toStrictEqual(expected)
})

it("returns array of samples for anyOf type", () => {
const definition = {
type: "array",
Expand Down

0 comments on commit f7373a0

Please sign in to comment.