import { beforeEach, describe, expect, it, vi } from "vitest" const { mockDb } = vi.hoisted(() => ({ mockDb: { customer: { create: vi.fn(), findMany: vi.fn(), }, commission: { create: vi.fn(), findMany: vi.fn(), update: vi.fn(), }, }, })) vi.mock("./client", () => ({ db: mockDb, })) import { createCommission, createCustomer, updateCommissionStatus } from "./commissions" describe("commissions service", () => { beforeEach(() => { for (const value of Object.values(mockDb)) { for (const fn of Object.values(value)) { if (typeof fn === "function") { fn.mockReset() } } } }) it("creates customer and commission payloads", async () => { mockDb.customer.create.mockResolvedValue({ id: "customer-1" }) mockDb.commission.create.mockResolvedValue({ id: "commission-1" }) await createCustomer({ name: "Ada Lovelace", email: "ada@example.com", isRecurring: true, }) await createCommission({ title: "Portrait Request", status: "new", customerId: "550e8400-e29b-41d4-a716-446655440000", }) expect(mockDb.customer.create).toHaveBeenCalledTimes(1) expect(mockDb.commission.create).toHaveBeenCalledTimes(1) }) it("updates commission status", async () => { mockDb.commission.update.mockResolvedValue({ id: "commission-1", status: "done" }) await updateCommissionStatus({ id: "550e8400-e29b-41d4-a716-446655440001", status: "done", }) expect(mockDb.commission.update).toHaveBeenCalledTimes(1) }) })