feat(i18n): localize inventory assignments UI

This commit is contained in:
2026-06-15 00:47:25 +02:00
parent 9b713c42e2
commit bfea2b77ab
13 changed files with 540 additions and 36 deletions
@@ -0,0 +1,177 @@
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(),
findAllRecipients: 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/recipient.service", () => ({
RecipientService: {
findAll: mocks.findAllRecipients,
},
}))
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,
}),
}))
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.findAllRecipients.mockResolvedValue([
{
id: "recipient-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("Destinatario")
expect(html).toContain(
'option value="">Selecciona un destinatario</option>',
)
expect(html).toContain("Artículo")
expect(html).toContain('option value="">Selecciona un artículo</option>')
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",
recipientId: "recipient-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("Destinatario")
expect(html).toContain("Artículo")
expect(html).toContain("Activo")
expect(html).toContain('option value="">Selecciona un activo</option>')
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")
})
})