mirror of
https://github.com/Since-3/Kuma.git
synced 2026-10-12 20:41:16 +00:00
70 lines
2.5 KiB
TypeScript
70 lines
2.5 KiB
TypeScript
import { describe, it, expect, vi } from "vitest";
|
|
import { validateDiscountCode } from "@/src/modules/settings/lib/discount-validation";
|
|
|
|
function dbWith(code: Record<string, unknown> | null) {
|
|
return {
|
|
discountCode: { findUnique: vi.fn().mockResolvedValue(code) },
|
|
discountRedemption: { findUnique: vi.fn().mockResolvedValue(null) },
|
|
} as never;
|
|
}
|
|
|
|
const baseCode = {
|
|
id: "code-1",
|
|
code: "SOMMER",
|
|
type: "percent",
|
|
value: 10,
|
|
scope: "all_courses",
|
|
courseIds: [],
|
|
appliesTo: "courses",
|
|
restrictedToUserId: null,
|
|
maxRedemptions: null,
|
|
redeemedCount: 0,
|
|
startsAt: null,
|
|
expiresAt: null,
|
|
isActive: true,
|
|
};
|
|
|
|
const base = { code: "sommer", businessId: "biz-1", userId: "user-1" };
|
|
|
|
describe("validateDiscountCode - wofür ein Code gilt", () => {
|
|
it("Kurs-Codes gelten nicht beim Kartenkauf", async () => {
|
|
const result = await validateDiscountCode(dbWith(baseCode), { ...base, productId: "prod-1" });
|
|
expect(result).toEqual({ valid: false, reason: "Dieser Rabattcode gilt nicht für Karten." });
|
|
});
|
|
|
|
it("Karten-Codes gelten nicht für Kurse", async () => {
|
|
const result = await validateDiscountCode(dbWith({ ...baseCode, appliesTo: "passes" }), {
|
|
...base,
|
|
courseId: "course-1",
|
|
});
|
|
expect(result).toEqual({ valid: false, reason: "Dieser Rabattcode gilt nur für Karten." });
|
|
});
|
|
|
|
it("Codes für beides gelten bei Kurs und Karte", async () => {
|
|
const db = dbWith({ ...baseCode, appliesTo: "all" });
|
|
expect((await validateDiscountCode(db, { ...base, courseId: "c" })).valid).toBe(true);
|
|
expect((await validateDiscountCode(db, { ...base, productId: "p" })).valid).toBe(true);
|
|
});
|
|
|
|
it("die Kursauswahl wirkt beim Kartenkauf nicht", async () => {
|
|
const db = dbWith({
|
|
...baseCode,
|
|
appliesTo: "all",
|
|
scope: "specific_courses",
|
|
courseIds: ["c1"],
|
|
});
|
|
expect((await validateDiscountCode(db, { ...base, productId: "p" })).valid).toBe(true);
|
|
expect((await validateDiscountCode(db, { ...base, courseId: "c2" })).valid).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("validateDiscountCode - persönliche Codes", () => {
|
|
it("gilt nur für das eigene Konto", async () => {
|
|
const db = dbWith({ ...baseCode, restrictedToUserId: "user-1" });
|
|
expect((await validateDiscountCode(db, { ...base, courseId: "c" })).valid).toBe(true);
|
|
expect(await validateDiscountCode(db, { ...base, userId: "user-2", courseId: "c" })).toEqual({
|
|
valid: false,
|
|
reason: "Dieser Rabattcode gehört zu einem anderen Kundenkonto.",
|
|
});
|
|
});
|
|
});
|