__tests__ / schemas.test.ts
import { describe, it, expect } from "vitest";
import { SearchNodesQuerySchema, SEARCH_QUERY_MAX_LENGTH, EntitySchema, RelationSchema } from "../src/schemas";
describe("SearchNodesQuerySchema", () => {
it("accepts a normal query", () => {
expect(SearchNodesQuerySchema.safeParse("Alice").success).toBe(true);
expect(SearchNodesQuerySchema.safeParse("works at Acme Corp").success).toBe(true);
});
it("accepts a query at exactly the max length", () => {
const atLimit = "a".repeat(SEARCH_QUERY_MAX_LENGTH);
expect(SearchNodesQuerySchema.safeParse(atLimit).success).toBe(true);
});
it("rejects a query longer than the max length", () => {
const oversized = "a".repeat(SEARCH_QUERY_MAX_LENGTH + 1);
expect(SearchNodesQuerySchema.safeParse(oversized).success).toBe(false);
});
it("rejects non-string input", () => {
expect(SearchNodesQuerySchema.safeParse(42).success).toBe(false);
expect(SearchNodesQuerySchema.safeParse(null).success).toBe(false);
});
});
describe("EntitySchema", () => {
it("accepts a well-formed entity", () => {
const result = EntitySchema.safeParse({
name: "Alice",
entityType: "person",
observations: ["likes tea"],
});
expect(result.success).toBe(true);
});
it("rejects an entity missing observations", () => {
const result = EntitySchema.safeParse({ name: "Alice", entityType: "person" });
expect(result.success).toBe(false);
});
});
describe("RelationSchema", () => {
it("accepts a well-formed relation", () => {
const result = RelationSchema.safeParse({ from: "Alice", to: "Bob", relationType: "knows" });
expect(result.success).toBe(true);
});
it("rejects a relation missing relationType", () => {
const result = RelationSchema.safeParse({ from: "Alice", to: "Bob" });
expect(result.success).toBe(false);
});
});
__tests__ / schemas.test.ts
import { describe, it, expect } from "vitest";
import { SearchNodesQuerySchema, SEARCH_QUERY_MAX_LENGTH, EntitySchema, RelationSchema } from "../src/schemas";
describe("SearchNodesQuerySchema", () => {
it("accepts a normal query", () => {
expect(SearchNodesQuerySchema.safeParse("Alice").success).toBe(true);
expect(SearchNodesQuerySchema.safeParse("works at Acme Corp").success).toBe(true);
});
it("accepts a query at exactly the max length", () => {
const atLimit = "a".repeat(SEARCH_QUERY_MAX_LENGTH);
expect(SearchNodesQuerySchema.safeParse(atLimit).success).toBe(true);
});
it("rejects a query longer than the max length", () => {
const oversized = "a".repeat(SEARCH_QUERY_MAX_LENGTH + 1);
expect(SearchNodesQuerySchema.safeParse(oversized).success).toBe(false);
});
it("rejects non-string input", () => {
expect(SearchNodesQuerySchema.safeParse(42).success).toBe(false);
expect(SearchNodesQuerySchema.safeParse(null).success).toBe(false);
});
});
describe("EntitySchema", () => {
it("accepts a well-formed entity", () => {
const result = EntitySchema.safeParse({
name: "Alice",
entityType: "person",
observations: ["likes tea"],
});
expect(result.success).toBe(true);
});
it("rejects an entity missing observations", () => {
const result = EntitySchema.safeParse({ name: "Alice", entityType: "person" });
expect(result.success).toBe(false);
});
});
describe("RelationSchema", () => {
it("accepts a well-formed relation", () => {
const result = RelationSchema.safeParse({ from: "Alice", to: "Bob", relationType: "knows" });
expect(result.success).toBe(true);
});
it("rejects a relation missing relationType", () => {
const result = RelationSchema.safeParse({ from: "Alice", to: "Bob" });
expect(result.success).toBe(false);
});
});