import { renderToStaticMarkup } from "react-dom/server" import { beforeEach, describe, expect, it, vi } from "vitest" import { es } from "@/i18n/dictionaries/es" const mocks = vi.hoisted(() => ({ getI18n: vi.fn(), findAllPeople: vi.fn(), findAllItemsWithStock: vi.fn(), findAllAvailableAssets: vi.fn(), findAllItems: vi.fn(), findItemById: vi.fn(), findAllAssets: vi.fn(), findAssignmentById: vi.fn(), createAssignment: vi.fn(), updateAssignment: vi.fn(), push: vi.fn(), toastError: vi.fn(), toastSuccess: vi.fn(), })) vi.mock("@/i18n/server", () => ({ getI18n: mocks.getI18n, })) vi.mock("@/services/person.service", () => ({ PersonService: { findAll: mocks.findAllPeople, }, })) vi.mock("@/services/item.service", () => ({ ItemService: { findAllWithStock: mocks.findAllItemsWithStock, findAll: mocks.findAllItems, findById: mocks.findItemById, }, })) vi.mock("@/services/asset.service", () => ({ AssetService: { findAllAvailable: mocks.findAllAvailableAssets, findAll: mocks.findAllAssets, }, })) vi.mock("@/services/assignment.service", () => ({ AssignmentService: { findById: mocks.findAssignmentById, }, })) vi.mock("@/actions/assignment.actions", () => ({ createAssignment: mocks.createAssignment, updateAssignment: mocks.updateAssignment, })) vi.mock("next/navigation", () => ({ useRouter: () => ({ push: mocks.push, }), useSearchParams: () => ({ get: vi.fn(() => null), }), })) vi.mock("sonner", () => ({ toast: { error: mocks.toastError, success: mocks.toastSuccess, }, })) describe("assignment form pages localization", () => { beforeEach(() => { vi.clearAllMocks() mocks.getI18n.mockResolvedValue({ dictionary: es, locale: "es" }) mocks.findAllPeople.mockResolvedValue([ { id: "person-1", firstName: "Ada", lastName: "Lovelace", }, ]) mocks.findAllItemsWithStock.mockResolvedValue([ { id: "item-1", name: "Laptop", stock: 5, }, ]) mocks.findAllItems.mockResolvedValue([ { id: "item-1", name: "Laptop", stock: 5, }, ]) mocks.findAllAvailableAssets.mockResolvedValue([ { id: "asset-1", itemId: "item-1", serialNumber: "SN-001", }, ]) mocks.findAllAssets.mockResolvedValue([ { id: "asset-1", itemId: "item-1", serialNumber: "SN-001", }, ]) mocks.findItemById.mockResolvedValue({ id: "item-1", name: "Laptop", stock: 5, }) }) it("renders the new assignment page with localized heading and form copy", async () => { const { default: NewAssignmentPage } = await import( "@/app/(dashboard)/assignments/new/page" ) const html = renderToStaticMarkup(await NewAssignmentPage()) expect(html).toContain("Nueva asignación") expect(html).toContain("Persona") expect(html).toContain('option value="">Selecciona una persona') expect(html).toContain("Artículo") expect(html).toContain('option value="">Selecciona un artículo') expect(html).toContain("Cantidad") expect(html).toContain('placeholder="1"') expect(html).toContain("Crear asignación") expect(html).toContain("Ada Lovelace") expect(html).toContain("Laptop") }) it("renders the edit assignment page with localized heading, not-found copy, and submit text", async () => { const { default: EditAssignmentPage } = await import( "@/app/(dashboard)/assignments/[assignmentId]/edit/page" ) mocks.findAssignmentById.mockResolvedValue({ id: "assignment-1", personId: "person-1", itemId: "item-1", assetId: "asset-1", quantity: 1, }) const html = renderToStaticMarkup( await EditAssignmentPage({ params: Promise.resolve({ assignmentId: "assignment-1" }), }), ) expect(html).toContain("Editar asignación") expect(html).toContain("Persona") expect(html).toContain("Artículo") expect(html).toContain("Activo") expect(html).toContain('option value="">Selecciona un activo') expect(html).toContain("Actualizar asignación") expect(html).toContain("Ada Lovelace") expect(html).toContain("Laptop") expect(html).toContain("SN-001") mocks.findAssignmentById.mockResolvedValueOnce(null) const notFoundHtml = renderToStaticMarkup( await EditAssignmentPage({ params: Promise.resolve({ assignmentId: "missing-assignment" }), }), ) expect(notFoundHtml).toContain("Asignación no encontrada") }) })