see comments

This commit is contained in:
Rajpreet0 2026-07-28 14:33:16 +02:00
parent 9148cfcc1f
commit 0805dcf21d
2 changed files with 132 additions and 3 deletions

View file

@ -15,7 +15,17 @@ import { createAdminClient } from "@/src/lib/supabase/admin";
import { prisma } from "@/src/lib/prisma";
const mockCreateUser = vi.fn();
const mockSupabase = { auth: { admin: { createUser: mockCreateUser } } };
const mockListUsers = vi.fn();
const mockUpdateUserById = vi.fn();
const mockSupabase = {
auth: {
admin: {
createUser: mockCreateUser,
listUsers: mockListUsers,
updateUserById: mockUpdateUserById,
},
},
};
const validToken = "valid-token-abc";
const validEmployee = {
@ -24,10 +34,23 @@ const validEmployee = {
onboardingTokenExpiry: new Date(Date.now() + 3600000),
};
const validBodyWithExtras = {
token: "valid-token-abc",
email: "employee@example.com",
password: "Sicher!123",
firstName: "Anna",
lastName: "Schmidt",
tel: "0123456789",
gender: "female",
qualification: "Trainer B-Lizenz",
};
beforeEach(() => {
vi.mocked(createAdminClient).mockReturnValue(mockSupabase as never);
vi.mocked(prisma.employee.findUnique).mockReset();
mockCreateUser.mockReset();
mockListUsers.mockReset();
mockUpdateUserById.mockReset();
});
const validBody = {
@ -116,9 +139,74 @@ describe("POST /api/auth/register/employee", () => {
error: null,
});
const res = await POST(makeRequest(validBodyWithExtras));
expect(res.status).toBe(201);
const data = await res.json();
expect(data.success).toBe(true);
expect(mockCreateUser).toHaveBeenCalledWith(
expect.objectContaining({
email: validBodyWithExtras.email,
password: validBodyWithExtras.password,
email_confirm: true,
user_metadata: expect.objectContaining({
firstName: validBodyWithExtras.firstName,
lastName: validBodyWithExtras.lastName,
tel: validBodyWithExtras.tel,
gender: validBodyWithExtras.gender,
qualification: validBodyWithExtras.qualification,
role: "employee",
}),
})
);
});
it("verwendet den bestehenden Auth-User erneut, wenn dieser bereits existiert (Retry nach Teilausfall)", async () => {
vi.mocked(prisma.employee.findUnique).mockResolvedValue(validEmployee as never);
mockCreateUser.mockResolvedValue({
data: { user: null },
error: {
code: "email_exists",
message: "A user with this email address has already been registered",
},
});
mockListUsers.mockResolvedValue({
data: { users: [{ id: "emp-1", email: validBody.email }] },
error: null,
});
mockUpdateUserById.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);
expect(mockUpdateUserById).toHaveBeenCalledWith(
"emp-1",
expect.objectContaining({
password: validBody.password,
email_confirm: true,
user_metadata: expect.objectContaining({ role: "employee" }),
})
);
});
it("gibt 400 zurück wenn der Auth-User nach 'email_exists' nicht gefunden wird", async () => {
vi.mocked(prisma.employee.findUnique).mockResolvedValue(validEmployee as never);
mockCreateUser.mockResolvedValue({
data: { user: null },
error: {
code: "email_exists",
message: "A user with this email address has already been registered",
},
});
mockListUsers.mockResolvedValue({ data: { users: [] }, error: null });
const res = await POST(makeRequest(validBody));
expect(res.status).toBe(400);
expect(mockUpdateUserById).not.toHaveBeenCalled();
});
});