perf(canvas): reduce Convex hot-path query load
This commit is contained in:
63
tests/convex/canvas-graph-query.test.ts
Normal file
63
tests/convex/canvas-graph-query.test.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
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");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user