178 lines
4.5 KiB
TypeScript
178 lines
4.5 KiB
TypeScript
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")
|
|
})
|
|
})
|