From 0d38626f3a7b6e7ad6e6195bef6cc1f4eecb94d1 Mon Sep 17 00:00:00 2001 From: Asis Ferrer Date: Sat, 20 Jun 2026 16:27:36 +0200 Subject: [PATCH] test(cleanup): remove legacy admin users references --- src/actions/person.actions.ts | 2 +- src/actions/user.actions.ts | 2 +- tests/e2e/app.smoke.spec.ts | 10 +- tests/e2e/language-switcher.spec.ts | 4 +- .../use-cases/admin-users-redirect.test.ts | 61 ------------- tests/unit/actions/user.actions.test.ts | 8 +- .../admin-users/admin-users-redirect.test.ts | 91 ------------------- tests/unit/app/users/user.copy.test.ts | 2 +- tests/unit/components/layout/sidebar.test.tsx | 2 - 9 files changed, 14 insertions(+), 168 deletions(-) delete mode 100644 tests/integration/use-cases/admin-users-redirect.test.ts delete mode 100644 tests/unit/app/admin-users/admin-users-redirect.test.ts diff --git a/src/actions/person.actions.ts b/src/actions/person.actions.ts index 7add59d..5611f87 100644 --- a/src/actions/person.actions.ts +++ b/src/actions/person.actions.ts @@ -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() diff --git a/src/actions/user.actions.ts b/src/actions/user.actions.ts index 324d27c..930262e 100644 --- a/src/actions/user.actions.ts +++ b/src/actions/user.actions.ts @@ -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() diff --git a/tests/e2e/app.smoke.spec.ts b/tests/e2e/app.smoke.spec.ts index 2de9f00..ea58185 100644 --- a/tests/e2e/app.smoke.spec.ts +++ b/tests/e2e/app.smoke.spec.ts @@ -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() diff --git a/tests/e2e/language-switcher.spec.ts b/tests/e2e/language-switcher.spec.ts index c0be22c..2d650b0 100644 --- a/tests/e2e/language-switcher.spec.ts +++ b/tests/e2e/language-switcher.spec.ts @@ -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() diff --git a/tests/integration/use-cases/admin-users-redirect.test.ts b/tests/integration/use-cases/admin-users-redirect.test.ts deleted file mode 100644 index 17822b0..0000000 --- a/tests/integration/use-cases/admin-users-redirect.test.ts +++ /dev/null @@ -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) - }) -}) diff --git a/tests/unit/actions/user.actions.test.ts b/tests/unit/actions/user.actions.test.ts index fdfb008..7e3704f 100644 --- a/tests/unit/actions/user.actions.test.ts +++ b/tests/unit/actions/user.actions.test.ts @@ -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") }) }) }) diff --git a/tests/unit/app/admin-users/admin-users-redirect.test.ts b/tests/unit/app/admin-users/admin-users-redirect.test.ts deleted file mode 100644 index 33f3dba..0000000 --- a/tests/unit/app/admin-users/admin-users-redirect.test.ts +++ /dev/null @@ -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") - }) -}) diff --git a/tests/unit/app/users/user.copy.test.ts b/tests/unit/app/users/user.copy.test.ts index 2491cd8..48fa7d4 100644 --- a/tests/unit/app/users/user.copy.test.ts +++ b/tests/unit/app/users/user.copy.test.ts @@ -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 = { diff --git a/tests/unit/components/layout/sidebar.test.tsx b/tests/unit/components/layout/sidebar.test.tsx index caa1877..12ae747 100644 --- a/tests/unit/components/layout/sidebar.test.tsx +++ b/tests/unit/components/layout/sidebar.test.tsx @@ -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<") })