mirror of
https://github.com/Since-3/Kuma.git
synced 2026-10-12 21:41:17 +00:00
58 lines
2.2 KiB
TypeScript
58 lines
2.2 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
import {
|
|
canRedeemPass,
|
|
passCoversCourse,
|
|
passDisplayStatus,
|
|
passRevenueCents,
|
|
validUntilFrom,
|
|
} from "@/src/modules/products/lib/pass-rules";
|
|
|
|
const now = new Date("2026-10-02T12:00:00Z");
|
|
const pass = { status: "active", validUntil: null as Date | null, creditsRemaining: 3 };
|
|
|
|
describe("passCoversCourse", () => {
|
|
it("gilt ohne Kursarten für alle Kurse", () => {
|
|
expect(passCoversCourse([], ["yoga"])).toBe(true);
|
|
});
|
|
|
|
it("gilt nur für Kurse mit mindestens einer passenden Kursart", () => {
|
|
expect(passCoversCourse(["pilates"], ["pilates", "reformer"])).toBe(true);
|
|
expect(passCoversCourse(["pilates"], ["yoga"])).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("canRedeemPass", () => {
|
|
it("braucht eine aktive, nicht abgelaufene Karte mit genug Einheiten", () => {
|
|
expect(canRedeemPass(pass, 3, now)).toBe(true);
|
|
expect(canRedeemPass(pass, 4, now)).toBe(false);
|
|
expect(canRedeemPass({ ...pass, status: "ended" }, 1, now)).toBe(false);
|
|
expect(canRedeemPass({ ...pass, validUntil: new Date("2026-10-01") }, 1, now)).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("passDisplayStatus", () => {
|
|
it("zeigt erstattet und beendet vor abgelaufen", () => {
|
|
const expired = new Date("2026-01-01");
|
|
expect(passDisplayStatus({ ...pass, status: "refunded", validUntil: expired }, now)).toBe(
|
|
"refunded"
|
|
);
|
|
expect(passDisplayStatus({ ...pass, validUntil: expired }, now)).toBe("expired");
|
|
expect(passDisplayStatus({ ...pass, creditsRemaining: 0 }, now)).toBe("used_up");
|
|
expect(passDisplayStatus(pass, now)).toBe("active");
|
|
});
|
|
});
|
|
|
|
describe("passRevenueCents", () => {
|
|
it("zählt den Kartenpreis ohne Servicegebühr, nach Erstattung nichts", () => {
|
|
expect(passRevenueCents({ status: "active", amountPaid: 12500, platformFee: 500 })).toBe(12000);
|
|
expect(passRevenueCents({ status: "refunded", amountPaid: 12500, platformFee: 500 })).toBe(0);
|
|
expect(passRevenueCents({ status: "active", amountPaid: null, platformFee: null })).toBe(0);
|
|
});
|
|
});
|
|
|
|
describe("validUntilFrom", () => {
|
|
it("rechnet Monate ab dem Kauf, ohne Gültigkeit unbegrenzt", () => {
|
|
expect(validUntilFrom(now, 6)?.toISOString()).toBe("2027-04-02T12:00:00.000Z");
|
|
expect(validUntilFrom(now, null)).toBeNull();
|
|
});
|
|
});
|