mirror of
https://github.com/Since-3/Kuma.git
synced 2026-10-12 19:51:17 +00:00
106 lines
3.3 KiB
TypeScript
106 lines
3.3 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
import { POST } from "@/src/app/api/auth/register/route";
|
|
|
|
vi.mock("@/src/lib/supabase/server", () => ({
|
|
createClient: vi.fn(),
|
|
}));
|
|
|
|
vi.mock("@/src/lib/prisma", () => ({
|
|
prisma: {
|
|
manager: { findFirst: vi.fn() },
|
|
user: { findFirst: vi.fn(), create: vi.fn() },
|
|
},
|
|
}));
|
|
|
|
import { createClient } from "@/src/lib/supabase/server";
|
|
import { prisma } from "@/src/lib/prisma";
|
|
|
|
const mockSignUp = vi.fn();
|
|
const mockSupabase = { auth: { signUp: mockSignUp } };
|
|
|
|
beforeEach(() => {
|
|
vi.mocked(createClient).mockResolvedValue(mockSupabase as never);
|
|
vi.mocked(prisma.manager.findFirst).mockReset();
|
|
vi.mocked(prisma.user.findFirst).mockReset();
|
|
vi.mocked(prisma.user.create).mockReset();
|
|
mockSignUp.mockReset();
|
|
});
|
|
|
|
const validBody = {
|
|
email: "neu@example.com",
|
|
password: "Sicher!123",
|
|
name: "Max Mustermann",
|
|
birthday: "1990-05-15",
|
|
plz: "10115",
|
|
city: "Berlin",
|
|
street: "Musterstraße 1",
|
|
houseNumber: "1",
|
|
gender: "Men",
|
|
};
|
|
|
|
function makeRequest(body: Record<string, unknown>) {
|
|
return new Request("http://localhost/api/auth/register", {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify(body),
|
|
});
|
|
}
|
|
|
|
describe("POST /api/auth/register", () => {
|
|
it("gibt 400 zurück wenn Pflichtfelder fehlen", async () => {
|
|
const res = await POST(makeRequest({ email: "test@example.com" }));
|
|
expect(res.status).toBe(400);
|
|
});
|
|
|
|
it("gibt 409 zurück wenn E-Mail bereits als Manager existiert", async () => {
|
|
vi.mocked(prisma.manager.findFirst).mockResolvedValue({
|
|
id: "m-1",
|
|
email: validBody.email,
|
|
} as never);
|
|
|
|
const res = await POST(makeRequest(validBody));
|
|
expect(res.status).toBe(409);
|
|
const data = await res.json();
|
|
expect(data.error).toContain("Manager");
|
|
});
|
|
|
|
it("gibt 409 zurück wenn User bereits existiert", async () => {
|
|
vi.mocked(prisma.manager.findFirst).mockResolvedValue(null);
|
|
vi.mocked(prisma.user.findFirst).mockResolvedValue({
|
|
id: "u-1",
|
|
email: validBody.email,
|
|
} as never);
|
|
|
|
const res = await POST(makeRequest(validBody));
|
|
expect(res.status).toBe(409);
|
|
const data = await res.json();
|
|
expect(data.error).toContain("existiert bereits");
|
|
});
|
|
|
|
it("gibt 400 zurück bei Supabase-Auth-Fehler", async () => {
|
|
vi.mocked(prisma.manager.findFirst).mockResolvedValue(null);
|
|
vi.mocked(prisma.user.findFirst).mockResolvedValue(null);
|
|
mockSignUp.mockResolvedValue({
|
|
data: { user: null },
|
|
error: { message: "Email rate limit exceeded" },
|
|
});
|
|
|
|
const res = await POST(makeRequest(validBody));
|
|
expect(res.status).toBe(400);
|
|
});
|
|
|
|
it("gibt 201 und neuen User zurück bei Erfolg", async () => {
|
|
const fakeUser = { id: "new-1" };
|
|
const createdUser = { id: "new-1", email: validBody.email, name: validBody.name };
|
|
|
|
vi.mocked(prisma.manager.findFirst).mockResolvedValue(null);
|
|
vi.mocked(prisma.user.findFirst).mockResolvedValue(null);
|
|
mockSignUp.mockResolvedValue({ data: { user: fakeUser }, error: null });
|
|
vi.mocked(prisma.user.create).mockResolvedValue(createdUser as never);
|
|
|
|
const res = await POST(makeRequest(validBody));
|
|
expect(res.status).toBe(201);
|
|
const data = await res.json();
|
|
expect(data.user.email).toBe(validBody.email);
|
|
});
|
|
});
|