Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline (Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/* packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
81 lines
2.1 KiB
TypeScript
81 lines
2.1 KiB
TypeScript
import { afterAll, describe, expect, it } from "vitest";
|
|
import { createDb, type PrismaClient } from "./client.js";
|
|
|
|
const databaseUrl = process.env.DATABASE_URL;
|
|
const describePostgres =
|
|
process.env.VERIFY_DATABASE && databaseUrl ? describe.sequential : describe.skip;
|
|
|
|
describePostgres("default Space membership trigger (PostgreSQL)", () => {
|
|
const suffix = `${process.pid}-${Date.now()}`;
|
|
const userId = `trigger-user-${suffix}`;
|
|
const organizationId = `trigger-organization-${suffix}`;
|
|
const spaceId = `trigger-space-${suffix}`;
|
|
let prisma: PrismaClient;
|
|
let close: () => Promise<void>;
|
|
|
|
afterAll(async () => {
|
|
if (!prisma) return;
|
|
await prisma.organization.deleteMany({ where: { id: organizationId } });
|
|
await prisma.user.deleteMany({ where: { id: userId } });
|
|
await close();
|
|
});
|
|
|
|
it("adds a new organization member to its default Space", async () => {
|
|
const db = createDb(databaseUrl!);
|
|
prisma = db.prisma;
|
|
close = async () => {
|
|
await db.prisma.$disconnect();
|
|
await db.pool.end();
|
|
};
|
|
|
|
const createdAt = new Date();
|
|
await prisma.user.create({
|
|
data: {
|
|
id: userId,
|
|
name: "Trigger Test User",
|
|
email: `${userId}@rakazo.test`,
|
|
emailVerified: false,
|
|
},
|
|
});
|
|
await prisma.organization.create({
|
|
data: {
|
|
id: organizationId,
|
|
name: "Trigger Test Organization",
|
|
slug: organizationId,
|
|
createdAt,
|
|
},
|
|
});
|
|
await prisma.space.create({
|
|
data: {
|
|
id: spaceId,
|
|
organizationId,
|
|
name: "General",
|
|
isDefault: true,
|
|
createdByUserId: userId,
|
|
},
|
|
});
|
|
|
|
const memberId = `trigger-member-${suffix}`;
|
|
await prisma.member.create({
|
|
data: {
|
|
id: memberId,
|
|
organizationId,
|
|
userId,
|
|
role: "member",
|
|
createdAt,
|
|
},
|
|
});
|
|
|
|
const membership = await prisma.spaceMember.findUnique({
|
|
where: { spaceId_userId: { spaceId, userId } },
|
|
});
|
|
expect(membership).toMatchObject({
|
|
id: `default-space-member:${memberId}`,
|
|
spaceId,
|
|
organizationId,
|
|
userId,
|
|
role: "member",
|
|
});
|
|
});
|
|
});
|