Files
edgeever/apps/api/src/workspace-provisioning.test.mjs
T

64 lines
1.9 KiB
JavaScript

import { describe, expect, test } from "bun:test";
import {
createWorkspaceDefaultSeedStatements,
ensureUserWorkspace,
} from "./workspace-provisioning.ts";
const statement = (sql, calls) => ({
bind(...values) {
calls.push({ sql, values });
return this;
},
async first() {
return sql.includes("FROM workspace_members WHERE user_id")
? { workspace_id: "ws_existing", role: "member" }
: null;
},
async run() {
return { success: true };
},
});
describe("workspace provisioning", () => {
test("does not restore defaults while resolving an existing workspace", async () => {
const calls = [];
let batchCount = 0;
const db = {
prepare: (sql) => statement(sql, calls),
batch: async () => {
batchCount += 1;
return [];
},
};
expect(await ensureUserWorkspace(db, "usr_existing", "writer")).toEqual({
workspaceId: "ws_existing",
role: "member",
});
expect(batchCount).toBe(0);
expect(calls).toHaveLength(1);
expect(calls[0].sql).toContain("FROM workspace_members WHERE user_id");
});
test("builds editable localized template and AI prompt statements for new workspaces", () => {
const calls = [];
const db = {
prepare: (sql) => statement(sql, calls),
};
const statements = createWorkspaceDefaultSeedStatements(
db,
"ws_new",
"2026-08-14T00:00:00.000Z",
"en-US",
);
expect(statements.length).toBeGreaterThan(6);
expect(calls[0].sql).toContain("INSERT OR IGNORE INTO memo_templates");
expect(calls[0].values).toContain("ws_new_template_quick-note");
expect(calls[0].values).toContain("Quick Spark");
expect(calls.filter((call) => call.sql.includes("INSERT OR IGNORE INTO memo_templates"))).toHaveLength(5);
expect(calls.some((call) => call.sql.includes("INSERT OR IGNORE INTO ai_prompt_templates"))).toBe(true);
});
});