feat(people): adapt person user flows to status model

This commit is contained in:
2026-06-19 01:05:33 +02:00
parent 01d89cd21b
commit 8e6a00c2a9
8 changed files with 75 additions and 31 deletions
@@ -1,5 +1,6 @@
import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest"
import type { PrismaClient } from "@/generated/prisma/client"
import { normalizeEmail } from "@/lib/email"
import { createTestPerson, createTestUser } from "../helpers/factories"
import {
resetIntegrationTestDatabase,
@@ -58,7 +59,9 @@ describe("createPersonUserUseCase", () => {
// No User record created
await expect(
prisma.user.findUnique({ where: { email: "john@example.test" } }),
prisma.user.findUnique({
where: { emailNormalized: normalizeEmail("john@example.test") },
}),
).resolves.toBeNull()
})
@@ -109,16 +112,19 @@ describe("createPersonUserUseCase", () => {
// User record should exist with derived name
expect(person.userId).not.toBeNull()
if (!person.userId) throw new Error("Expected linked user")
const user = await prisma.user.findUniqueOrThrow({
where: { id: person.userId! },
where: { id: person.userId },
})
expect(user).toMatchObject({
name: "Admin User",
email: "admin@example.test",
role: "ADMIN",
isActive: true,
status: "ACTIVE",
})
expect(user.activatedAt).toBeInstanceOf(Date)
expect(user.passwordChangedAt).toBeInstanceOf(Date)
})
it("creates Person and User for all real roles (MANAGER, STAFF, VIEWER)", async () => {
@@ -143,9 +149,10 @@ describe("createPersonUserUseCase", () => {
where: { lastName: suffix },
})
expect(person.userId).not.toBeNull()
if (!person.userId) throw new Error("Expected linked user")
const user = await prisma.user.findUniqueOrThrow({
where: { id: person.userId! },
where: { id: person.userId },
})
expect(user.role).toBe(role)
expect(user.name).toBe(`Person ${suffix}`)
@@ -165,7 +172,7 @@ describe("createPersonUserUseCase", () => {
})
const user = await prisma.user.findUniqueOrThrow({
where: { email: "maria@example.test" },
where: { emailNormalized: normalizeEmail("maria@example.test") },
})
expect(user.name).toBe("Maria Garcia")
})
@@ -183,13 +190,14 @@ describe("createPersonUserUseCase", () => {
})
const user = await prisma.user.findUniqueOrThrow({
where: { email: "hash-test@example.test" },
where: { emailNormalized: normalizeEmail("hash-test@example.test") },
})
expect(user.password).not.toBe("plaintext-password")
expect(user.passwordHash).not.toBe("plaintext-password")
if (!user.passwordHash) throw new Error("Expected password hash")
const { verifyPassword } = await import("@/lib/security")
await expect(
verifyPassword("plaintext-password", user.password),
verifyPassword("plaintext-password", user.passwordHash),
).resolves.toBe(true)
})
})