Files
zerobyte/app/test/helpers/user-org.ts
2026-04-22 22:33:18 +02:00

89 lines
1.6 KiB
TypeScript

import { db, sqlite } from "~/server/db/db";
import { member, organization, sessionsTable, usersTable } from "~/server/db/schema";
type MembershipRole = "owner" | "admin" | "member";
export function randomId() {
return Bun.randomUUIDv7();
}
export function randomSlug(prefix: string) {
return `${prefix}-${Math.random().toString(36).slice(2, 8)}`;
}
export function escapeSqlLiteral(value: string) {
return value.replaceAll("'", "''");
}
export function dropTrigger(name: string) {
sqlite.exec(`DROP TRIGGER IF EXISTS ${name};`);
}
export async function createUser(email: string) {
const id = randomId();
await db.insert(usersTable).values({
id,
email,
name: email.split("@")[0],
username: randomSlug("user"),
});
return id;
}
export async function createOrganization(name: string) {
const id = randomId();
await db.insert(organization).values({
id,
name,
slug: randomSlug("org"),
createdAt: new Date(),
});
return id;
}
export async function createMembership({
userId,
organizationId,
role,
}: {
userId: string;
organizationId: string;
role: MembershipRole;
}) {
const id = randomId();
await db.insert(member).values({
id,
userId,
organizationId,
role,
createdAt: new Date(),
});
return id;
}
export async function createSession({
userId,
activeOrganizationId = null,
}: {
userId: string;
activeOrganizationId?: string | null;
}) {
const id = randomId();
await db.insert(sessionsTable).values({
id,
userId,
token: randomSlug("token"),
expiresAt: new Date(Date.now() + 60_000),
activeOrganizationId,
});
return id;
}