Files
waoowaoo/tests/helpers/billing-fixtures.ts

69 lines
1.7 KiB
TypeScript

import { randomUUID } from 'node:crypto'
import type { TaskBillingInfo, TaskType } from '@/lib/task/types'
import { TASK_STATUS } from '@/lib/task/types'
import { Prisma } from '@prisma/client'
import { prisma } from './prisma'
export async function createTestUser() {
const suffix = randomUUID().slice(0, 8)
return await prisma.user.create({
data: {
name: `billing_user_${suffix}`,
email: `billing_${suffix}@example.com`,
},
})
}
export async function createTestProject(userId: string) {
const suffix = randomUUID().slice(0, 8)
return await prisma.project.create({
data: {
name: `Billing Project ${suffix}`,
userId,
},
})
}
export async function seedBalance(userId: string, balance: number) {
return await prisma.userBalance.upsert({
where: { userId },
create: {
userId,
balance,
frozenAmount: 0,
totalSpent: 0,
},
update: {
balance,
frozenAmount: 0,
totalSpent: 0,
},
})
}
export async function createQueuedTask(params: {
id: string
userId: string
projectId: string
type: TaskType
targetType: string
targetId: string
billingInfo?: TaskBillingInfo | null
payload?: Record<string, unknown> | null
}) {
return await prisma.task.create({
data: {
id: params.id,
userId: params.userId,
projectId: params.projectId,
type: params.type,
targetType: params.targetType,
targetId: params.targetId,
status: TASK_STATUS.QUEUED,
billingInfo: (params.billingInfo ?? Prisma.JsonNull) as unknown as Prisma.InputJsonValue,
payload: (params.payload ?? Prisma.JsonNull) as unknown as Prisma.InputJsonValue,
queuedAt: new Date(),
},
})
}