Files
stock-manager/tests/integration/helpers/factories.ts
T

93 lines
2.0 KiB
TypeScript

import type {
PrismaClient,
PersonDepartment,
UserRole,
} from "@/generated/prisma/client"
let sequence = 0
function nextSuffix() {
sequence += 1
return `${Date.now()}-${sequence}`
}
export async function createTestUser(
prisma: PrismaClient,
overrides: Partial<{
username: string
email: string
name: string
role: UserRole
isActive: boolean
}> = {},
) {
const suffix = nextSuffix()
return prisma.user.create({
data: {
username: overrides.username ?? `test-user-${suffix}`,
email: overrides.email ?? `test-user-${suffix}@example.test`,
name: overrides.name ?? "Test User",
password: "hashed-password",
role: overrides.role ?? "ADMIN",
isActive: overrides.isActive ?? true,
},
})
}
export async function createTestCategory(
prisma: PrismaClient,
overrides: Partial<{ name: string }> = {},
) {
const suffix = nextSuffix()
return prisma.category.create({
data: {
name: overrides.name ?? `Test Category ${suffix}`,
},
})
}
export async function createTestPerson(
prisma: PrismaClient,
overrides: Partial<{
firstName: string
lastName: string
department: PersonDepartment
email: string | null
phone: string | null
}> = {},
) {
const suffix = nextSuffix()
return prisma.person.create({
data: {
firstName: overrides.firstName ?? "Test",
lastName: overrides.lastName ?? `Person-${suffix}`,
department: overrides.department ?? "OTHER",
email: overrides.email ?? null,
phone: overrides.phone ?? null,
},
})
}
export async function createTestItem(
prisma: PrismaClient,
overrides: Partial<{
name: string
stock: number
categoryId: string
}> = {},
) {
const categoryId =
overrides.categoryId ?? (await createTestCategory(prisma)).id
const suffix = nextSuffix()
return prisma.item.create({
data: {
name: overrides.name ?? `Test Item ${suffix}`,
stock: overrides.stock ?? 0,
category: { connect: { id: categoryId } },
},
})
}