test.build/core/validators/schema.validator.test.ts
test.build/core/validators/schema.validator.test.ts is a file in Codebase Testing. 31 lines of code and 0 definitions.
import { describe, expect, it } from "vitest";
import { instanceDefects, schemaShapeDefects } from "@banes-lab/build-scripts/core/validators/schema.validator.ts";
import { inferSchema } from "@banes-lab/build-scripts/core/converters/schema.converter.ts";
describe("schemaShapeDefects", () => {
it("reports object keywords on a node whose type admits no object, and items on one that admits no array", () => {
expect(
schemaShapeDefects({ properties: { "0": { type: "string" } }, required: ["0"], type: "array" }, "$"),
).toHaveLength(2);
expect(schemaShapeDefects({ items: { type: "string" }, type: "object" }, "$")).toHaveLength(1);
});
it("accepts a schema inferred from objects holding arrays", () => {
const schema = inferSchema([{ tags: ["a", "b"] }, { tags: [] }]);
expect(schemaShapeDefects(schema, "$")).toStrictEqual([]);
expect(schema).toMatchObject({ properties: { tags: { items: { type: "string" }, type: "array" } } });
});
});
describe("instanceDefects", () => {
const schema = inferSchema([
{ count: 1, name: "a" },
{ count: 2.5, name: "b" },
]);
it("accepts every value the schema was inferred from", () => {
expect(instanceDefects({ count: 1, name: "a" }, schema, "$")).toStrictEqual([]);
expect(instanceDefects({ count: 2.5, name: "b" }, schema, "$")).toStrictEqual([]);
});
it("reports a wrong type, a missing required field and an undeclared field", () => {
expect(instanceDefects({ count: "1", name: "a" }, schema, "$")).toHaveLength(1);
expect(instanceDefects({ name: "a" }, schema, "$")).toHaveLength(1);
expect(instanceDefects({ count: 1, extra: true, name: "a" }, schema, "$")).toHaveLength(1);
});
});