Skip to content
36 changes: 28 additions & 8 deletions client/src/utils/__tests__/schemaUtils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,25 +39,45 @@ describe("generateDefaultValue", () => {
).toBe(false);
});

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

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

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

test("generates empty array for non-required array", () => {
expect(generateDefaultValue({ type: "array" })).toEqual([]);
test("generates empty array for required array", () => {
const parentSchema = { required: ["testArray"] };
expect(
generateDefaultValue({ type: "array" }, "testArray", parentSchema),
).toEqual([]);
});

test("generates undefined for non-required array", () => {
const parentSchema = { required: ["otherField"] };
expect(
generateDefaultValue({ type: "array" }, "testArray", parentSchema),
).toBe(undefined);
});

test("generates empty object for non-required object", () => {
expect(generateDefaultValue({ type: "object" })).toEqual({});
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", () => {
Expand Down
6 changes: 3 additions & 3 deletions client/src/utils/schemaUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,9 @@ export function generateDefaultValue(
case "boolean":
return isRequired ? false : undefined;
case "array":
return [];
return isRequired ? [] : undefined;
case "object": {
if (!schema.properties) return {};
if (!schema.properties) return isRequired ? {} : undefined;

const obj: JsonObject = {};
// Only include properties that are required according to the schema's required array
Expand All @@ -123,7 +123,7 @@ export function generateDefaultValue(
}
}
});
return obj;
return isRequired ? obj : Object.keys(obj).length > 0 ? obj : undefined;
}
case "null":
return null;
Expand Down