import assert from "node:assert/strict"; import { test } from "node:test"; import { inventoryKeys } from "@metis/assets/client"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { createInstance } from "i18next"; import type { ReactNode } from "react"; import { renderToStaticMarkup } from "react-dom/server"; import { I18nextProvider } from "react-i18next"; import { accessKeys } from "../access/access-api"; import { companiesEnglish, companiesSpanish } from "../i18n"; import { profileKeys } from "../profiles/work-profile-api"; import { mailKeys } from "./mail-api"; import { MailConfigurationForm } from "./mail-configuration-form"; import { MailConfigurationsPage } from "./mail-configurations-page"; import { mailboxKeys } from "./mailbox-api"; import { MailboxForm } from "./mailbox-form"; import { MailboxesPage } from "./mailboxes-page"; const company = { id: "0199b200-0000-7000-8000-000000000001", name: "Empresa test", active: true, people: [], contacts: [], sites: [], departments: [], assignments: [], }; async function render(language: string, node: ReactNode) { const i18n = createInstance(); await i18n.init({ lng: language, resources: { es: { companies: companiesSpanish }, en: { companies: companiesEnglish } }, }); const client = new QueryClient({ defaultOptions: { queries: { retry: false, staleTime: Number.POSITIVE_INFINITY } }, }); client.setQueryData(mailKeys.company(company.id), { configurations: [] }); client.setQueryData(profileKeys.company(company.id), { profiles: [] }); client.setQueryData(mailboxKeys.company(company.id), { mailboxes: [], uses: [] }); client.setQueryData(accessKeys.scope(company.id), { items: [], reviews: [], coverage: [] }); client.setQueryData(inventoryKeys.company(company.id), { assets: [], relationships: [], workstations: [], }); try { return renderToStaticMarkup( {node} ); } finally { client.clear(); } } test("correo: listado traducido, alta en cabecera y formularios ocultos", async () => { for (const language of ["es", "en"]) { const html = await render( language, ); assert.equal(html.includes(" { const html = await render( "es", undefined} /> ); for (const label of ["Nuevo perfil", "Nuevo buzón"]) { assert.ok(html.includes(`aria-label="${label}"`)); } assert.ok(html.includes('role="combobox"')); assert.ok(html.includes("Buzón")); assert.equal(html.includes("Cuenta informática"), false); assert.ok(html.includes("IMAP")); assert.ok(html.indexOf("¿Para qué sirve esta configuración?") < html.indexOf("Guardar")); assert.ok(html.includes("varios buzones por persona")); assert.equal(html.includes('type="password"'), false); }); test("Buzones: alta en modal, cuenta opcional y ayuda al final", async () => { for (const language of ["es", "en"]) { const page = await render(language, ); assert.equal(page.includes(" undefined} /> ); assert.ok(form.includes("Cuenta informática relacionada (opcional)")); assert.ok(form.indexOf("¿Qué es un buzón de correo?") < form.indexOf("Guardar")); assert.equal(form.includes('type="password"'), false); });