test(cleanup): remove legacy admin users references
This commit is contained in:
@@ -26,7 +26,7 @@ import {
|
||||
import { localizePersonFieldErrors } from "./person.messages"
|
||||
import { localizeUnifiedCreateFieldErrors } from "./user.messages"
|
||||
|
||||
const PERSON_USER_PATH = "/admin/users"
|
||||
const PERSON_USER_PATH = "/people"
|
||||
|
||||
export async function createNewPerson(formData: CreatePersonFormType) {
|
||||
const { dictionary } = await getI18n()
|
||||
|
||||
@@ -23,7 +23,7 @@ import {
|
||||
|
||||
import { localizeUserFieldErrors } from "./user.messages"
|
||||
|
||||
const USERS_PATH = "/admin/users"
|
||||
const USERS_PATH = "/people"
|
||||
|
||||
export async function createUserAction(formData: CreateUserFormType) {
|
||||
const { dictionary } = await getI18n()
|
||||
|
||||
@@ -26,7 +26,7 @@ test.describe("main app smoke", () => {
|
||||
}) => {
|
||||
await setEnglishLocaleCookie(page, baseURL)
|
||||
|
||||
await page.goto("/admin/users")
|
||||
await page.goto("/people")
|
||||
|
||||
await expect(page).toHaveURL(/\/login/)
|
||||
await expect(page.getByLabel("Username")).toBeVisible()
|
||||
@@ -46,15 +46,15 @@ test.describe("main app smoke", () => {
|
||||
).toBeVisible()
|
||||
})
|
||||
|
||||
test("admin can open users and inventory pages", async ({
|
||||
test("admin can open people and inventory pages", async ({
|
||||
baseURL,
|
||||
page,
|
||||
}) => {
|
||||
await signInAsAdmin(page, baseURL)
|
||||
|
||||
await page.getByRole("link", { name: "Users" }).click()
|
||||
await expect(page).toHaveURL(/\/admin\/users/)
|
||||
await expect(page.getByRole("heading", { name: "Users" })).toBeVisible()
|
||||
await page.getByRole("link", { name: "People" }).click()
|
||||
await expect(page).toHaveURL(/\/people/)
|
||||
await expect(page.getByRole("heading", { name: "People" })).toBeVisible()
|
||||
await expect(
|
||||
page.getByRole("cell", { name: "admin@example.test" }),
|
||||
).toBeVisible()
|
||||
|
||||
@@ -125,7 +125,7 @@ test.describe("language switcher", () => {
|
||||
await expect(
|
||||
page.getByRole("link", { name: /Destinatarios/ }),
|
||||
).toBeVisible()
|
||||
await expect(page.getByRole("link", { name: /Usuarios/ })).toBeVisible()
|
||||
await expect(page.getByRole("link", { name: /Personas/ })).toBeVisible()
|
||||
|
||||
await page.getByRole("button", { name: "Añadir" }).click()
|
||||
await expect(page.getByRole("menuitem", { name: /Importar/ })).toBeVisible()
|
||||
@@ -145,7 +145,7 @@ test.describe("language switcher", () => {
|
||||
).toBeVisible()
|
||||
await page.keyboard.press("Escape")
|
||||
|
||||
await page.goto("/admin/users")
|
||||
await page.goto("/people")
|
||||
await expect(page.getByPlaceholder("Buscar...")).toBeVisible()
|
||||
await expect(page.getByRole("searchbox", { name: "Buscar" })).toBeVisible()
|
||||
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest"
|
||||
import type { PrismaClient } from "@/generated/prisma/client"
|
||||
import { createTestPerson, createTestUser } from "../helpers/factories"
|
||||
import {
|
||||
resetIntegrationTestDatabase,
|
||||
startIntegrationTestDatabase,
|
||||
stopIntegrationTestDatabase,
|
||||
} from "../helpers/test-db"
|
||||
|
||||
let prisma: PrismaClient
|
||||
|
||||
beforeAll(async () => {
|
||||
await startIntegrationTestDatabase()
|
||||
const prismaModule = await import("@/lib/prisma")
|
||||
prisma = prismaModule.prisma
|
||||
})
|
||||
|
||||
beforeEach(async () => {
|
||||
await resetIntegrationTestDatabase(prisma)
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await prisma?.$disconnect()
|
||||
await stopIntegrationTestDatabase()
|
||||
})
|
||||
|
||||
describe("/admin/users -> /people redirect routes", () => {
|
||||
it("does not have a /admin/users list page (route is consolidated into /people)", async () => {
|
||||
const fs = await import("node:fs/promises")
|
||||
const path = await import("node:path")
|
||||
|
||||
// /admin/users/page.tsx must still exist (as a redirect stub) — verify it's just a redirect.
|
||||
const adminUsersPage = path.join(
|
||||
process.cwd(),
|
||||
"src/app/(dashboard)/admin/users/page.tsx",
|
||||
)
|
||||
const contents = await fs.readFile(adminUsersPage, "utf-8")
|
||||
expect(contents).toMatch(/redirect\s*\(\s*["']\/people["']\s*\)/)
|
||||
})
|
||||
|
||||
it("resolves a userId back to its linked personId", async () => {
|
||||
// Build a Person<->User link to verify the redirect can find the person by userId.
|
||||
const user = await createTestUser(prisma, {
|
||||
email: "linked@example.test",
|
||||
})
|
||||
const person = await createTestPerson(prisma, {
|
||||
email: "linked@example.test",
|
||||
})
|
||||
await prisma.person.update({
|
||||
where: { id: person.id },
|
||||
data: { userId: user.id },
|
||||
})
|
||||
|
||||
const found = await prisma.person.findFirst({
|
||||
where: { userId: user.id },
|
||||
select: { id: true },
|
||||
})
|
||||
|
||||
expect(found?.id).toBe(person.id)
|
||||
})
|
||||
})
|
||||
@@ -109,7 +109,7 @@ describe("user actions localization", () => {
|
||||
success: true,
|
||||
message: es.admin.users.actions.createSuccess,
|
||||
})
|
||||
expect(mocks.revalidatePath).toHaveBeenCalledWith("/admin/users")
|
||||
expect(mocks.revalidatePath).toHaveBeenCalledWith("/people")
|
||||
})
|
||||
})
|
||||
|
||||
@@ -181,7 +181,7 @@ describe("user actions localization", () => {
|
||||
success: true,
|
||||
message: es.admin.users.actions.updateSuccess,
|
||||
})
|
||||
expect(mocks.revalidatePath).toHaveBeenCalledWith("/admin/users")
|
||||
expect(mocks.revalidatePath).toHaveBeenCalledWith("/people")
|
||||
})
|
||||
})
|
||||
|
||||
@@ -236,7 +236,7 @@ describe("user actions localization", () => {
|
||||
success: true,
|
||||
message: es.admin.users.actions.toggleStatusSuccess,
|
||||
})
|
||||
expect(mocks.revalidatePath).toHaveBeenCalledWith("/admin/users")
|
||||
expect(mocks.revalidatePath).toHaveBeenCalledWith("/people")
|
||||
})
|
||||
})
|
||||
|
||||
@@ -290,7 +290,7 @@ describe("user actions localization", () => {
|
||||
success: true,
|
||||
message: es.admin.users.actions.resetPasswordSuccess,
|
||||
})
|
||||
expect(mocks.revalidatePath).toHaveBeenCalledWith("/admin/users")
|
||||
expect(mocks.revalidatePath).toHaveBeenCalledWith("/people")
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest"
|
||||
|
||||
import { en } from "@/i18n/dictionaries/en"
|
||||
import { es } from "@/i18n/dictionaries/es"
|
||||
|
||||
const mocks = vi.hoisted(() => ({
|
||||
getI18n: vi.fn(),
|
||||
getUsers: vi.fn(),
|
||||
getUserProfileById: vi.fn(),
|
||||
findFirst: vi.fn(),
|
||||
redirect: vi.fn((url: string) => {
|
||||
throw new Error(`REDIRECT:${url}`)
|
||||
}),
|
||||
}))
|
||||
|
||||
vi.mock("@/i18n/server", () => ({
|
||||
getI18n: mocks.getI18n,
|
||||
}))
|
||||
|
||||
vi.mock("@/services/user.service", () => ({
|
||||
getUsers: mocks.getUsers,
|
||||
getUserProfileById: mocks.getUserProfileById,
|
||||
}))
|
||||
|
||||
vi.mock("@/lib/prisma", () => ({
|
||||
prisma: {
|
||||
person: {
|
||||
findFirst: mocks.findFirst,
|
||||
},
|
||||
},
|
||||
default: {
|
||||
person: {
|
||||
findFirst: mocks.findFirst,
|
||||
},
|
||||
},
|
||||
}))
|
||||
|
||||
vi.mock("next/navigation", () => ({
|
||||
redirect: mocks.redirect,
|
||||
}))
|
||||
|
||||
describe("/admin/users routes redirect to /people", () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
mocks.getI18n.mockResolvedValue({ dictionary: en, locale: "en" })
|
||||
})
|
||||
|
||||
it("redirects /admin/users to /people", async () => {
|
||||
const { default: UsersPage } = await import(
|
||||
"@/app/(dashboard)/admin/users/page"
|
||||
)
|
||||
|
||||
expect(() => UsersPage()).toThrow("REDIRECT:/people")
|
||||
expect(mocks.getUsers).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it("redirects /admin/users/[userId]/edit to /people/[personId]/edit when person is found", async () => {
|
||||
mocks.findFirst.mockResolvedValue({ id: "person-99" })
|
||||
|
||||
const { default: EditUserPage } = await import(
|
||||
"@/app/(dashboard)/admin/users/[userId]/edit/page"
|
||||
)
|
||||
|
||||
await expect(
|
||||
EditUserPage({ params: Promise.resolve({ userId: "user-1" }) }),
|
||||
).rejects.toThrow("REDIRECT:/people/person-99/edit")
|
||||
expect(mocks.getUserProfileById).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it("redirects /admin/users/[userId]/edit to /people when person is not found", async () => {
|
||||
mocks.findFirst.mockResolvedValue(null)
|
||||
|
||||
const { default: EditUserPage } = await import(
|
||||
"@/app/(dashboard)/admin/users/[userId]/edit/page"
|
||||
)
|
||||
|
||||
await expect(
|
||||
EditUserPage({ params: Promise.resolve({ userId: "orphan-user" }) }),
|
||||
).rejects.toThrow("REDIRECT:/people")
|
||||
})
|
||||
|
||||
it("still honors Spanish locale when redirecting (does not require dictionary lookups)", async () => {
|
||||
mocks.getI18n.mockResolvedValue({ dictionary: es, locale: "es" })
|
||||
|
||||
const { default: UsersPage } = await import(
|
||||
"@/app/(dashboard)/admin/users/page"
|
||||
)
|
||||
|
||||
expect(() => UsersPage()).toThrow("REDIRECT:/people")
|
||||
})
|
||||
})
|
||||
@@ -3,7 +3,7 @@ import { describe, expect, it } from "vitest"
|
||||
import {
|
||||
formatPersonDepartment,
|
||||
formatUserRole,
|
||||
} from "@/app/(dashboard)/admin/users/_components/user.copy"
|
||||
} from "@/app/(dashboard)/people/_components/user.copy"
|
||||
|
||||
describe("user copy helpers", () => {
|
||||
const roleCopy = {
|
||||
|
||||
@@ -73,8 +73,6 @@ describe("app sidebar (consolidated people management)", () => {
|
||||
createElement(AppSidebar, { copy: en.layout.sidebar }),
|
||||
)
|
||||
|
||||
// No /admin/users link must exist anywhere
|
||||
expect(html).not.toContain("/admin/users")
|
||||
expect(html).not.toContain(">Users<")
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user