Merge pull request #772 from JMLX42/fix/optional-arrays-issue-771
Fix optional arrays/objects issue #771
This commit is contained in:
commit
5e1aef27bf
2 changed files with 31 additions and 11 deletions
|
|
@ -39,12 +39,12 @@ describe("generateDefaultValue", () => {
|
||||||
).toBe(false);
|
).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("generates default array", () => {
|
test("generates undefined for optional array", () => {
|
||||||
expect(generateDefaultValue({ type: "array" })).toEqual([]);
|
expect(generateDefaultValue({ type: "array" })).toBe(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("generates default empty object", () => {
|
test("generates undefined for optional object", () => {
|
||||||
expect(generateDefaultValue({ type: "object" })).toEqual({});
|
expect(generateDefaultValue({ type: "object" })).toBe(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("generates default null for unknown types", () => {
|
test("generates default null for unknown types", () => {
|
||||||
|
|
@ -52,12 +52,32 @@ describe("generateDefaultValue", () => {
|
||||||
expect(generateDefaultValue({ type: "unknown" })).toBe(undefined);
|
expect(generateDefaultValue({ type: "unknown" })).toBe(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("generates empty array for non-required array", () => {
|
test("generates empty array for required array", () => {
|
||||||
expect(generateDefaultValue({ type: "array" })).toEqual([]);
|
const parentSchema = { required: ["testArray"] };
|
||||||
|
expect(
|
||||||
|
generateDefaultValue({ type: "array" }, "testArray", parentSchema),
|
||||||
|
).toEqual([]);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("generates empty object for non-required object", () => {
|
test("generates undefined for non-required array", () => {
|
||||||
expect(generateDefaultValue({ type: "object" })).toEqual({});
|
const parentSchema = { required: ["otherField"] };
|
||||||
|
expect(
|
||||||
|
generateDefaultValue({ type: "array" }, "testArray", parentSchema),
|
||||||
|
).toBe(undefined);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("generates empty object for required object", () => {
|
||||||
|
const parentSchema = { required: ["testObject"] };
|
||||||
|
expect(
|
||||||
|
generateDefaultValue({ type: "object" }, "testObject", parentSchema),
|
||||||
|
).toEqual({});
|
||||||
|
});
|
||||||
|
|
||||||
|
test("generates undefined for non-required object", () => {
|
||||||
|
const parentSchema = { required: ["otherField"] };
|
||||||
|
expect(
|
||||||
|
generateDefaultValue({ type: "object" }, "testObject", parentSchema),
|
||||||
|
).toBe(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("generates undefined for non-required primitive types", () => {
|
test("generates undefined for non-required primitive types", () => {
|
||||||
|
|
|
||||||
|
|
@ -109,9 +109,9 @@ export function generateDefaultValue(
|
||||||
case "boolean":
|
case "boolean":
|
||||||
return isRequired ? false : undefined;
|
return isRequired ? false : undefined;
|
||||||
case "array":
|
case "array":
|
||||||
return [];
|
return isRequired ? [] : undefined;
|
||||||
case "object": {
|
case "object": {
|
||||||
if (!schema.properties) return {};
|
if (!schema.properties) return isRequired ? {} : undefined;
|
||||||
|
|
||||||
const obj: JsonObject = {};
|
const obj: JsonObject = {};
|
||||||
// Only include properties that are required according to the schema's required array
|
// Only include properties that are required according to the schema's required array
|
||||||
|
|
@ -123,7 +123,7 @@ export function generateDefaultValue(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return obj;
|
return isRequired ? obj : Object.keys(obj).length > 0 ? obj : undefined;
|
||||||
}
|
}
|
||||||
case "null":
|
case "null":
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue