mirror of
https://github.com/Since-3/Kuma.git
synced 2026-10-12 21:41:17 +00:00
124 lines
3.6 KiB
TypeScript
124 lines
3.6 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
import { POST } from "@/src/app/api/auth/register/employee/route";
|
|
|
|
vi.mock("@/src/lib/supabase/server", () => ({
|
|
createClient: vi.fn(),
|
|
}));
|
|
|
|
vi.mock("@/src/lib/prisma", () => ({
|
|
prisma: {
|
|
employee: { findUnique: vi.fn() },
|
|
},
|
|
}));
|
|
|
|
import { createClient } from "@/src/lib/supabase/server";
|
|
import { prisma } from "@/src/lib/prisma";
|
|
|
|
const mockSignUp = vi.fn();
|
|
const mockSupabase = { auth: { signUp: mockSignUp } };
|
|
|
|
const validToken = "valid-token-abc";
|
|
const validEmployee = {
|
|
email: "employee@example.com",
|
|
isOnboarded: false,
|
|
onboardingTokenExpiry: new Date(Date.now() + 3600000),
|
|
};
|
|
|
|
beforeEach(() => {
|
|
vi.mocked(createClient).mockResolvedValue(mockSupabase as never);
|
|
vi.mocked(prisma.employee.findUnique).mockReset();
|
|
mockSignUp.mockReset();
|
|
});
|
|
|
|
const validBody = {
|
|
token: validToken,
|
|
email: "employee@example.com",
|
|
password: "Sicher!123",
|
|
firstName: "Anna",
|
|
lastName: "Schmidt",
|
|
};
|
|
|
|
let ipCounter = 0;
|
|
|
|
function makeRequest(body: Record<string, unknown>) {
|
|
// Each test gets a unique IP to avoid triggering the in-memory rate limiter
|
|
const ip = `10.0.0.${++ipCounter}`;
|
|
return new Request("http://localhost/api/auth/register/employee", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
"x-forwarded-for": ip,
|
|
},
|
|
body: JSON.stringify(body),
|
|
});
|
|
}
|
|
|
|
describe("POST /api/auth/register/employee", () => {
|
|
it("gibt 400 zurück wenn Pflichtfelder fehlen", async () => {
|
|
const res = await POST(makeRequest({ token: validToken }));
|
|
expect(res.status).toBe(400);
|
|
});
|
|
|
|
it("gibt 401 zurück bei ungültigem Token", async () => {
|
|
vi.mocked(prisma.employee.findUnique).mockResolvedValue(null);
|
|
|
|
const res = await POST(makeRequest(validBody));
|
|
expect(res.status).toBe(401);
|
|
const data = await res.json();
|
|
expect(data.error).toContain("Ungültiger Token");
|
|
});
|
|
|
|
it("gibt 401 zurück bei bereits abgeschlossenem Onboarding", async () => {
|
|
vi.mocked(prisma.employee.findUnique).mockResolvedValue({
|
|
...validEmployee,
|
|
isOnboarded: true,
|
|
} as never);
|
|
|
|
const res = await POST(makeRequest(validBody));
|
|
expect(res.status).toBe(401);
|
|
});
|
|
|
|
it("gibt 401 zurück bei falschem E-Mail im Token", async () => {
|
|
vi.mocked(prisma.employee.findUnique).mockResolvedValue({
|
|
...validEmployee,
|
|
email: "andere@example.com",
|
|
} as never);
|
|
|
|
const res = await POST(makeRequest(validBody));
|
|
expect(res.status).toBe(401);
|
|
});
|
|
|
|
it("gibt 401 zurück bei abgelaufenem Token", async () => {
|
|
vi.mocked(prisma.employee.findUnique).mockResolvedValue({
|
|
...validEmployee,
|
|
onboardingTokenExpiry: new Date(Date.now() - 1000),
|
|
} as never);
|
|
|
|
const res = await POST(makeRequest(validBody));
|
|
expect(res.status).toBe(401);
|
|
const data = await res.json();
|
|
expect(data.error).toContain("abgelaufen");
|
|
});
|
|
|
|
it("gibt 400 zurück bei schwachem Passwort", async () => {
|
|
vi.mocked(prisma.employee.findUnique).mockResolvedValue(validEmployee as never);
|
|
|
|
const res = await POST(makeRequest({ ...validBody, password: "schwach" }));
|
|
expect(res.status).toBe(400);
|
|
const data = await res.json();
|
|
expect(data.error).toContain("Passwort");
|
|
});
|
|
|
|
it("gibt 201 zurück bei erfolgreicher Registrierung", async () => {
|
|
vi.mocked(prisma.employee.findUnique).mockResolvedValue(validEmployee as never);
|
|
mockSignUp.mockResolvedValue({
|
|
data: { user: { id: "emp-1" } },
|
|
error: null,
|
|
});
|
|
|
|
const res = await POST(makeRequest(validBody));
|
|
expect(res.status).toBe(201);
|
|
const data = await res.json();
|
|
expect(data.success).toBe(true);
|
|
});
|
|
});
|