Skip to content

Commit 5e1aef2

Browse files
authored
Merge pull request #772 from JMLX42/fix/optional-arrays-issue-771
Fix optional arrays/objects issue #771
2 parents ce4ac9e + da38641 commit 5e1aef2

File tree

2 files changed

+31
-11
lines changed

2 files changed

+31
-11
lines changed

client/src/utils/__tests__/schemaUtils.test.ts

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,25 +39,45 @@ describe("generateDefaultValue", () => {
3939
).toBe(false);
4040
});
4141

42-
test("generates default array", () => {
43-
expect(generateDefaultValue({ type: "array" })).toEqual([]);
42+
test("generates undefined for optional array", () => {
43+
expect(generateDefaultValue({ type: "array" })).toBe(undefined);
4444
});
4545

46-
test("generates default empty object", () => {
47-
expect(generateDefaultValue({ type: "object" })).toEqual({});
46+
test("generates undefined for optional object", () => {
47+
expect(generateDefaultValue({ type: "object" })).toBe(undefined);
4848
});
4949

5050
test("generates default null for unknown types", () => {
5151
// @ts-expect-error Testing with invalid type
5252
expect(generateDefaultValue({ type: "unknown" })).toBe(undefined);
5353
});
5454

55-
test("generates empty array for non-required array", () => {
56-
expect(generateDefaultValue({ type: "array" })).toEqual([]);
55+
test("generates empty array for required array", () => {
56+
const parentSchema = { required: ["testArray"] };
57+
expect(
58+
generateDefaultValue({ type: "array" }, "testArray", parentSchema),
59+
).toEqual([]);
60+
});
61+
62+
test("generates undefined for non-required array", () => {
63+
const parentSchema = { required: ["otherField"] };
64+
expect(
65+
generateDefaultValue({ type: "array" }, "testArray", parentSchema),
66+
).toBe(undefined);
5767
});
5868

59-
test("generates empty object for non-required object", () => {
60-
expect(generateDefaultValue({ type: "object" })).toEqual({});
69+
test("generates empty object for required object", () => {
70+
const parentSchema = { required: ["testObject"] };
71+
expect(
72+
generateDefaultValue({ type: "object" }, "testObject", parentSchema),
73+
).toEqual({});
74+
});
75+
76+
test("generates undefined for non-required object", () => {
77+
const parentSchema = { required: ["otherField"] };
78+
expect(
79+
generateDefaultValue({ type: "object" }, "testObject", parentSchema),
80+
).toBe(undefined);
6181
});
6282

6383
test("generates undefined for non-required primitive types", () => {

client/src/utils/schemaUtils.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ export function generateDefaultValue(
109109
case "boolean":
110110
return isRequired ? false : undefined;
111111
case "array":
112-
return [];
112+
return isRequired ? [] : undefined;
113113
case "object": {
114-
if (!schema.properties) return {};
114+
if (!schema.properties) return isRequired ? {} : undefined;
115115

116116
const obj: JsonObject = {};
117117
// Only include properties that are required according to the schema's required array
@@ -123,7 +123,7 @@ export function generateDefaultValue(
123123
}
124124
}
125125
});
126-
return obj;
126+
return isRequired ? obj : Object.keys(obj).length > 0 ? obj : undefined;
127127
}
128128
case "null":
129129
return null;

0 commit comments

Comments
 (0)