64 lines
1.7 KiB
TypeScript
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");
|
|
});
|
|
});
|