Files
lemonspace_app/tests/convex/canvas-graph-query.test.ts

64 lines
1.7 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
vi.mock("@/convex/helpers", () => ({
requireAuth: vi.fn(),
}));
import type { Id } from "@/convex/_generated/dataModel";
import { loadCanvasGraph } from "@/convex/canvasGraph";
describe("loadCanvasGraph", () => {
it("returns nodes and edges for an authorized canvas", async () => {
const canvasId = "canvas_1" as Id<"canvases">;
const nodes = [{ _id: "node_1", canvasId }];
const edges = [{ _id: "edge_1", canvasId }];
const ctx = {
db: {
get: vi.fn(async (id: Id<"canvases">) =>
id === canvasId ? { _id: canvasId, ownerId: "user_1" } : null,
),
query: vi.fn((table: "nodes" | "edges") => ({
withIndex: vi.fn((_index: string, apply: (q: { eq: (field: string, value: unknown) => unknown }) => unknown) => {
const queryBuilder = {
eq: vi.fn().mockReturnThis(),
};
apply(queryBuilder);
return {
collect: vi.fn(async () => (table === "nodes" ? nodes : edges)),
};
}),
})),
},
};
await expect(
loadCanvasGraph(ctx as never, {
canvasId,
userId: "user_1",
}),
).resolves.toEqual({
canvas: { _id: canvasId, ownerId: "user_1" },
nodes,
edges,
});
});
it("throws when the canvas belongs to another user", async () => {
const canvasId = "canvas_1" as Id<"canvases">;
const ctx = {
db: {
get: vi.fn(async () => ({ _id: canvasId, ownerId: "other_user" })),
query: vi.fn(),
},
};
await expect(
loadCanvasGraph(ctx as never, {
canvasId,
userId: "user_1",
}),
).rejects.toThrow("Canvas not found");
});
});