import { describe, it, expect, vi, beforeEach } from "vitest"; vi.mock("@/src/lib/prisma", () => ({ prisma: { product: { findUnique: vi.fn() } } })); vi.mock("@/src/lib/auth/getUser", () => ({ getUserData: vi.fn(), isUser: (user: { role: string }) => user.role === "user", })); vi.mock("@/src/modules/settings/lib/discount-validation", async (importOriginal) => { const actual = await importOriginal(); return { ...actual, validateDiscountCode: vi.fn() }; }); vi.mock("@/src/modules/marketing/lib/consent", () => ({ hasMarketingConsent: vi.fn() })); import { prisma } from "@/src/lib/prisma"; import { getUserData } from "@/src/lib/auth/getUser"; import { validateDiscountCode } from "@/src/modules/settings/lib/discount-validation"; import { previewPassDiscountCode } from "@/src/modules/products/actions/pass-purchase-actions"; const product = { id: "prod-1", businessId: "biz-1", priceCents: 12000, isActive: true, business: { isPublic: true }, }; beforeEach(() => { vi.clearAllMocks(); vi.mocked(getUserData).mockResolvedValue({ id: "user-1", role: "user" } as never); vi.mocked(prisma.product.findUnique).mockResolvedValue(product as never); vi.mocked(validateDiscountCode).mockResolvedValue({ valid: true, discountCode: { id: "code-1", type: "percent", value: 25 }, }); }); describe("previewPassDiscountCode", () => { it("rechnet den Kartenpreis mit Rabatt", async () => { expect(await previewPassDiscountCode("prod-1", "KARTE25")).toEqual({ valid: true, discountedPriceCents: 9000, discountAmountCents: 3000, }); }); it("lehnt Karten nicht öffentlicher Studios ab - wie der Checkout", async () => { vi.mocked(prisma.product.findUnique).mockResolvedValue({ ...product, business: { isPublic: false }, } as never); expect(await previewPassDiscountCode("prod-1", "KARTE25")).toEqual({ valid: false, error: "Diese Karte ist nicht verfügbar.", }); expect(validateDiscountCode).not.toHaveBeenCalled(); }); });