metis-desk/.artifacts/server-runtime-security/packages-test.log
David c863cc6d96 feat: add unpublished share component and publication operation summary
- Introduced `UnpublishedShare` component for displaying empty state with actions for assigning and viewing history.
- Added `PublicationOperationSummary` component to summarize publication context and actions based on the current state.
- Implemented `CompanyNetworkShareDetail` to manage and display network share details for companies.
- Created `NetworkShareResourceTitle` for collapsible display of resource names with accessibility features.
- Developed `ResourceDetailActions` for managing resource actions like edit, activate/deactivate, and delete.
- Added `ResourceRevisionHistory` to display the history of resource revisions with detailed information.
- Implemented a comprehensive audit script for network share detail UI, including accessibility checks and error handling.
2026-10-26 18:45:30 +01:00

847 lines
97 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

• turbo 2.9.14
• Packages in scope: @metis/assets, @metis/companies, @metis/core, @metis/identity, @metis/relationship-contracts, @metis/resources, @metis/web, @repo/rdx-ddd, @repo/rdx-ui, @repo/rdx-utils, @repo/shadcn-ui, @repo/typescript-config
• Running test in 12 packages
• Remote caching disabled
@metis/core:test: cache bypass, force executing 2283a7af50b4c3f8
@repo/rdx-ddd:test: cache bypass, force executing b722cdfdd985a9bd
@metis/relationship-contracts:test: cache bypass, force executing 97138537b462262f
@repo/rdx-ui:test: cache bypass, force executing 08ae8a00e21c47c8
@repo/rdx-ui:test: $ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/select-with-action.test.tsx src/selection-components.test.tsx src/entity-list.test.tsx src/compact-collections.test.tsx src/entity-column-visibility.test.tsx src/time-line.test.tsx src/count-badge.test.tsx src/scrollable-tabs.test.tsx src/field-sections.test.tsx src/phone-link.test.tsx src/lib/reorder-items.test.ts src/lib/text-search.test.ts src/remote-option-list.test.tsx src/dialog-help.test.tsx
@metis/core:test: $ node --import tsx --test src/common/dto/response/get-health.response.dto.test.ts src/web/navigation/shared/browser-navigation.test.ts src/web/http/shared/api/csrf-fetch.test.ts
@repo/rdx-ddd:test: $ node --import tsx --test src/domain-model.test.ts
@metis/relationship-contracts:test: $ node --import tsx --test --test-isolation=none src/*.test.ts
@metis/core:test: ✔ el contrato de estado exige un timestamp UTC y un estado conocido (3.491333ms)
@metis/core:test: ✔ el endpoint de estado no acepta parámetros de consulta (0.467504ms)
@repo/rdx-ddd:test: ✔ UniqueID genera UUID v7 distintos, conserva UUID existentes y rechaza identificadores inválidos (16.529152ms)
@repo/rdx-ddd:test: ✔ los Value Objects validan y comparan valores semánticos por tipo (1.795317ms)
@repo/rdx-ddd:test: ✔ entidades y agregados comparan identidad y tipo, independientemente de sus atributos (0.901109ms)
@repo/rdx-ddd:test: ℹ tests 3
@repo/rdx-ddd:test: ℹ suites 0
@repo/rdx-ddd:test: ℹ pass 3
@repo/rdx-ddd:test: ℹ fail 0
@repo/rdx-ddd:test: ℹ cancelled 0
@repo/rdx-ddd:test: ℹ skipped 0
@repo/rdx-ddd:test: ℹ todo 0
@repo/rdx-ddd:test: ℹ duration_ms 686.598555
@metis/core:test: ✔ las escrituras leen la sesión actual de Query y siguen su rotación y eliminación (35.987833ms)
@metis/core:test: ✔ GET, HEAD y OPTIONS funcionan sin sesión y no envían tokens suministrados por el llamador (1.830917ms)
@metis/core:test: ✔ mantiene cuerpos JSON, binarios, headers, cancelación y respuestas de error sin reintentar (5.538151ms)
@metis/core:test: ✔ rechaza tokens ausentes o inválidos y destinos externos antes de enviar una petición (0.795407ms)
@metis/relationship-contracts:test: ✔ referencias UUID estables, normalizadas, inmutables y con proveedor coherente (5.848454ms)
@metis/relationship-contracts:test: ✔ namespaces canónicos, sin identificadores de tabla, espacios ni segmentos vacíos (0.601005ms)
@metis/relationship-contracts:test: ✔ el catálogo valida propietarios, namespaces, duplicados y definiciones (6.202157ms)
@metis/relationship-contracts:test: ✔ el catálogo crea una copia profundamente inmutable sin congelar la entrada (0.655106ms)
@metis/relationship-contracts:test: ✔ relaciones dirigidas, simétricas y derivadas respetan su semántica declarativa (0.630506ms)
@metis/relationship-contracts:test: ✔ consulta estricta: límites, cursores y ausencia de privilegios del navegador (4.238939ms)
@metis/relationship-contracts:test: ✔ validación de ámbito, tipo y sentido de consulta sin conceder autorización (1.849017ms)
@metis/relationship-contracts:test: ✔ orígenes y páginas conservan referencias sin mezclar compañías (2.407522ms)
@metis/relationship-contracts:test: ✔ servicios de prueba por lotes y errores compatibles con Result de Metis (1.398613ms)
@metis/relationship-contracts:test: ✔ el grafo de dependencias del paquete es acíclico y ajeno a módulos funcionales (46.056524ms)
@metis/relationship-contracts:test: ✔ las importaciones internas de producción no contienen ciclos ni imports privados (2.882526ms)
@metis/relationship-contracts:test: ✔ capacidades semánticas explícitas sin registrar proveedores ficticios (2.20472ms)
@metis/relationship-contracts:test: ✔ rol semántico opcional conserva la compatibilidad de vistas comunes sin metadatos libres (2.559123ms)
@metis/relationship-contracts:test: ℹ tests 13
@metis/relationship-contracts:test: ℹ suites 0
@metis/relationship-contracts:test: ℹ pass 13
@metis/relationship-contracts:test: ℹ fail 0
@metis/relationship-contracts:test: ℹ cancelled 0
@metis/relationship-contracts:test: ℹ skipped 0
@metis/relationship-contracts:test: ℹ todo 0
@metis/relationship-contracts:test: ℹ duration_ms 758.843724
@metis/core:test: ✔ estado de ficha: tablas independientes, aislamiento entre quince propietarios y metadatos ajenos conservados (11.979711ms)
@metis/core:test: ✔ estado de ficha: metadatos malformados, ámbitos externos y valores incompatibles no se restauran (3.683334ms)
@metis/core:test: ✔ History mantiene URL, filtros, Atrás/Adelante, cierre y suscripciones sin entradas duplicadas (1.708015ms)
@metis/core:test: ✔ las redirecciones internas rechazan destinos externos, barras invertidas y caracteres de control (0.353103ms)
@metis/core:test: ✔ el retorno reutiliza la entrada exacta del listado y conserva el estado ajeno (0.672406ms)
@metis/core:test: ✔ el contexto de retorno valida versión, coordenadas, ámbito y filtros sin guardar registros (5.683653ms)
@metis/core:test: ✔ las consultas Unicode válidas no pierden contexto al superar 2000 caracteres codificados (4.601642ms)
@metis/core:test: ✔ retorno de detalle y listado conviven sin aceptar el ámbito de otro propietario (1.791716ms)
@metis/core:test: ℹ tests 14
@metis/core:test: ℹ suites 0
@metis/core:test: ℹ pass 14
@metis/core:test: ℹ fail 0
@metis/core:test: ℹ cancelled 0
@metis/core:test: ℹ skipped 0
@metis/core:test: ℹ todo 0
@metis/core:test: ℹ duration_ms 1011.240179
@repo/rdx-ui:test: ✔ la tabla compacta conserva semántica y enlaces sin herramientas de exploración (20.120785ms)
@repo/rdx-ui:test: ✔ los valores ausentes comparten criterio con EntityTable y cero permanece visible (1.09631ms)
@repo/rdx-ui:test: ✔ carga y error sin datos no afirman vacío; caché obsoleta conserva registros (8.211876ms)
@repo/rdx-ui:test: ✔ la ampliación identifica el contenido controlado sin añadir controles a colecciones pequeñas (4.124038ms)
@repo/rdx-ui:test: ✔ EntityTable mantiene búsqueda, columnas y paginación con su contrato anterior (30.357779ms)
@repo/rdx-ui:test: ✔ preview controlado: recuperar la ampliación muestra el origen con identidad estable sin perder el modo local (6.643461ms)
@repo/rdx-ui:test: ✔ contador: conserva cero y formatea el total por idioma (33.088805ms)
@repo/rdx-ui:test: ✔ contador: carga y error muestran ausencia de total, conservando una cifra anterior si existe (2.578524ms)
@repo/rdx-ui:test: ✔ la ayuda breve respeta la capacidad efectiva, también con fuentes ampliadas (1.03721ms)
@repo/rdx-ui:test: ✔ auto y expanded reservan 40rem al formulario y 20rem al panel (0.281502ms)
@repo/rdx-ui:test: ✔ el contenido inline conserva descripción, ámbito, ejemplos, orientación e icono (11.139203ms)
@repo/rdx-ui:test: ✔ las columnas elegidas se restauran al volver a crear la tabla, incluidas las que llegan después (63.243081ms)
@repo/rdx-ui:test: ✔ las preferencias quedan aisladas por lista y no se aplican cuando no se solicita persistencia (11.309504ms)
@repo/rdx-ui:test: ✔ datos locales inválidos no rompen el listado y solo se aceptan valores booleanos (0.571606ms)
@repo/rdx-ui:test: ✔ almacenamiento bloqueado o sin cuota permite seguir utilizando la selección local (0.428904ms)
@repo/rdx-ui:test: ✔ buscar columnas ignora tildes y mayúsculas, conserva ñ y no modifica visibilidad (1.006309ms)
@repo/rdx-ui:test: ✔ los grupos conservan orden, omiten vacíos y deduplican IDs sin perder columnas sin grupo (0.458504ms)
@repo/rdx-ui:test: ✔ restaurar preferencias vacías recupera defaults actuales sin tocar otras tablas (7.992174ms)
@repo/rdx-ui:test: ✔ los contadores distinguen visibilidad, total y coincidencias en es/en (0.171702ms)
@repo/rdx-ui:test: ✔ listado remoto: recupera columnas por ámbito y protege nombre y acciones (14.616634ms)
@repo/rdx-ui:test: ✔ los rangos vacíos y la última página nunca muestran índices fuera del conjunto (2.15052ms)
@repo/rdx-ui:test: ✔ el listado pagina el conjunto y repite su rango conservando controles accesibles (50.379262ms)
@repo/rdx-ui:test: ✔ la búsqueda local reduce el conjunto completo antes de paginar y permite limpiarla (9.939791ms)
@repo/rdx-ui:test: ✔ el texto formado solo por espacios se puede borrar sin confundir vacío con ausencia de coincidencias (7.182766ms)
@repo/rdx-ui:test: ✔ la búsqueda genérica ignora acentos y Unicode equivalente, manteniendo ñ y el texto escrito (34.009913ms)
@repo/rdx-ui:test: ✔ el orden inicial ascendente se indica en la cabecera y se aplica antes de paginar (6.816263ms)
@repo/rdx-ui:test: ✔ una columna explícita puede establecer un orden inicial descendente (8.266176ms)
@repo/rdx-ui:test: ✔ el orden inicial ignora acciones y columnas sin valor comparable (7.65397ms)
@repo/rdx-ui:test: ✔ las tablas sin columnas ordenables conservan el orden recibido (7.172666ms)
@repo/rdx-ui:test: ✔ el orden inicial mantiene la estabilidad en empates y se indica con el listado vacío (9.74699ms)
@repo/rdx-ui:test: ✔ una búsqueda controlada conserva los resultados filtrados por la pantalla (5.054447ms)
@repo/rdx-ui:test: ✔ carga, error y búsqueda vacía se distinguen de un listado sin registros (27.20225ms)
@repo/rdx-ui:test: ✔ el rango y la configuración también se traducen en inglés (6.992464ms)
@repo/rdx-ui:test: ✔ acciones: disparador de solo icono con etiqueta accesible y menú contextual (5.755253ms)
@repo/rdx-ui:test: ✔ acciones: operación principal visible con nombre accesible y secundarias en el menú (5.48605ms)
@repo/rdx-ui:test: ✔ acciones: conserva la restricción de la principal y evita menús sin secundarias (3.623233ms)
@repo/rdx-ui:test: ✔ el estado activo se distingue en verde del inactivo (0.570005ms)
@repo/rdx-ui:test: ✔ acciones: siempre última, compacta y anclada a la derecha, aunque se declare primero (13.153421ms)
@repo/rdx-ui:test: ✔ los textos comunes mantienen claves, idiomas y parámetros del rango (0.232602ms)
@repo/rdx-ui:test: ✔ las celdas vacías muestran un guion largo en es/en y conservan cero, textos y controles (115.602762ms)
@repo/rdx-ui:test: ✔ las columnas opcionales empiezan ocultas sin ocultar identificación ni acciones obligatorias (4.664943ms)
@repo/rdx-ui:test: ✔ Nombre ordena sin tildes ni mayúsculas antes de paginar, en español e inglés (14.421132ms)
@repo/rdx-ui:test: ✔ Nombre tiene prioridad inicial aunque otra columna comparable aparezca antes (5.855854ms)
@repo/rdx-ui:test: ✔ Nombre conserva empates entre acentos, mayúsculas y Unicode compuesto al ordenar descendente (4.940946ms)
@repo/rdx-ui:test: ✔ paginación por cursor: navegación accesible y límites sin inventar totales (0.631306ms)
@repo/rdx-ui:test: ✔ estados presentacionales: carga, datos anteriores y recuperación son mutuamente distinguibles (0.291403ms)
@repo/rdx-ui:test: ✔ carga inicial conserva estructura, no anuncia cero registros y no fabrica acciones (5.837154ms)
@repo/rdx-ui:test: ✔ refetch y error posterior muestran los datos disponibles sin skeletons (8.489378ms)
@repo/rdx-ui:test: ✔ error inicial, vacío válido y filtros sin coincidencias tienen contenidos distintos en es/en (15.19764ms)
@repo/rdx-ui:test: ✔ el contrato de navegación rechaza páginas mal formadas y ordenaciones desconocidas (0.660006ms)
@repo/rdx-ui:test: ✔ navegación controlada ordena y pagina realmente sin alterar el consumidor no controlado (4.539042ms)
@repo/rdx-ui:test: ✔ quitar sección conserva todos los campos y su obligatoriedad sin mutar el origen (1.791416ms)
@repo/rdx-ui:test: ✔ copiar remapea secciones conservando campos y reglas con identidades independientes (0.452605ms)
@repo/rdx-ui:test: ✔ secciones visuales ordenadas, abiertas inicialmente y campos sin sección (9.347286ms)
@repo/rdx-ui:test: ✔ consulta compacta conserva grupos, campos sin sección y avisos sin tarjetas anidadas (3.627333ms)
@repo/rdx-ui:test: ✔ pestañas de grupos conservan controles ocultos, orden y campos sin grupo, omitiendo grupos vacíos (13.122021ms)
@repo/rdx-ui:test: ✔ el editor ofrece asas etiquetadas para secciones y campos, deshabilitadas al guardar (77.577413ms)
@repo/rdx-ui:test: ✔ soltar antes o después del destino conserva el orden de los demás elementos (1.820617ms)
@repo/rdx-ui:test: ✔ destinos inválidos y posiciones sin cambio no producen una nueva ordenación (4.465141ms)
@repo/rdx-ui:test: ✔ reordenar mantiene identidades, secciones y obligatoriedad sin modificar los objetos (0.235202ms)
@repo/rdx-ui:test: ✔ la comparación parcial pliega vocales, caja y representaciones Unicode equivalentes (5.34385ms)
@repo/rdx-ui:test: ✔ ñ conserva identidad compuesta y descompuesta y otras escrituras no se transliteran (0.441004ms)
@repo/rdx-ui:test: ✔ puntuación técnica, números y espacios interiores siguen siendo significativos (3.929337ms)
@repo/rdx-ui:test: ✔ vacíos y valores sin texto no serializan objetos arbitrarios (0.402304ms)
@repo/rdx-ui:test: ✔ formatea números españoles y conserva extensiones para visualización y llamada (1.384012ms)
@repo/rdx-ui:test: ✔ preserva números internacionales no españoles sin inventar agrupaciones (0.332403ms)
@repo/rdx-ui:test: ✔ el enlace telefónico usa el número formateado y mantiene un nombre accesible (8.427978ms)
@repo/rdx-ui:test: ✔ selector remoto: selección compacta al principio, radios etiquetados y orden recibido sin paginación local (49.757158ms)
@repo/rdx-ui:test: ✔ selector remoto: vacío, carga y error no se confunden y errores ocultan filas obsoletas (7.105665ms)
@repo/rdx-ui:test: ✔ pestañas desplazables: conserva identidad, selección y etiquetas largas sin añadir focos al SSR (26.301442ms)
@repo/rdx-ui:test: ✔ el selector agrupa la acción etiquetada sin convertirla en envío de formulario (24.357124ms)
@repo/rdx-ui:test: ✔ el selector deshabilitado protege ambas acciones y admite selección sin botón (5.921454ms)
@repo/rdx-ui:test: ✔ La capacidad contextual admite presupuestos propios sin acoplarlos al viewport (0.857508ms)
@repo/rdx-ui:test: ✔ La pérdida de capacidad cierra sin abrir modal y los eventos repetidos no publican estado (0.618806ms)
@repo/rdx-ui:test: ✔ selección visual: vacío con acciones separadas y ficha elegida sin controles de envío (14.594334ms)
@repo/rdx-ui:test: ✔ selección visual: pendiente, deshabilitado y bloqueo protegen las acciones correspondientes (5.650852ms)
@repo/rdx-ui:test: ✔ PickerList: búsqueda etiquetada, selección única y opciones indisponibles visibles (31.267387ms)
@repo/rdx-ui:test: ✔ PickerList: estados de carga y vacío no presentan opciones falsas (16.674153ms)
@repo/rdx-ui:test: ✔ el rango del selector usa la entidad y su plural, nunca el título de la acción (50.190861ms)
@repo/rdx-ui:test: ✔ acciones multipaso: requisitos bloquean avance y guardado en cada paso (5.022046ms)
@repo/rdx-ui:test: ✔ acciones multipaso: guardar pendiente impide avanzar y retroceder (1.978018ms)
@repo/rdx-ui:test: ✔ línea temporal: conserva el orden aportado, fechas semánticas, autor y contenido (11.536707ms)
@repo/rdx-ui:test: ✔ línea temporal vacía: muestra el mensaje del consumidor como estado (0.589105ms)
@repo/rdx-ui:test: ℹ tests 83
@repo/rdx-ui:test: ℹ suites 0
@repo/rdx-ui:test: ℹ pass 83
@repo/rdx-ui:test: ℹ fail 0
@repo/rdx-ui:test: ℹ cancelled 0
@repo/rdx-ui:test: ℹ skipped 0
@repo/rdx-ui:test: ℹ todo 0
@repo/rdx-ui:test: ℹ duration_ms 2521.731449
@metis/identity:test: cache bypass, force executing 420e86a3143935a0
@metis/resources:test: cache bypass, force executing 33e88dc379e8557b
@metis/identity:test: $ node --import tsx --test src/api/domain/user.aggregate.test.ts src/api/application/global-resource-authorization.test.ts src/api/infrastructure/persistence/user-persistence.mapper.test.ts src/api/infrastructure/security/scrypt-password-hasher.test.ts src/web/shared/api/identity-api.test.ts
@metis/resources:test: $ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/api/application/application-coincidence.test.ts src/api/domain/resource-catalog.test.ts src/api/domain/resource.test.ts src/api/domain/resource-template-propagation.test.ts src/api/application/resource-lifecycle.test.ts src/web/catalog/shared/catalog.test.tsx src/web/resources/shared/resources.test.tsx src/web/resources/list/helpers/resource-columns.test.tsx src/web/resources/list/helpers/resource-list-preferences.test.tsx src/web/resources/shared/resource-values.test.ts src/api/domain/template-sections.test.ts src/web/catalog-fields/select/catalog-field-selection.test.tsx src/api/domain/directory-domain.test.ts src/api/domain/network-share.test.ts src/api/domain/resource-scope.test.ts src/api/infrastructure/persistence/resource-scope-reader.test.ts src/api/application/resource-scope.test.ts src/api/application/resource-reference-contracts.test.ts src/api/domain/global-resource.test.ts src/web/global-applications/shared/global-applications.test.tsx src/api/domain/operating-system-identity.test.ts src/api/application/global-operating-system-contracts.test.ts src/api/application/global-operating-system-policy.test.ts src/web/resources/shared/ui/resource-characteristic-control.test.tsx
@metis/resources:test: ✔ R2.6: nombre y proveedor son señales, nunca equivalencia confirmada (7.128265ms)
@metis/resources:test: ✔ R2.6: preserva tildes, puntuación, abreviaturas, ediciones, versiones y números (0.479904ms)
@metis/resources:test: ✔ R2.6: homónimos genéricos se mantienen débiles y los UUID nunca se sustituyen (43.117395ms)
@metis/identity:test: ✔ resources.global.manage exige sesión vigente, flag persistido e identidad bootstrap (9.83189ms)
@metis/identity:test: ✔ el administrador inicial no se puede crear ni actualizar inactivo (7.528144ms)
@metis/identity:test: ✔ actualizar es idempotente, conserva identidad y cambiar contraseña invalida sesiones (0.909405ms)
@metis/identity:test: ✔ crear genera UUID v7 y rehidratar conserva el UUID original (9.253154ms)
@metis/identity:test: ✔ el mapper reconstruye Value Objects y conserva la identidad y valores persistidos (5.292731ms)
@metis/identity:test: ✔ una inconsistencia persistida falla sin generar un identificador sustituto ni filtrar datos (8.799152ms)
@metis/resources:test: ✔ F2: SO global público tipado, sin contaminación de aplicaciones ni perfiles (6.677039ms)
@metis/resources:test: ✔ F2: elegibilidad de SO exige stock real y campos globales (0.477303ms)
@metis/resources:test: ✔ F2: contrato 3 y gates de SO independientes; aplicaciones no abren SO (0.484803ms)
@metis/resources:test: ✔ F3: cualquier escritor valida identidad publicada, corrección documental e historial (101.309296ms)
@metis/resources:test: ✔ recurso: activar/desactivar conserva datos e historial y repetir estado no añade revisiones (13.422279ms)
@metis/resources:test: ✔ recurso: valida identidades y rechaza actuar sobre recursos ajenos (2.046512ms)
@metis/resources:test: ✔ recurso: propaga el bloqueo por asociaciones y permite desactivar (1.254107ms)
@metis/resources:test: ✔ recurso: elimina y la repetición devuelve ausencia sin efectos adicionales (0.848605ms)
@metis/resources:test: ✔ elegibilidad global exige serie exacta y campos globales; las copias no elevan ámbito (2.062912ms)
@metis/resources:test: ✔ schemas discriminan owner, propósito, OS local y proyecciones privadas (9.993858ms)
@metis/resources:test: ✔ requests acotan lotes, consulta, paginación y rechazan privilegios o integración (4.091124ms)
@metis/resources:test: ✔ búsqueda literal conserva ñ, puntuación y espacios; pagina tras filtrar con desempate UUID (5.955935ms)
@metis/resources:test: ✔ R2.5 admite gates configurables; los valores predeterminados siguen cerrados (0.582803ms)
@metis/resources:test: ✔ R2.5: software y perfil se habilitan por separado y requieren catálogo (0.408102ms)
@metis/resources:test: ✔ R2.5: perfil no depende de software ni abre asociaciones con catálogo cerrado (0.238302ms)
@metis/resources:test: ✔ lectores locales: excluyen global y otra compañía incluso si el repositorio los entrega; stockKey no depende del nombre (60.351653ms)
@metis/resources:test: ✔ HTTP actual sin MariaDB: aislamiento con 15 compañías, 50 recursos locales, alta, edición, estado e historial (291.560206ms)
@metis/resources:test: ✔ DNS: normalización explícita, etiqueta única heredada, punto raíz y política ASCII IDN (3.814022ms)
@metis/resources:test: ✔ capacidad estable: la plantilla renombrada sigue siendo dominio y una copia arbitraria no (2.189213ms)
@metis/resources:test: ✔ alta, edición, DNS y archivo usan Resource y conservan su identidad e historial (10.542862ms)
@metis/resources:test: ✔ catálogo: DNS obligatorio protegido, NetBIOS opcional e inicialización idempotente (9.913658ms)
@metis/resources:test: ✔ identificadores de campo: mayúsculas no cambian identidad ni permiten duplicados (1.79451ms)
@metis/resources:test: ✔ global: crear exige UUID v7 y conserva identidad y propietario en edición e idempotencia (31.564085ms)
@metis/resources:test: ✔ global: captura por stockKey, sin depender del nombre traducido de la plantilla (1.930511ms)
@metis/resources:test: ✔ SMB acepta \\NAS-01\Finanzas (2.852317ms)
@metis/resources:test: ✔ SMB acepta \\files.example.local\Docs (0.324302ms)
@metis/resources:test: ✔ SMB acepta \\192.168.5.10\C$ (0.195602ms)
@metis/resources:test: ✔ SMB acepta \\samba\Diseño\Año 2026 (0.355002ms)
@metis/resources:test: ✔ SMB acepta \\NAS\Docs\ (0.333302ms)
@metis/resources:test: ✔ SMB rechaza "" (0.245701ms)
@metis/resources:test: ✔ SMB rechaza "\\\\" (0.304701ms)
@metis/resources:test: ✔ SMB rechaza "\\\\host" (0.143101ms)
@metis/resources:test: ✔ SMB rechaza "\\\\\\share" (1.291808ms)
@metis/resources:test: ✔ SMB rechaza "\\\\host\\\\" (0.576403ms)
@metis/resources:test: ✔ SMB rechaza "C:\\Datos" (0.186401ms)
@metis/resources:test: ✔ SMB rechaza "https://host/share" (0.128301ms)
@metis/resources:test: ✔ SMB rechaza "\\\\host\\share\\.." (0.389002ms)
@metis/resources:test: ✔ SMB rechaza "\\\\host\\share\\." (0.334702ms)
@metis/resources:test: ✔ SMB rechaza "\\\\?\\UNC\\host\\share" (0.258802ms)
@metis/resources:test: ✔ SMB rechaza "\\\\host\\share\\\\child" (0.324602ms)
@metis/resources:test: ✔ SMB rechaza "\\\\host\\share." (0.293701ms)
@metis/resources:test: ✔ SMB rechaza "\\\\host\\ share" (0.1201ms)
@metis/resources:test: ✔ SMB rechaza "\\\\ho st\\share" (0.111101ms)
@metis/resources:test: ✔ SMB rechaza "\\\\host\\bad\u0000" (0.143501ms)
@metis/resources:test: ✔ SMB rechaza "\\\\host\\bad\ud800" (0.180901ms)
@metis/resources:test: ✔ SMB rechaza "\\\\host\\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" (0.115ms)
@metis/resources:test: ✔ SMB: comparación conservadora, alias y Unicode sin transformaciones destructivas (0.602804ms)
@metis/resources:test: ✔ SMB: semántica por stockKey y protección del catálogo sin bloquear etiquetas u obligatoriedad (25.808251ms)
@metis/resources:test: ✔ SMB: alta validada y diagnóstico histórico sin conversión ni revisión (16.481996ms)
@metis/resources:test: ✔ SMB: nuevas altas fijan integración access y rechazan contexto incompatible (13.131176ms)
@metis/resources:test: ✔ F1: identidad completa, edición conocida/no aplicable/desconocida e inactivos (4.170324ms)
@metis/resources:test: ✔ F1: normalización conservadora no equipara ediciones, releases ni ausencia desconocida (0.419903ms)
@metis/resources:test: ✔ F1: evolución de stock personalizada e idempotente; no elimina campos ni cambia obligatoriedad (22.598333ms)
@metis/resources:test: ✔ F1: un catálogo anterior evoluciona sin sobrescribir bindings ni recursos particulares (15.30999ms)
@metis/resources:test: ✔ catálogo de recursos: serie idempotente, UUID v7, características opcionales y protección (36.364714ms)
@metis/resources:test: ✔ ámbitos, tipos, listas, campos externos y disponibilidad por compañía (21.113023ms)
@metis/resources:test: ✔ licencias: ampliar un catálogo previo conserva identidades y disponibilidad (30.613679ms)
@metis/resources:test: ✔ plantillas globales de serie editables: conserva identidad, asociaciones, disponibilidad y cambios al reiniciar (20.056317ms)
@metis/resources:test: ✔ campos globales de serie editables: listas ampliables, tipo fijo y opciones existentes conservadas (14.692186ms)
@metis/resources:test: ✔ sistema operativo: plantilla con uso explícito, copia y ampliación sin sobrescribir definiciones (6.536639ms)
@metis/resources:test: ✔ iconos de recursos: todas las plantillas de serie tienen su icono y el arranque no repone los retirados (7.189642ms)
@metis/resources:test: ✔ iconos de recursos: cambiar y retirar el icono conserva identidad y asociaciones, con guardado idempotente (9.014952ms)
@metis/resources:test: ✔ iconos de recursos: claves desconocidas, cadenas vacías e iconos de campos se rechazan (5.288031ms)
@metis/resources:test: ✔ ámbito: pares válidos y rechazo runtime de propietarios contradictorios o ausentes (12.809475ms)
@metis/resources:test: ✔ ámbito: proyección preparada separada; HTTP local conserva exactamente su contrato (5.830034ms)
@metis/resources:test: ✔ ámbito: edición y propagación locales conservan propietario, UUID e historia; globales son solo lectura (3.693922ms)
@metis/resources:test: ✔ Resource: propaga altas, orden y retiradas conservando cero/falso, valores e historial; repetir no genera revisiones (22.823134ms)
@metis/resources:test: ✔ Resource: los campos retirados no impiden añadir una plantilla completa y no se fusionan por nombre (4.601727ms)
@metis/resources:test: ✔ Resource: retirar secciones conserva solo las necesarias y mover o reincorporar campos aplica el destino (0.564403ms)
@metis/resources:test: ✔ recursos: tipos, valores opcionales y obligatorios, cero/falso y campos desconocidos (13.834681ms)
@metis/resources:test: ✔ recurso: identidad estable, historial, desactivación e idempotencia (3.089518ms)
@metis/resources:test: ✔ buzón como recurso: correo válido, cuenta opcional, cambios auditados y tipo fijo (5.359932ms)
@metis/resources:test: ✔ secciones: nombres, identidades, referencias y un solo nivel (7.456744ms)
@metis/resources:test: ✔ secciones: igualdad, orden, identidad y persistencia JSON (4.973529ms)
@metis/resources:test: ✔ secciones: plantillas globales y locales conservan separación y UUID al editar (7.133841ms)
@metis/resources:test: ✔ secciones de serie: el arranque conserva una plantilla sin grupos y su disponibilidad (20.751821ms)
@metis/resources:test: ✔ especificación: secciones capturadas, edición posterior y obligatoriedad independiente (19.033011ms)
@metis/resources:test: ✔ lector legacy: roundtrip conserva UUID, revisiones, valores, actor, fecha y DTO sin columna scope (18.80371ms)
@metis/resources:test: ✔ lector: solo el adaptador legacy conocido interpreta ausencia; ningún ámbito inválido usa fallback (4.344226ms)
@metis/resources:test: ✔ proyecciones operativas: global sintético se rechaza antes de SQL, el recurso local sin integración no crea proyección (90.595227ms)
@metis/resources:test: ✔ escritor scoped: envía company explícito, preserva la salida legacy y rechaza global (1.59121ms)
@metis/identity:test: ✔ scrypt usa sales distintas y rechaza contraseñas y hashes incorrectos (1853.180717ms)
@metis/identity:test: ✔ la sesión valida la respuesta y conserva el contrato público utilizado por la aplicación (55.411324ms)
@metis/identity:test: ✔ login, configuración inicial, usuarios y contraseñas conservan rutas, body y CSRF (8.455749ms)
@metis/identity:test: ✔ cerrar sesión espera la respuesta de la operación sin perder el token (2.226413ms)
@metis/identity:test: ✔ los errores HTTP no filtran detalles internos y los datos de sesión inválidos se rechazan (4.645028ms)
@metis/identity:test: ℹ tests 11
@metis/identity:test: ℹ suites 0
@metis/identity:test: ℹ pass 11
@metis/identity:test: ℹ fail 0
@metis/identity:test: ℹ cancelled 0
@metis/identity:test: ℹ skipped 0
@metis/identity:test: ℹ todo 0
@metis/identity:test: ℹ duration_ms 2222.266648
@metis/resources:test: ✔ selección múltiple añade un lote sin duplicados y conserva las reglas y el orden existentes (5.371231ms)
@metis/resources:test: ✔ añadir desde una sección asigna solo los campos nuevos a su destino y conserva los existentes (1.200007ms)
@metis/resources:test: ✔ la selección respeta el límite del schema, valida identificadores y rechaza el conjunto vacío (1.526909ms)
@metis/resources:test: ✔ el listado reutiliza tabla, búsqueda y casillas traducidas y conserva las selecciones bloqueadas (84.925191ms)
@metis/resources:test: ✔ L04.2: campos de recursos recuperan orden y página sin heredar otra pestaña (108.230225ms)
@metis/resources:test: ✔ el catálogo muestra plantillas de serie y acción de alta sin formularios junto al listado (79.818562ms)
@metis/resources:test: ✔ los formularios tienen ayuda inferior y selección de campos en diálogo con alta rápida (28.288164ms)
@metis/resources:test: ✔ iconos de recursos: catálogo y selector traducido conservan la selección al editar y copiar (136.908891ms)
@metis/resources:test: ✔ catálogo global: lectura mínima y navegación traducidas, sin administración para ordinarios (25.080845ms)
@metis/resources:test: ✔ R2.4: mutación global invalida solo instalaciones cacheadas que usan su UUID (2.405114ms)
@metis/resources:test: ✔ R2.5: cambio global invalida configuraciones afectadas y preserva otras compañías (0.988706ms)
@metis/resources:test: ✔ SO global: lectura pública es/en conserva identidad estructurada y navegación propia (7.207342ms)
@metis/resources:test: ✔ SO global: invalida software y su catálogo sin refrescar aplicaciones ni perfiles (1.065906ms)
@metis/resources:test: ✔ columnas de características de recursos: identidad, campos nuevos de catálogo, instantáneas y nombres repetidos (18.89631ms)
@metis/resources:test: ✔ columnas elegidas es/en: cero, falso, fecha localizada, unidades y guion para campos ajenos (80.404464ms)
@metis/resources:test: ✔ los campos compartidos conservan un único ID y todos sus contextos de catálogo e instantánea (2.169512ms)
@metis/resources:test: ✔ columnas generales e integración es/en: notas, fechas, autores y referencias semánticas (23.036633ms)
@metis/resources:test: ✔ orden de recursos: aislamiento por compañía y pestaña, incluida Todo (12.15557ms)
@metis/resources:test: ✔ orden de recursos: una URL explícita prevalece sobre la preferencia sin sobrescribirla (0.963306ms)
@metis/resources:test: ✔ preferencias opcionales: datos inválidos y almacenamiento bloqueado no impiden listar (1.311607ms)
@metis/resources:test: ✔ cambiar pestaña limpia el orden y la paginación anteriores conservando la búsqueda (0.358502ms)
@metis/resources:test: ✔ la integración de buzón conserva su configuración explícita y no inventa referencias (1.074906ms)
@metis/resources:test: ✔ los valores iniciales toleran catálogo pendiente y limitan el nombre sin cambiar la entrada (0.961406ms)
@metis/resources:test: ✔ nombre propuesto: prioriza los identificadores de cada plantilla y limita su longitud (21.688226ms)
@metis/resources:test: ✔ nombre propuesto: contempla campos personalizados y descarta valores no identificativos (0.325801ms)
@metis/resources:test: ✔ paso de campos: exige valores obligatorios y acepta cero y respuestas negativas (0.511403ms)
@metis/resources:test: ✔ paso de campos: requiere la dirección de buzón aunque la plantilla la marque opcional (9.011153ms)
@metis/resources:test: ✔ recursos: listado con alta modal y sin formulario visible, en español e inglés (90.267919ms)
@metis/resources:test: ✔ Recursos: las pestañas incluyen plantillas vacías e inactivas y combinan identidad y búsqueda (300.91633ms)
@metis/resources:test: ✔ recurso: ayuda inferior, plantilla con alta rápida y sin asignaciones de recursos (15.70979ms)
@metis/resources:test: ✔ licencia: formulario reutilizable con campos opcionales y ayuda antes de guardar (16.684696ms)
@metis/resources:test: ✔ asistencia: alta de recurso con plantilla específica y características opcionales (6.96304ms)
@metis/resources:test: ✔ alta por pasos: solo muestra la plantilla inicialmente y traduce su navegación (15.75829ms)
@metis/resources:test: ✔ indicador de alta: conserva la plantilla elegida y explica el paso actual en ambos idiomas (10.915263ms)
@metis/resources:test: ✔ recursos: resumen de plantilla con unidades, booleanos traducidos, cero y límite de cuatro (15.005886ms)
@metis/resources:test: ✔ recursos: ficha lateral compacta traducida con cierre, acciones y contenido relacionado (12.13507ms)
@metis/resources:test: ✔ recursos: inventario y panel usan el icono vigente de la plantilla sin cambiar la especificación (16.093892ms)
@metis/resources:test: ✔ dominio: el formulario traduce el contexto pendiente y solo presenta un entorno confirmado (9.634255ms)
@metis/resources:test: ✔ SMB: formulario explica acceso automático o histórico sin selectores incompatibles, es/en (7.856946ms)
@metis/resources:test: ✔ UNC: presentación por segmentos conserva exactamente separadores, Unicode y valores repetidos (4.874728ms)
@metis/resources:test: ✔ campo declarativo: traduce opciones propias y conserva valores que coinciden con el prototipo (31.367581ms)
@metis/resources:test: ℹ tests 125
@metis/resources:test: ℹ suites 0
@metis/resources:test: ℹ pass 125
@metis/resources:test: ℹ fail 0
@metis/resources:test: ℹ cancelled 0
@metis/resources:test: ℹ skipped 0
@metis/resources:test: ℹ todo 0
@metis/resources:test: ℹ duration_ms 4481.717598
@metis/assets:test: cache bypass, force executing f05186512575d0f6
@metis/assets:test: $ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/api/domain/asset-catalog.test.ts src/api/domain/asset.test.ts src/api/domain/asset-template-propagation.test.ts src/api/domain/infrastructure.test.ts src/api/domain/workstation.test.ts src/api/domain/asset-relationship.test.ts src/web/catalog/shared/catalog.test.tsx src/web/assets/shared/inventory.test.tsx src/web/assets/shared/helpers/asset-columns.test.tsx src/web/assets/detail/ui/asset-detail.test.tsx src/web/infrastructure/shared/infrastructure.test.tsx src/api/domain/support.test.ts src/web/support-connections/shared/support.test.tsx src/api/domain/brand.test.ts src/web/brands/shared/brands.test.tsx src/api/domain/template-sections.test.ts src/web/workstations/shared/helpers/workstation-creation.test.ts src/web/workstations/shared/workstation-name.test.ts src/web/workstations/rename/api/rename-workstation.test.ts src/web/assets/list/asset-workstation.test.tsx src/web/assets/select/asset-selection.test.tsx src/web/catalog-fields/select/catalog-field-selection.test.tsx src/api/domain/directory-membership.test.ts src/api/infrastructure/persistence/directory-membership-provider.test.ts src/web/directory-memberships/shared/directory-memberships.test.tsx src/api/domain/network-share-publication.test.ts src/web/network-share-publications/shared/network-share-ui.test.tsx src/api/application/workstation-concurrency.test.ts src/web/workstations/shared/helpers/workstation-asset-availability.test.ts
@metis/assets:test: ✔ WD04.4: revisión obsoleta rechazada antes de reemplazar composición; revisión actual conserva historial (8.181771ms)
@metis/assets:test: ✔ el catálogo inicial es idempotente, con UUID propios y características opcionales (78.501672ms)
@metis/assets:test: ✔ la disponibilidad por compañía conserva el global y los campos desactivados (42.827966ms)
@metis/assets:test: ✔ las plantillas validan ámbito, campos activos e identidad estable al editar (19.171464ms)
@metis/assets:test: ✔ los campos validan listas, igualdad semántica, duplicados y tipo fijo (1.398412ms)
@metis/assets:test: ✔ solo elimina definiciones globales personalizadas que no usan otras plantillas (2.30532ms)
@metis/assets:test: ✔ iconos opcionales: cambio y retirada conservan identidad y asociaciones (18.029154ms)
@metis/assets:test: ✔ el arranque conserva un icono de serie retirado sin cambiar UUID, campos o disponibilidad (48.041211ms)
@metis/assets:test: ✔ los iconos desconocidos o asociados a campos se rechazan (4.78664ms)
@metis/assets:test: ✔ revisión explícita conserva identidades, copias y otras plantillas (28.459043ms)
@metis/assets:test: ✔ plantillas globales de serie editables: conserva identidad, asociaciones, disponibilidad y cambios al reiniciar (32.056475ms)
@metis/assets:test: ✔ campos globales de serie editables: listas ampliables, tipo fijo y opciones existentes conservadas (14.685325ms)
@metis/assets:test: ✔ Las relaciones validan sus extremos, normalizan nombres y distinguen dirección (6.409255ms)
@metis/assets:test: ✔ Retirar conserva UUID, extremos y auditoría; repetir la retirada no modifica el historial (3.303729ms)
@metis/assets:test: ✔ Tipos de relación de serie protegidos, ámbito de compañía y dirección fija (35.609605ms)
@metis/assets:test: ✔ Asset: propaga altas, orden y retiradas conservando cero/falso, valores e historial; repetir no genera revisiones (18.73976ms)
@metis/assets:test: ✔ Asset: los campos retirados no impiden añadir una plantilla completa y no se fusionan por nombre (2.35772ms)
@metis/assets:test: ✔ Asset: retirar secciones conserva solo las necesarias y mover o reincorporar campos aplica el destino (1.001709ms)
@metis/assets:test: ✔ las secciones conservadas desambiguan el nombre respetando el límite de 100 caracteres (0.689206ms)
@metis/assets:test: ✔ Características opcionales, tipos y límites; cero y falso son valores presentes (12.058603ms)
@metis/assets:test: ✔ Activo conserva UUID y revisiones; los cambios iguales son idempotentes (1.260011ms)
@metis/assets:test: ✔ texto largo conserva saltos de línea y rechaza tipos no textuales (0.614705ms)
@metis/assets:test: ✔ estado técnico y uso: asignaciones calculadas, elegibilidad exclusiva/compartida e historial conservado (0.911807ms)
@metis/assets:test: ✔ Fecha de alta opcional: calendario real, independencia de compra, revisiones e idempotencia (3.783933ms)
@metis/assets:test: ✔ sedes archivadas: nuevas referencias rechazadas y referencias anteriores conservadas (3.866933ms)
@metis/assets:test: ✔ Marcas: nombre normalizado, UUID v7, protección de serie, estado e idempotencia (6.603356ms)
@metis/assets:test: ✔ Marcas: SVG estáticos con transparencia, límites y contenido activo rechazado (22.633594ms)
@metis/assets:test: ✔ Marcas: los 23 fabricantes tienen SVG local validado; Clónico no representa una marca (4.68404ms)
@metis/assets:test: ✔ Marcas: añadir, sustituir y quitar SVG conserva identidad, origen y actualización idempotente (3.012325ms)
@metis/assets:test: ✔ Marcas: mapper bidireccional conserva identidad y rechaza persistencia inválida (1.949217ms)
@metis/assets:test: ✔ Marcas: unicidad, edición y eliminación de personalizadas, con protección de serie (14.410223ms)
@metis/assets:test: ✔ pertenencia explícita: un rol, identidad UUID v7 e idempotencia sin nuevas revisiones (4.272737ms)
@metis/assets:test: ✔ promoción y retirada del rol conservan asociación e historial; finalización repetida es inocua (2.570822ms)
@metis/assets:test: ✔ cambio de dominio crea sucesor único y cierre atómico planificado; admite reintentos y rechaza conflictos (1.271011ms)
@metis/assets:test: ✔ capacidad, estado y compañía: rechaza extremos incompatibles sin inferencias de nombre (0.682506ms)
@metis/assets:test: ✔ activos o dominios inactivos conservan vínculos y permiten cerrar o retirar el rol (2.015217ms)
@metis/assets:test: ✔ mapper: rehidratación consistente, UUID conservados y rechazo de revisiones corruptas (2.486122ms)
@metis/assets:test: ✔ contratos estrictos: roles, paginación, UUID, acciones y privilegios arbitrarios (4.468339ms)
@metis/assets:test: ✔ infraestructura: interfaces independientes, varias IP, normalización y UUID v7 (8.647674ms)
@metis/assets:test: ✔ infraestructura: mismo contenido no cambia identidades ni añade revisiones (4.305437ms)
@metis/assets:test: ✔ infraestructura: rechaza nombres/IP duplicados, valores inválidos e identidades ajenas (3.355529ms)
@metis/assets:test: ✔ infraestructura: límites y direcciones repetidas entre interfaces o compañías permitidas (9.370281ms)
@metis/assets:test: ✔ publicación: alta, periodo, cierre idempotente e identidad persistida (5.895051ms)
@metis/assets:test: ✔ publicación: cardinalidad y reintento idéntico no crean periodos (0.742507ms)
@metis/assets:test: ✔ publicación: traslado explícito y replay estable incluso tras finalizar sucesor (1.086709ms)
@metis/assets:test: ✔ publicación: estados, recurso no SMB, identidad y fechas inválidas (1.460512ms)
@metis/assets:test: ✔ publicación: definición compatible con contratos comunes sin rol ni proveedor network (4.319537ms)
@metis/assets:test: ✔ asistencia: UUID v7, historial, cambios semánticos y fechas (5.374746ms)
@metis/assets:test: ✔ asistencia: preferido disponible y entrada estricta (1.19781ms)
@metis/assets:test: ✔ asistencia: varios métodos, duplicados, preferido único y activo retirado (1.849715ms)
@metis/assets:test: ✔ herramientas: protección de serie y desactivación sin perder referencias (0.667206ms)
@metis/assets:test: ✔ asistencia: mapper bidireccional y rechazo de historial inconsistente (13.895819ms)
@metis/assets:test: ✔ secciones: nombres, identidades, referencias y un solo nivel (8.364172ms)
@metis/assets:test: ✔ secciones: igualdad, orden, identidad y persistencia JSON (3.101926ms)
@metis/assets:test: ✔ secciones: plantillas globales y locales conservan separación y UUID al editar (6.358554ms)
@metis/assets:test: ✔ secciones de serie: el arranque conserva una plantilla sin grupos y su disponibilidad (76.108452ms)
@metis/assets:test: ✔ especificación: secciones capturadas, edición posterior y obligatoriedad independiente (27.036531ms)
@metis/assets:test: ✔ Puestos: composición opcional, referencias válidas y límites sin duplicados (10.48149ms)
@metis/assets:test: ✔ Puestos: UUID estable e historial de composición, persona y estado; guardado idéntico idempotente (6.376355ms)
@metis/assets:test: ✔ Puestos: ordenador principal exclusivo, único e independiente del responsable (1.968816ms)
@metis/assets:test: ✔ baja del puesto: libera composición y responsable, conserva historial e identidad y es idempotente (1.511513ms)
@metis/assets:test: ✔ definición real: proveedor, cardinalidad vigente, roles e inmutabilidad (6.101652ms)
@metis/assets:test: ✔ cursor firmado: vinculación a consulta y operador, sin aceptar UUID libres ni alteraciones (3.989534ms)
@metis/assets:test: ✔ extensión de Assets validada: roles y estados cerrados, UUID original y ámbito (4.991243ms)
@metis/assets:test: ✔ ficha de activo es/en: página con dos pestañas, información actual, relaciones y contenido de compañía (135.431608ms)
@metis/assets:test: ✔ historial del activo conserva instantáneas antiguas, interfaces retiradas y conexiones en ambos sentidos, ordenadas por fecha (14.527886ms)
@metis/assets:test: ✔ ficha de activo distingue carga, error y activo inexistente (7.702246ms)
@metis/assets:test: ✔ acciones: crear solo para portátiles, sobremesa y servidores disponibles (4.343426ms)
@metis/assets:test: ✔ acciones: abrir el puesto asociado aunque el activo sea periférico, no operativo o el puesto esté inactivo (1.725911ms)
@metis/assets:test: ✔ acciones: compañía y plantilla correctas; asociaciones solo históricas no bloquean el alta (0.619304ms)
@metis/assets:test: ✔ alta desde activo es/en: composición y ordenador preseleccionados, sede activa y nombre propuesto; edición y compañía se respetan (39.569937ms)
@metis/assets:test: ✔ inventario es/en: crear y ver puesto son acciones visibles fuera del menú (178.706666ms)
@metis/assets:test: ✔ la acción de selección conserva su texto visible como nombre accesible en es/en (26.556725ms)
@metis/assets:test: ✔ selector: comparte búsqueda, pestañas por identidad y columnas del inventario en es/en (178.620812ms)
@metis/assets:test: ✔ selector: filtra conjuntamente por plantilla, nombre, sede y estado; distingue vacío (113.46966ms)
@metis/assets:test: ✔ selector único: controles radio y disparador de diálogo; conserva el alta rápida y el bloqueo (46.163591ms)
@metis/assets:test: ✔ picker: búsqueda rápida disponible durante carga y error, sin anunciar un falso vacío (91.363573ms)
@metis/assets:test: ✔ inventario es/en: icono compacto antes del nombre, plantilla solo textual y ordenación por nombre (54.183256ms)
@metis/assets:test: ✔ columnas de características: identidad, campos nuevos de catálogo, instantáneas y nombres repetidos (30.838961ms)
@metis/assets:test: ✔ columnas elegidas es/en: cero, falso, fecha localizada, unidades y guion para campos ajenos (177.2071ms)
@metis/assets:test: ✔ columnas generales y de red es/en: fechas y autores propios, IP/MAC por interfaz y ausencia real (59.174801ms)
@metis/assets:test: ✔ los campos compartidos conservan un único ID y todos sus contextos de catálogo e instantánea (3.657631ms)
@metis/assets:test: ✔ La capacidad del inventario protege el presupuesto de tabla en el límite real (1.67001ms)
@metis/assets:test: ✔ El resize conserva el contexto abierto al ganar capacidad y nunca abre un modal (1.036806ms)
@metis/assets:test: ✔ Inventario traducido con alta de cabecera y sin formulario junto al listado (176.657254ms)
@metis/assets:test: ✔ Las pestañas incluyen plantillas vacías e inactivas y combinan identidad y búsqueda (275.183342ms)
@metis/assets:test: ✔ El activo ofrece altas relacionadas, ayuda inferior y no encadena una tercera alta (27.131962ms)
@metis/assets:test: ✔ Las fichas leen ambos sentidos y conservan la auditoría de relaciones retiradas (30.722384ms)
@metis/assets:test: ✔ El formulario de tipo de relación presenta ayuda justo antes de sus operaciones (14.860789ms)
@metis/assets:test: ✔ Puestos de trabajo: listado traducido, alta en cabecera y formulario modal (17.666706ms)
@metis/assets:test: ✔ Puestos de trabajo: altas rápidas y ayuda inferior; un activo anidado no ofrece terceras altas (20.642623ms)
@metis/assets:test: ✔ alta de puesto: sede única automática, responsable opcional y cuatro pasos traducidos (19.815418ms)
@metis/assets:test: ✔ la ficha lateral agrupa información y ofrece acciones superiores y enlaces reales (85.128108ms)
@metis/assets:test: ✔ texto largo: área editable con ayuda accesible (5.137631ms)
@metis/assets:test: ✔ las características marcan solo los campos obligatorios y conservan unidad y ayuda (9.321456ms)
@metis/assets:test: ✔ el resumen usa los campos propios de la plantilla, omite vacíos y texto largo y limita a cuatro (8.734552ms)
@metis/assets:test: ✔ alta de activo por pasos: empieza por plantilla, traduce la navegación y bloquea el avance sin selección (22.912737ms)
@metis/assets:test: ✔ el progreso de activos conserva la plantilla y explica los pasos en es/en (22.029632ms)
@metis/assets:test: ✔ las acciones por pasos solo ofrecen guardar al final y bloquean acciones durante el envío (36.262117ms)
@metis/assets:test: ✔ características obligatorias: rechaza ausentes y espacios y conserva cero y falso (0.294802ms)
@metis/assets:test: ✔ nombre propuesto: usa texto de la plantilla, omite marca y vacíos y respeta el límite (4.261525ms)
@metis/assets:test: ✔ diseño del puesto: grupos compactos, columnas por contenedor y resumen sin textos de ausencia (47.947287ms)
@metis/assets:test: ✔ activos del puesto: estado vacío visual traducido y acciones según disponibilidad (36.400717ms)
@metis/assets:test: ✔ diseño del puesto: navegación traducida y acciones bloqueadas durante el guardado (17.506804ms)
@metis/assets:test: ✔ ficha compacta de activo: comparte información, traducciones y acciones sin consultas propias (63.742479ms)
@metis/assets:test: ✔ ordenador principal: tarjetas con selección única, etiquetas es/en y solo los activos del puesto (33.362798ms)
@metis/assets:test: ✔ puestos: URL controla consulta, orden y página y sus enlaces conservan el contexto (26.759559ms)
@metis/assets:test: ✔ Marcas: listado común traducido, filtros y alta modal sin formulario junto a la tabla (104.786425ms)
@metis/assets:test: ✔ Marcas: nombre de serie protegido y ayuda inferior; alta rápida siempre activa (12.414375ms)
@metis/assets:test: ✔ Marcas: eliminar envía CSRF y cuerpo vacío, valida la respuesta y propaga conflictos (29.788078ms)
@metis/assets:test: ✔ Marcas: selector mantiene valores antiguos e inactivos y respeta el límite de alta anidada (14.357486ms)
@metis/assets:test: ✔ Marcas: el campo de serie se identifica por referencia de catálogo, no por el nombre (32.903896ms)
@metis/assets:test: ✔ selección múltiple añade un lote sin duplicados y conserva las reglas y el orden existentes (3.200827ms)
@metis/assets:test: ✔ añadir desde una sección asigna solo los campos nuevos a su destino y conserva los existentes (2.215119ms)
@metis/assets:test: ✔ la selección respeta el límite del schema, valida identificadores y rechaza el conjunto vacío (4.77634ms)
@metis/assets:test: ✔ el listado reutiliza tabla, búsqueda y casillas traducidas y conserva las selecciones bloqueadas (182.992149ms)
@metis/assets:test: ✔ L04.2: campos del catálogo recuperan orden y página desde su URL (207.34043ms)
@metis/assets:test: ✔ el catálogo muestra plantillas de serie y acción de alta sin formularios junto al listado (218.24671ms)
@metis/assets:test: ✔ el catálogo busca nombres sin acentos sin cambiar la consulta ni incluir campos de otras pestañas (90.816145ms)
@metis/assets:test: ✔ los formularios tienen ayuda inferior y reservan el alta rápida al diálogo de selección de campos (86.465119ms)
@metis/assets:test: ✔ las plantillas ofrecen selección visual traducida y conservan el icono al copiar (418.680613ms)
@metis/assets:test: ✔ dominio: roles estructurados, resumen solo de página y enlaces UUID, es/en (53.026918ms)
@metis/assets:test: ✔ tablas: miembro y finalización no se confunden con controlador o pertenencia vigente (13.004678ms)
@metis/assets:test: ✔ activo sin dominio: vacío explícito y asociación solo si el equipo es compatible (21.51993ms)
@metis/assets:test: ✔ activo unido: dominio, rol real, navegación y acciones especializadas (17.452805ms)
@metis/assets:test: ✔ carga y error de consulta no se muestran como dominio vacío (19.706419ms)
@metis/assets:test: ✔ API de lectura: conserva cursor opaco, tipo y ámbito; propaga errores funcionales (40.056641ms)
@metis/assets:test: ✔ traslado usa un único comando atómico, UUID esperado y CSRF; conflicto no se oculta (7.311944ms)
@metis/assets:test: ✔ infraestructura: clasificación de serie independiente del nombre/icono y selección manual prioritaria (2.481815ms)
@metis/assets:test: ✔ infraestructura: el total incluye roles e interfaces, respeta exclusiones manuales y no duplica activos (0.482403ms)
@metis/assets:test: ✔ infraestructura: listado y ficha presentan interfaces/IP en español e inglés, sin puertos (168.625412ms)
@metis/assets:test: ✔ SMB: relaciones paginadas, UNC Unicode y enlaces bidireccionales es/en (48.444089ms)
@metis/assets:test: ✔ SMB: historial conserva periodos y actores y no ofrece modificar periodos finalizados (21.625829ms)
@metis/assets:test: ✔ SMB: vacío real y error de lectura son distintos (18.602311ms)
@metis/assets:test: ✔ SMB: denegación oculta datos previos y carga inicial conserva cabeceras (17.336004ms)
@metis/assets:test: ✔ SMB: transferencia conserva UUID y envía un único comando propietario con CSRF (26.280557ms)
@metis/assets:test: ✔ SMB: búsqueda remota y cursor opaco viajan al servidor (1.79411ms)
@metis/assets:test: ✔ ficha SMB: publicador destacado, datos y timeline real es/en; solo lectura conserva navegación (32.213792ms)
@metis/assets:test: ✔ ficha SMB: vacío, finalizada, carga y denegación son estados distintos (20.941525ms)
@metis/assets:test: ✔ timeline SMB: solo hechos persistidos, UUID estable, traslado y cierre sin sucesor en página (0.617504ms)
@metis/assets:test: ✔ historial v2: utiliza únicamente nombres autorizados aportados y conserva UUID técnicos (9.898359ms)
@metis/assets:test: ✔ asistencia: formulario con alta rápida y ayuda antes de guardar (32.897695ms)
@metis/assets:test: ✔ asistencia: resumen excluye retirados, ordena preferido y conserva la gestión original (11.68357ms)
@metis/assets:test: ✔ asistencia: traducciones y resumen de método (1.515909ms)
@metis/assets:test: ✔ asistencia: resumen documental muestra destino, VPN y preferencia sin acciones de gestión (2.217513ms)
@metis/assets:test: ✔ asistencia: referencia no resuelta conserva el registro con ausencia y explicación (1.243107ms)
@metis/assets:test: ✔ renombrar: usa valores vigentes, normaliza el nombre, valida respuesta y envía CSRF (50.699404ms)
@metis/assets:test: ✔ renombrar: rechaza vacíos, espacios y exceso de longitud antes de realizar peticiones (1.770011ms)
@metis/assets:test: ✔ renombrar: un nombre equivalente no provoca una escritura ni otra revisión (0.996206ms)
@metis/assets:test: ✔ renombrar: propaga puesto ausente y errores del servidor sin escritura posterior (2.868717ms)
@metis/assets:test: ✔ WD04.4: comparte reglas de disponibilidad, retención, ocupación y puesto inactivo (1.139107ms)
@metis/assets:test: ✔ alta: sede necesaria, responsable opcional, composición mínima y ordenador perteneciente al puesto (1.092106ms)
@metis/assets:test: ✔ composición: asigna el activo único, conserva una elección válida y limpia el ordenador retirado (0.309402ms)
@metis/assets:test: ✔ propone un nombre de puesto solo al conocer ordenador principal y sede (1.465709ms)
@metis/assets:test: ℹ tests 154
@metis/assets:test: ℹ suites 0
@metis/assets:test: ℹ pass 154
@metis/assets:test: ℹ fail 0
@metis/assets:test: ℹ cancelled 0
@metis/assets:test: ℹ skipped 0
@metis/assets:test: ℹ todo 0
@metis/assets:test: ℹ duration_ms 6461.234104
@metis/companies:test: cache bypass, force executing 8ec308292708eef7
@metis/companies:test: $ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/api/domain/company.aggregate.test.ts src/api/domain/people.test.ts src/web/companies/shared/companies-page.test.tsx src/web/people/list/people-search.test.tsx src/web/companies/list/company-filters.test.tsx src/web/shared/helpers/company-list-query-state.test.ts src/api/domain/access/access.test.ts src/api/domain/mail-configuration.test.ts src/api/domain/mailbox.test.ts src/web/access/shared/access.test.tsx src/web/mail-configurations/shared/mail.test.tsx src/api/domain/work-profile.test.ts src/web/work-profiles/shared/profile.test.tsx src/api/domain/printer-configuration.test.ts src/web/printer-configurations/shared/printer.test.tsx src/api/domain/application-configuration.test.ts src/web/application-configurations/shared/application.test.tsx src/api/domain/certificate-configuration.test.ts src/web/certificate-configurations/shared/certificate.test.tsx src/web/work-environments/shared/work-environment.test.tsx src/api/domain/telework-authorization.test.ts src/web/telework-authorizations/shared/telework.test.tsx src/api/domain/remote-connection.test.ts src/api/domain/process.test.ts src/web/remote-connections/shared/remote.test.tsx src/web/processes/shared/processes.test.tsx src/web/shared/initials-avatar.test.tsx src/api/infrastructure/company-logo-processor.test.ts src/web/companies/shared/company-avatar.test.tsx src/web/shared/client-contracts.test.ts src/web/infrastructure/shared/helpers/printer-usage.test.ts src/web/workstations/detail/helpers/workstation-relations.test.ts src/web/workstations/detail/helpers/workplace-map-layout.test.ts src/web/workstations/detail/helpers/workstation-dashboard.test.ts src/web/workstations/detail/helpers/workstation-equipment.test.ts src/web/workstations/detail/helpers/workstation-profile-expansion.test.ts src/web/people/shared/helpers/person-organization.test.ts src/web/workstations/detail/ui/workstation-detail.test.tsx src/web/workspace/shared/workspace-routes.test.ts src/web/workspace/view/helpers/sidebar-preference.test.ts src/api/domain/software-installation.test.ts src/web/software-installations/shared/software.test.tsx src/web/software-installations/shared/current-operating-systems.test.tsx src/api/application/directory-context-plan.test.ts src/web/access/list/helpers/access-environment-filter.test.ts src/api/domain/folder-mapping-account.test.ts src/api/application/local-identity-plan.test.ts src/web/access/list/helpers/access-resource-filter.test.ts src/web/folder-mappings/shared/helpers/folder-account-options.test.ts src/web/local-identity-environments/shared/local-identities-ui.test.tsx src/web/workstations/detail/helpers/workplace-node-actions.test.tsx
@metis/companies:test: ✔ contexto AD: creación pura con identidades propias, sin cuentas, grupos ni activos (6.296937ms)
@metis/companies:test: ✔ clasificación independiente del nombre; no se adopta un sistema existente por llamarse AD (4.708628ms)
@metis/companies:test: ✔ se rechazan compañías distintas, referencias inexistentes y entornos sin clasificación (1.187707ms)
@metis/companies:test: ✔ DNS repetido no crea dos entornos; otro dominio comparte sistema y obtiene un entorno distinto (1.165707ms)
@metis/companies:test: ✔ identidad local: vínculo por UUID, alta y retirada idempotentes con identidad e historial protegidos (10.840364ms)
@metis/companies:test: ✔ identidad local: clasificación explícita rechaza AD por sistema o entorno, sin comparar etiquetas (1.215007ms)
@metis/companies:test: ✔ identidad local: crear entorno utiliza AccessWorkspace y conserva cuentas y sistema existentes (2.107713ms)
@metis/companies:test: ✔ catálogos globales no se duplican con adiciones locales y no se admiten grupos anidados (6.466738ms)
@metis/companies:test: ✔ renombrar una cuenta conserva UUID, historial y semántica de repetición; su uso permanece fijo (4.285325ms)
@metis/companies:test: ✔ cerrar una autorización configurada deja retirada pendiente y cerrar una pendiente no inventa un acceso (5.856735ms)
@metis/companies:test: ✔ titulares no se solapan incluso en periodos cerrados; el relevo conserva una retirada anterior (2.467215ms)
@metis/companies:test: ✔ responsabilidad técnica no concede acceso y se permite sobre una cuenta caducada o inactiva (1.652409ms)
@metis/companies:test: ✔ valores reconstruyen UUID y fechas, rechazan fechas imposibles y no permiten credenciales (3.632821ms)
@metis/companies:test: ✔ las referencias UUID se normalizan y no permiten duplicar cuentas variando mayúsculas (1.117006ms)
@metis/companies:test: ✔ aplicaciones: contrato estricto, versión opcional y solo instalada (9.339555ms)
@metis/companies:test: ✔ aplicaciones: UUID, idempotencia, versión auditada, destino fijo y retirada (6.011936ms)
@metis/companies:test: ✔ aplicaciones: ámbito y clasificación explícita, duplicados abiertos y reapertura nueva (2.445614ms)
@metis/companies:test: ✔ aplicaciones: inactividad conserva notas y permite retirada, impide reconfigurar (2.073112ms)
@metis/companies:test: ✔ aplicaciones: persistencia preserva historial y rechaza claves y orden incoherentes (6.620639ms)
@metis/companies:test: ✔ R2.5: global conserva perfil, delivery e historial; disponibilidad distinta de lectura histórica (1.959312ms)
@metis/companies:test: ✔ certificados: contrato estricto, ubicación opcional y límites (7.936347ms)
@metis/companies:test: ✔ certificados: UUID, idempotencia, ubicación auditada, destino fijo y retirada (3.899723ms)
@metis/companies:test: ✔ certificados: ámbito y clasificación explícita, duplicados abiertos y reapertura nueva (3.47202ms)
@metis/companies:test: ✔ certificados: inactividad conserva notas y permite retirada, impide reconfigurar (1.422508ms)
@metis/companies:test: ✔ certificados: persistencia preserva historial y rechaza claves y orden incoherentes (11.004765ms)
@metis/companies:test: ✔ certificados: caducidad inclusiva, revisión y retirada sin perder historial (1.536809ms)
@metis/companies:test: ✔ compañía, contacto y sede tienen UUID v7 propios y se conserva la identidad al editar (5.317131ms)
@metis/companies:test: ✔ la pertenencia impide asociar o editar entidades de otra compañía (1.246807ms)
@metis/companies:test: ✔ la dirección y el teléfono son optativos y se pueden borrar (0.734704ms)
@metis/companies:test: ✔ nombres, email, teléfono y longitud de dirección se validan en los Value Objects (1.627509ms)
@metis/companies:test: ✔ sedes: archivar y reactivar conserva identidad y datos; repetir el estado es idempotente (0.707004ms)
@metis/companies:test: ✔ FolderMapping: cuenta desconocida, cuenta alternativa y cobertura independiente de la necesidad (23.480739ms)
@metis/companies:test: ✔ FolderMapping: ausencia conserva cuenta, null la retira y cada cambio real crea revisión (4.894529ms)
@metis/companies:test: ✔ FolderMapping: rechaza cuenta ausente, otro subtipo, otra persona, caducada o desactivada (5.847235ms)
@metis/companies:test: ✔ FolderMapping: Coverage por grupo exige pertenencia directa de la cuenta y configuración vigente (13.965083ms)
@metis/companies:test: ✔ FolderMapping: cobertura derivada cambia al retirar concesión, necesidad, cuenta o asociación personal (22.087331ms)
@metis/companies:test: ✔ FolderMapping: todas las autorizaciones necesarias deben proceder de la cuenta seleccionada (1.71041ms)
@metis/companies:test: ✔ Correo: UUIDv7, normalización, no-op, historial y retirada explícita (7.329943ms)
@metis/companies:test: ✔ Correo: buzón independiente, vigencia, perfiles, varios buzones y duplicados abiertos (7.996547ms)
@metis/companies:test: ✔ Correo: persistencia conserva identidad e historial y rechaza corrupción (6.223436ms)
@metis/companies:test: ✔ Correo: vinculación explícita del legado conserva UUID e historial, sin inferir propiedad (5.370332ms)
@metis/companies:test: ✔ Buzón: identidad, dirección única, cuenta opcional, ámbito y cambios auditados (4.130724ms)
@metis/companies:test: ✔ Uso de buzón: fechas inclusiva/exclusiva, mismo día, solapes, varias personas e historial (5.335331ms)
@metis/companies:test: ✔ Buzones: mapper conserva identidad y revisiones, rechaza corrupción (6.373938ms)
@metis/companies:test: ✔ personas con datos opcionales no requieren cuenta de acceso y conservan su UUID (5.257931ms)
@metis/companies:test: ✔ departamentos únicos por compañía, ignorando mayúsculas y espacios exteriores (1.232908ms)
@metis/companies:test: ✔ varios departamentos, un único principal y sin periodos solapados (3.37782ms)
@metis/companies:test: ✔ ediciones conservan revisiones y una repetición semántica no añade historial (6.425638ms)
@metis/companies:test: ✔ inactivos no reciben nuevas asignaciones; se conservan y pueden cerrarse las existentes (0.973005ms)
@metis/companies:test: ✔ asignaciones rechazan pertenencias cruzadas y fechas inválidas (1.492209ms)
@metis/companies:test: ✔ la persistencia rechaza periodos inválidos y revisiones que no reflejan el estado actual (2.457215ms)
@metis/companies:test: ✔ impresoras: contratos estrictos, notas opcionales y predeterminada solo vigente (14.394984ms)
@metis/companies:test: ✔ impresoras: UUID, historial, igualdad semántica, destino fijo y retirada terminal (3.674421ms)
@metis/companies:test: ✔ impresoras: duplicados por perfil, predeterminada única y destinos del ámbito (1.981011ms)
@metis/companies:test: ✔ impresoras: indisponibilidad señala revisión y permite notas y retirada (1.558709ms)
@metis/companies:test: ✔ impresoras: rehidratación conserva identidades y detecta corrupción (10.949764ms)
@metis/companies:test: ✔ procesos: contratos estrictos, normalización y límites (8.114347ms)
@metis/companies:test: ✔ procesos: UUID v7, tareas con identidad, actualización idempotente e historial (3.245819ms)
@metis/companies:test: ✔ procesos: completar exige todas resueltas; cierre terminal y sujeto/tareas fijos (3.585621ms)
@metis/companies:test: ✔ procesos: añadir revisiones conserva las resueltas e identidades y no duplica (2.798616ms)
@metis/companies:test: ✔ plantillas: copia de instrucciones, igualdad semántica y cambios independientes (1.214307ms)
@metis/companies:test: ✔ procesos: rehidratación bidireccional y rechazo de raíces/historial alterados (8.623651ms)
@metis/companies:test: ✔ revisión: personales, retirada pendiente y relaciones finalizadas aún configuradas (0.835605ms)
@metis/companies:test: ✔ revisión: incluye configuraciones de perfiles archivados, excluye cerradas y evita duplicar (0.379402ms)
@metis/companies:test: ✔ remotos: origen personal sin detalle, destinos tipados y contrato estricto (6.83686ms)
@metis/companies:test: ✔ remotos: UUID e historial, destino fijo, idempotencia y cierre terminal (4.773242ms)
@metis/companies:test: ✔ remotos: referencias de compañía y duplicados abiertos por recorrido y herramienta (3.190228ms)
@metis/companies:test: ✔ remotos: configuración y autorización independientes; caducidad y revocación no borran acceso (4.63974ms)
@metis/companies:test: ✔ remotos: disponibilidad de origen y destino, retirada y método personalizado (2.33172ms)
@metis/companies:test: ✔ remotos: persistencia conserva auditoría y detecta referencias, claves e historial corruptos (8.793378ms)
@metis/companies:test: ✔ remotos: una sede archivada conserva conexiones existentes pero rechaza nuevas (1.395113ms)
@metis/companies:test: ✔ instalaciones: pertenecen al equipo, admiten SO/aplicaciones y rechazan recursos ajenos y destinos variables (8.228972ms)
@metis/companies:test: ✔ instalaciones: versiones, idempotencia, retirada, revisión y persistencia de historial (19.27237ms)
@metis/companies:test: ✔ licencia del software: opcional, misma compañía y tipo, vigencia, desvinculación e historial idempotente (11.3726ms)
@metis/companies:test: ✔ R2.4: global activo e inactivo separan alta, reconfiguración y recuperación histórica (1.892117ms)
@metis/companies:test: ✔ teletrabajo: ausencia, límites, fechas reales y contrato estricto (5.812651ms)
@metis/companies:test: ✔ teletrabajo: UUID, renovación y revocación auditadas, igualdad y destino fijo (11.062497ms)
@metis/companies:test: ✔ teletrabajo: vigencia inclusiva, programación, caducidad y persona inactiva (3.199928ms)
@metis/companies:test: ✔ teletrabajo: ámbito, unicidad incluso revocada, disponibilidad y retirada (1.224311ms)
@metis/companies:test: ✔ teletrabajo: rehidratación preserva identidad y detecta corrupción de raíz e historial (12.144107ms)
@metis/companies:test: ✔ Perfil: cuenta opcional, UUID, historial, identidad fija e idempotencia (7.777668ms)
@metis/companies:test: ✔ Perfil: desactivar conserva valores e historial, es idempotente y precede al borrado (2.634223ms)
@metis/companies:test: ✔ Perfil: misma persona/dispositivo único vigente, múltiples dispositivos/personas y revisión sin pérdida de datos (1.664614ms)
@metis/companies:test: ✔ Perfil: cuenta autorizada, vigencia inclusiva de caducidad, cierre de autorización y cuenta técnica (1.389712ms)
@metis/companies:test: ✔ Perfil: persistencia conserva revisiones y rechaza raíz o cuenta histórica incoherentes (12.180407ms)
@metis/companies:test: ✔ Perfil: solo un ordenador principal activo admite altas y reactivaciones; el historial se conserva (2.331921ms)
@metis/companies:test: ✔ PNG, JPEG y WebP se normalizan sin recorte y sin metadatos a un avatar ligero (172.951419ms)
@metis/companies:test: ✔ se rechazan archivos vacíos, corruptos, SVG y GIF aunque simulen un MIME válido (1.587614ms)
@metis/companies:test: ✔ se rechazan excesos de peso y dimensión antes de almacenar (5.75085ms)
@metis/companies:test: ✔ los PNG animados se rechazan antes de decodificarlos (3.334529ms)
@metis/companies:test: ✔ el contexto distingue cuentas y grupos del entorno, sin incluir otros entornos o datos globales (5.279646ms)
@metis/companies:test: ✔ recurso contextual: incluye identidades de sistemas distintos sin mezclar necesidades y concesiones ajenas (11.237699ms)
@metis/companies:test: ✔ filtro vacío no incluye elementos ajenos y las rutas validan UUID y contexto de compañía (6.446657ms)
@metis/companies:test: ✔ los catálogos presentan alta mediante acción y no un formulario junto al listado (141.974959ms)
@metis/companies:test: ✔ cuentas ofrecen caducidad opcional y campos sin contraseña (40.697746ms)
@metis/companies:test: ✔ la ayuda explica todos los elementos en ambos idiomas y distingue el ámbito (100.84921ms)
@metis/companies:test: ✔ los ejemplos del sistema orientan sin rellenar datos del alta (7.511445ms)
@metis/companies:test: ✔ las altas rápidas respetan el contexto, ámbito y relaciones históricas (1.66241ms)
@metis/companies:test: ✔ los formularios ofrecen altas relacionadas y el segundo modal evita altas anidadas (163.072283ms)
@metis/companies:test: ✔ aplicaciones: listado sin formularios, alta en cabecera y traducciones (135.824022ms)
@metis/companies:test: ✔ aplicaciones: selectores con alta rápida y ayuda inferior antes de guardar (58.228753ms)
@metis/companies:test: ✔ R2.5: perfil muestra nombre, origen y versión global sin ResourceDTO local ni mezcla de perfiles (70.980628ms)
@metis/companies:test: ✔ certificados: listado sin formularios, alta en cabecera y traducciones (119.637124ms)
@metis/companies:test: ✔ certificados: selectores con alta rápida y ayuda inferior antes de guardar (53.417523ms)
@metis/companies:test: ✔ la compañía de origen es ámbito visible, no un filtro eliminable con Limpiar filtros (237.759723ms)
@metis/companies:test: ✔ directorio: orden y página proceden de URL sin perder la consulta (77.757766ms)
@metis/companies:test: ✔ las subentradas de Personas conservan contexto y reemplazan el filtro de la vista (34.344905ms)
@metis/companies:test: ✔ el dashboard no ofrece selector de compañía y conserva las métricas de cada ámbito (90.861041ms)
@metis/companies:test: ✔ el resumen de compañía es la entrada por defecto y ofrece destinos reales (120.920956ms)
@metis/companies:test: ✔ los índices de catálogos distinguen definiciones globales y variantes de compañía (19.766769ms)
@metis/companies:test: ✔ el listado presenta estado vacío y acceso al alta sin formularios visibles (69.363894ms)
@metis/companies:test: ✖ la ficha presenta datos de la compañía, contactos y acceso a sedes (84.738325ms)
@metis/companies:test: ✔ el formulario de sede ofrece dirección y teléfono opcionales (15.588233ms)
@metis/companies:test: ✖ el formulario de persona distingue contactos de cuentas de acceso y permite datos opcionales (17.906954ms)
@metis/companies:test: ✔ asignar un departamento permite añadir el primero y conserva el selector en edición (34.704796ms)
@metis/companies:test: ✔ el tablero de compañía tiene composición propia, acciones arriba y métricas limitadas a su ámbito (24.390909ms)
@metis/companies:test: ✔ el menú de compañía ordena trabajo y personas por grupos sin repetir las acciones de usuario (37.899825ms)
@metis/companies:test: ✔ el menú muestra el contador de infraestructura: ready (61.337225ms)
@metis/companies:test: ✔ el menú muestra el contador de infraestructura: pending (53.569258ms)
@metis/companies:test: ✔ el menú muestra el contador de infraestructura: error (96.881428ms)
@metis/companies:test: ✔ sedes: listado traducido con filtro de archivadas y solo sedes activas por defecto (56.240281ms)
@metis/companies:test: ✔ la navegación de compañía conserva 21 enlaces reales, sección activa y contexto es/en (122.222342ms)
@metis/companies:test: ✔ el logo sustituye iniciales con URL versionada, dimensiones fijas y carga diferida (19.260367ms)
@metis/companies:test: ✔ sin logotipo aparecen iniciales y las listas consultan la misma caché de compañías (7.821968ms)
@metis/companies:test: ✔ cuentas del mapeo: exige asociación vigente y catálogos activos; no atribuye por login o por perfil (10.24139ms)
@metis/companies:test: ✔ actualización del mapeo: omitir cuenta conserva semántica distinta de retirarla explícitamente; admite revisión capturada (6.392656ms)
@metis/companies:test: ✔ uso de impresora: agrupa perfiles de un mismo equipo y separa pendientes e historial (25.330622ms)
@metis/companies:test: ✔ uso de impresora: referencias sin resolver no se presentan como ausencia de uso (0.472704ms)
@metis/companies:test: ✔ identidades locales: entorno del activo, navegación por UUID y estado vigente en es/en (55.661735ms)
@metis/companies:test: ✔ propietario local: vínculo retirado conserva navegación y no ofrece reasignación (3.36332ms)
@metis/companies:test: ✔ cuenta del mapeo: seleccionar perfil es una acción explícita; el render no infiere ni cambia cuenta (23.725143ms)
@metis/companies:test: ✔ correo: listado traducido, alta en cabecera y formularios ocultos (165.947996ms)
@metis/companies:test: ✔ correo: selectores reutilizables con altas y ayuda inmediatamente antes de guardar (38.36713ms)
@metis/companies:test: ✔ Buzones: alta en modal, cuenta opcional y ayuda al final (112.437073ms)
@metis/companies:test: ✔ L04.2: correo mantiene tabla y criterios mientras faltan sus referencias (39.742638ms)
@metis/companies:test: ✔ Personas conserva búsqueda por nombre, contactos, consulta y distinción ñ/n en es/en (700.766903ms)
@metis/companies:test: ✔ organización: resuelve departamento y cargo vigentes del responsable (1.361612ms)
@metis/companies:test: ✔ organización: sin responsable o asignación no infiere datos desde perfiles ni cargo genérico de persona (1.022608ms)
@metis/companies:test: ✔ organización: periodos semiabiertos, históricos y futuros (0.220902ms)
@metis/companies:test: ✔ organización: varias vigentes conservan todas, principal primero y orden estable sin mutar (10.820695ms)
@metis/companies:test: ✔ organización: dos principales no ocultan información seleccionando una arbitrariamente (0.396603ms)
@metis/companies:test: ✔ organización: aislamiento de compañía y persona, y referencias incompletas (0.214902ms)
@metis/companies:test: ✔ organización: cambios y refetch se derivan de la fuente actual (0.244402ms)
@metis/companies:test: ✔ impresoras: listado sin formularios, alta en cabecera y traducciones (149.230494ms)
@metis/companies:test: ✔ impresoras: selectores con alta rápida y ayuda inferior antes de guardar (82.552995ms)
@metis/companies:test: ✔ L04.2: Procesos recupera búsqueda, cerrados, orden y página en sus enlaces (288.013815ms)
@metis/companies:test: ✔ procesos: listados es/en sin formularios junto a los datos (95.597499ms)
@metis/companies:test: ✔ procesos: alta rápida y ayuda inferior antes del pie (31.226167ms)
@metis/companies:test: ✔ plantillas: instrucciones, desactivación y ayuda global es/en sin datos de compañía (27.359634ms)
@metis/companies:test: ✔ seguimiento: origen personal, revisión actual y edición sin afirmar retirada real; cerrados sin editar (85.085528ms)
@metis/companies:test: ✔ remotos: consulta sin formularios y traducciones (112.66666ms)
@metis/companies:test: ✔ remotos: formulario, altas rápidas y ayuda antes del pie (84.083317ms)
@metis/companies:test: ✔ remotos: origen personal, acceso configurado sin autorización y VPN separada (5.453747ms)
@metis/companies:test: ✔ las consultas de compañías conservan sus rutas y rechazan respuestas inválidas (51.689309ms)
@metis/companies:test: ✔ lectura y guardado de accesos están separados sin cambiar el contrato HTTP (3.39492ms)
@metis/companies:test: ✔ el guardado de usos de buzón mantiene su endpoint y no se confunde con la consulta (4.589727ms)
@metis/companies:test: ✔ los adapters mantienen la ausencia semántica sin modificar los campos del formulario (0.362302ms)
@metis/companies:test: ✔ las instrucciones de proceso conservan el orden y excluyen líneas vacías (0.448102ms)
@metis/companies:test: ✔ la validación de logos conserva tipos permitidos, vacío y límite exacto de tamaño (0.601403ms)
@metis/companies:test: ✔ la tabla espera todas sus referencias y distingue actualización de disponibilidad (1.277208ms)
@metis/companies:test: ✔ un fallo recuperable conserva datos anteriores sin presentarlos como actualizados (1.423609ms)
@metis/companies:test: ✔ una fuente denegada impide mostrar la caché de todo el listado compuesto (0.662404ms)
@metis/companies:test: ✔ dashboard: HTTP 401 conserva la semántica de disponibilidad (34.670707ms)
@metis/companies:test: ✔ dashboard: HTTP 403 conserva la semántica de disponibilidad (0.529403ms)
@metis/companies:test: ✔ dashboard: HTTP 503 conserva la semántica de disponibilidad (0.380402ms)
@metis/companies:test: ✔ dashboard: una lectura correcta valida y conserva la página del proveedor (6.455439ms)
@metis/companies:test: ✔ iniciales y siglas soportan nombres vacíos, Unicode y separadores (2.825424ms)
@metis/companies:test: ✔ el color es estable con variaciones de espacios, mayúsculas y acentos (0.371803ms)
@metis/companies:test: ✔ los colores generados mantienen contraste AA para texto pequeño (3.366729ms)
@metis/companies:test: ✔ el avatar conserva su nombre accesible y puede ser decorativo dentro de un botón etiquetado (9.686882ms)
@metis/companies:test: ✔ OSUI-01/02/17: SO actual desde instalación, independiente de cualquier valor de fábrica (4.73784ms)
@metis/companies:test: ✔ OSUI-03/04/05/18: vacío, pendiente y retirado no son SO actual (35.906204ms)
@metis/companies:test: ✔ OSUI-06/07: varios SO, orden determinista y aplicaciones excluidas (14.671024ms)
@metis/companies:test: ✔ OSUI-08/12: cambiar de activo conserva solo su SO, sin aceptar compañías ajenas (3.189027ms)
@metis/companies:test: ✔ OSUI-09: versión de instalación y redundancia literal sin reglas de fabricante (6.176653ms)
@metis/companies:test: ✔ OSUI-10: referencia no resoluble no significa ausencia; inactiva resoluble conserva información (6.413454ms)
@metis/companies:test: ✔ OSUI-11: error con datos previos, error de resolver y carga no se presentan como vacío (11.006393ms)
@metis/companies:test: ✔ OSUI-13/14: servidor sin puesto y plantilla propia consumen la misma lectura por activo (5.298739ms)
@metis/companies:test: ✔ OSUI-16: presentación es/en y versión opcional (11.770573ms)
@metis/companies:test: ✔ SO global: selector conserva scope y destino SO; la versión instalada sigue separada (0.544704ms)
@metis/companies:test: ✔ REG-SO-01/11: render global configurado, inactivo e histórico conserva nombre, versión y destino es/en (19.128019ms)
@metis/companies:test: ✔ software del puesto es/en: SO actual, versión, enlaces y separación por ordenador sin formularios incrustados (133.23482ms)
@metis/companies:test: ✔ formulario software: recurso fijo en edición, estados permitidos, ayuda y ausencia de persona/perfil (26.459863ms)
@metis/companies:test: ✔ R2.4: nombre, origen y enlace global se resuelven sin ResourceDTO local; licencia continúa particular (36.459824ms)
@metis/companies:test: ✔ teletrabajo: consulta sin formularios y traducciones (76.32017ms)
@metis/companies:test: ✔ teletrabajo: formulario con alta rápida de persona, fechas opcionales y ayuda inferior (22.884341ms)
@metis/companies:test: ✔ teletrabajo: sin autorización no se presupone permiso; persona inactiva requiere revisión (5.312433ms)
@metis/companies:test: ✔ teletrabajo: alta desde un perfil fija la persona y no abre otra alta rápida (7.912649ms)
@metis/companies:test: ✔ teletrabajo es/en: conserva estado documental, vigencia y revisión como mensajes independientes (29.928184ms)
@metis/companies:test: ✔ entorno: reúne varios correos y configuraciones, distingue pendiente, retirada y revisión (2.326714ms)
@metis/companies:test: ✔ entorno: excluye cerradas, otros perfiles, compañías y correo antiguo sin adivinar relaciones (0.908006ms)
@metis/companies:test: ✔ entorno: composición vigente del puesto y datos actuales sin duplicación (0.405603ms)
@metis/companies:test: ✔ entorno: ficha es/en con estados y acciones, sin formularios; muestra falso y varios correos (86.11883ms)
@metis/companies:test: ✔ entorno: carga, fallo parcial sin falsa ficha vacía, perfil inexistente y aviso de archivado (49.515803ms)
@metis/companies:test: ✔ entorno: consulta autorización por persona, común a sus perfiles y sin confundir preparación (31.718194ms)
@metis/companies:test: ✔ entorno: accesos abiertos de la persona y sus orígenes sin confundirlos con configuraciones del perfil (13.256181ms)
@metis/companies:test: ✔ las entidades de los selectores se pluralizan en es/en sin reutilizar el verbo de acción (7.556546ms)
@metis/companies:test: ✔ perfiles: listado es/en, alta en cabecera y ausencia de formulario junto al listado (78.052078ms)
@metis/companies:test: ✔ perfiles: la cabecera breve conserva el motivo completo en la celda de revisión (37.752331ms)
@metis/companies:test: ✔ perfiles: alta en cuatro pasos, sin guardado intermedio y contenido de ayuda conservado (16.708602ms)
@metis/companies:test: ✔ perfiles: selección de persona explícita y cuenta opcional con altas independientes (18.953016ms)
@metis/companies:test: ✔ perfiles: el puesto fijado aporta su ordenador y no selecciona al responsable como usuario (7.437246ms)
@metis/companies:test: ✔ perfiles: requisitos por paso, cuenta opcional y propuesta basada en persona y ordenador (0.295702ms)
@metis/companies:test: ✔ perfiles: el nombre sugerido respeta el límite del contrato (0.249402ms)
@metis/companies:test: ✔ perfiles: resumen con listas, ordenador único y ausencias representadas por guion (4.491827ms)
@metis/companies:test: ✔ perfiles: edición completa con identidad fija aunque el perfil requiera revisión (10.343763ms)
@metis/companies:test: ✔ perfiles: orden y página navegables conservan búsqueda y archivados al abrir entorno (46.514185ms)
@metis/companies:test: ✔ Personas admite actividad en listado y ficha, con los demás criterios de contexto (12.411407ms)
@metis/companies:test: ✔ el catálogo de aplicaciones de compañía conserva cursor, filtros y retorno a ficha (1.992517ms)
@metis/companies:test: ✔ las funcionalidades archivadas no tienen rutas activas (0.768906ms)
@metis/companies:test: ✔ el filtro de plantilla permite abrir listados y fichas de activos y recursos (1.17931ms)
@metis/companies:test: ✔ el filtro de plantilla se limita a los inventarios que conocen sus definiciones (2.33352ms)
@metis/companies:test: ✔ todas las secciones de compañía tienen una ruta propia y el índice es el resumen (3.790232ms)
@metis/companies:test: ✔ los índices de catálogos y los cinco catálogos globales son destinos independientes (0.605605ms)
@metis/companies:test: ✔ las configuraciones conservan la compañía y el UUID del perfil (1.561713ms)
@metis/companies:test: ✔ las rutas desconocidas y los parámetros inválidos no abren una sección por defecto (3.740132ms)
@metis/companies:test: ✔ la ficha de puesto tiene ruta propia, conserva el UUID y rechaza identificadores inválidos (1.21631ms)
@metis/companies:test: ✔ dominios: enlaces a cuentas y grupos limitados al entorno de la compañía (1.889016ms)
@metis/companies:test: ✔ los parámetros de contexto llegan al consumidor sin crear rutas nuevas ni aceptar claves ajenas (1.980017ms)
@metis/companies:test: ✔ catálogo de aplicaciones: UUID global y criterios propios sin compañía ficticia (1.771116ms)
@metis/companies:test: ✔ catálogo SO: ruta específica y filtros, sin confundir con aplicaciones (0.855308ms)
@metis/companies:test: ✔ la barra comienza desplegada sin navegador o sin una preferencia válida (1.59321ms)
@metis/companies:test: ✔ plegar y desplegar persisten la preferencia sin modificar otras claves (5.596634ms)
@metis/companies:test: ✔ un fallo de lectura, escritura o acceso a localStorage no bloquea la barra (0.382203ms)
@metis/companies:test: ✔ la capacidad del shell fuerza modos sin cambiar la preferencia manual (3.417621ms)
@metis/companies:test: ✔ un menú solo libera su modalidad si su presentación pasa a estar disponible fija (0.475902ms)
@metis/companies:test: ✔ layout 640px: 0 asociados y 0 instalaciones (12.159604ms)
@metis/companies:test: ✔ layout 640px: 0 asociados y 3 instalaciones (11.572099ms)
@metis/companies:test: ✔ layout 640px: 1 asociados y 0 instalaciones (4.853941ms)
@metis/companies:test: ✔ layout 640px: 1 asociados y 2 instalaciones (5.623348ms)
@metis/companies:test: ✔ layout 640px: 2 asociados y 3 instalaciones (8.012269ms)
@metis/companies:test: ✔ layout 748px: 0 asociados y 0 instalaciones (1.696314ms)
@metis/companies:test: ✔ layout 748px: 0 asociados y 3 instalaciones (5.206144ms)
@metis/companies:test: ✔ layout 748px: 1 asociados y 0 instalaciones (4.209536ms)
@metis/companies:test: ✔ layout 748px: 1 asociados y 2 instalaciones (5.946551ms)
@metis/companies:test: ✔ layout 748px: 2 asociados y 3 instalaciones (11.711ms)
@metis/companies:test: ✔ layout 900px: 0 asociados y 0 instalaciones (0.995808ms)
@metis/companies:test: ✔ layout 900px: 0 asociados y 3 instalaciones (4.027434ms)
@metis/companies:test: ✔ layout 900px: 1 asociados y 0 instalaciones (2.167919ms)
@metis/companies:test: ✔ layout 900px: 1 asociados y 2 instalaciones (5.506947ms)
@metis/companies:test: ✔ layout 900px: 2 asociados y 3 instalaciones (9.723383ms)
@metis/companies:test: ✔ layout 1200px: 0 asociados y 0 instalaciones (2.965225ms)
@metis/companies:test: ✔ layout 1200px: 0 asociados y 3 instalaciones (8.680874ms)
@metis/companies:test: ✔ layout 1200px: 1 asociados y 0 instalaciones (7.830867ms)
@metis/companies:test: ✔ layout 1200px: 1 asociados y 2 instalaciones (9.36598ms)
@metis/companies:test: ✔ layout 1200px: 2 asociados y 3 instalaciones (12.842509ms)
@metis/companies:test: ✔ layout: dos asociados se reparten por capacidad; sin principal no se fabrican conexiones (8.992576ms)
@metis/companies:test: ✔ preview: conserva límites y publica solo cobertura real de fuentes conocidas (0.489104ms)
@metis/companies:test: ✔ WD04.4: acción estable de presentación, fuera de las relaciones y contadores, sin solapamientos (169.081042ms)
@metis/companies:test: ✔ WD04.5: acciones ordenadas del principal y periférico sin inferir software por categoría (1.56231ms)
@metis/companies:test: ✔ WD04.5: lectura sin permisos de edición, carga/error parcial y activos retirados (0.295002ms)
@metis/companies:test: ✔ WD04.5: distingue instalación, producto global/inactivo y licencia particular (0.619004ms)
@metis/companies:test: ✔ WD04.5: producto particular y gates cerrados no crean acciones administrativas (0.744405ms)
@metis/companies:test: ✔ WD04.5: SO global utiliza la referencia pública y su etiqueta específica (0.296702ms)
@metis/companies:test: ✔ WD04.5: estados terminales, refetch y cambio de principal o compañía no reutilizan acciones antiguas (0.239502ms)
@metis/companies:test: ✔ WD04.5: trigger es/en separado del enlace, tarjetas sin acciones y añadir sin menú (45.090776ms)
@metis/companies:test: ✔ dashboard: ordenador y equipamiento actuales, personas por perfiles y archivados separados (12.703509ms)
@metis/companies:test: ✔ dashboard: sin responsable sigue mostrando usuarios y un puesto desmantelado no cuenta historia como miembros (1.050909ms)
@metis/companies:test: ✔ dashboard: sustituir ordenador resuelve perfiles del nuevo host sin trasladar los anteriores (0.325403ms)
@metis/companies:test: ✔ dashboard: referencias ajenas o principal fuera de composición no aportan relaciones (0.258703ms)
@metis/companies:test: ✔ pendientes: solo pending, perfiles activos, compañía correcta y deduplicación por familia e identidad (2.28972ms)
@metis/companies:test: ✔ último cambio: orden cronológico sin mutación, altas de miembros y campos realmente cambiados (1.290411ms)
@metis/companies:test: ✔ equipamiento: principal válido primero, miembros únicos y secundarios en orden declarado (2.28432ms)
@metis/companies:test: ✔ equipamiento: activos sin principal no adquieren un principal por su tipo o posición (0.327703ms)
@metis/companies:test: ✔ equipamiento: principal fuera de composición se advierte sin añadirlo a miembros (0.257002ms)
@metis/companies:test: ✔ equipamiento: referencia ausente o de otra compañía no inventa datos ni marca principal (0.402704ms)
@metis/companies:test: ✔ equipamiento: vacío y desmantelado no recuperan miembros del historial (0.277903ms)
@metis/companies:test: ✔ equipamiento: averiado sigue asignado y conserva ambos estados originales (0.231902ms)
@metis/companies:test: ✔ expansión: todos abiertos inicialmente y plegado independiente de cada perfil (2.379721ms)
@metis/companies:test: ✔ refetch conserva plegados y filtros individuales, incluso con error o fuentes incompletas (0.660606ms)
@metis/companies:test: ✔ retirada o archivo limpia únicamente el estado del perfil afectado (0.353903ms)
@metis/companies:test: ✔ cambio de compañía, puesto u ordenador restablece todos los perfiles abiertos y los filtros (0.332403ms)
@metis/companies:test: ✔ orden estable y numérico del resumen y los pendientes, sin mutar datos remotos (8.090969ms)
@metis/companies:test: ✔ incluye solo perfiles del ordenador principal, distingue inactivos y deduplica personas (4.241036ms)
@metis/companies:test: ✔ puesto inexistente o sin composición no hereda perfiles de otros activos (0.670205ms)
@metis/companies:test: ✔ persona: responsabilidad y uso son independientes y solo se consideran puestos y perfiles vigentes (0.737507ms)
@metis/companies:test: ✔ ficha de puesto es/en: cabecera, retorno, bloques vacíos y edición modal sin formulario incrustado (75.809262ms)
@metis/companies:test: ✔ un UUID de puesto ausente muestra no encontrado sin cabecera ni edición de otro puesto (2.947618ms)
@metis/companies:test: ✔ ficha de persona es/en: distingue responsabilidad y uso, y enlaza los puestos (5.084331ms)
@metis/companies:test: ✔ ficha: ordenador destacado y periféricos sin repetir, perfiles solo del ordenador y personas deduplicadas (81.550797ms)
@metis/companies:test: ✔ personas y perfiles: carga y error no se presentan como listados vacíos (8.655552ms)
@metis/companies:test: ✔ ficha: no permite crear perfiles si el ordenador está retirado o el puesto está desactivado (36.809924ms)
@metis/companies:test: ✔ historial del puesto es/en: revisiones de más reciente a más antigua con autor y valores de cada momento (8.571952ms)
@metis/companies:test: ✔ personas es/en: enlaces a todos sus puestos bajo responsabilidad, sin confundirlos con puestos usados (43.124762ms)
@metis/companies:test: ✔ menú de compañía es/en: totales en badges alineados y cero real en secciones vacías (30.405185ms)
@metis/companies:test: ✔ ruta de activo de compañía abre la página con información, historial, software y solo sus perfiles (89.102042ms)
@metis/companies:test: ✔ equipamiento es/en: badges de principal, técnico y uso conservan su significado (8.098149ms)
@metis/companies:test: ✔ equipamiento: inventario fallido no se presenta como vacío y permite reintentar (2.602116ms)
@metis/companies:test: ✔ equipamiento: principal inconsistente se explica y no se incorpora como miembro válido (2.237114ms)
@metis/companies:test: ✔ personas y perfiles es/en: expansión contextual, enlaces independientes y resumen cero real (7.239744ms)
@metis/companies:test: ✔ cabecera es/en: responsable largo o ausente, contexto independiente y mapa con resumen (63.437187ms)
@metis/companies:test: ✔ perfiles: lista completa y todos desplegados por defecto, incluso con cincuenta perfiles (71.503033ms)
@metis/companies:test: ✔ perfiles: carga, error y datos retenidos no publican un total como actual (4.834929ms)
@metis/companies:test: ✔ equipamiento: contador conocido cero, uno, cinco y seis; error conserva filas sin publicar total (11.895972ms)
@metis/companies:test: ✔ configuración: cobertura desconocida, revisión y notas permanecen fuera del disclosure técnico (2.395214ms)
@metis/companies:test: ✔ perfiles: una actualización en curso conserva el total conocido y anuncia la actividad (1.53051ms)
@metis/companies:test: ✔ v2.2: dependencia sin principal conserva mapa y resumen y una explicación principal sin tabla vacía (12.899578ms)
@metis/companies:test: ✔ v2.2: un vacío confirmado de perfiles conserva el alta y evita cabeceras de una tabla sin filas (1.185808ms)
@metis/companies:test: ✔ v2.2: soporte distingue perfiles en carga, error, ausencia confirmada y persona no resuelta (2.696816ms)
@metis/companies:test: ✔ v2.2: referencia de principal no resuelta no publica cero pendientes ni ausencia de perfiles (6.174537ms)
@metis/companies:test: ✔ v3: Software conserva los tres estados documentales con la misma representación que las familias (30.234583ms)
@metis/companies:test: ✔ v3: estados técnicos de equipamiento conservan principal y asignación en es/en (15.174392ms)
@metis/companies:test: ✔ responsable es/en: avatar y nombre abren un único popup y la ausencia no ofrece acciones (4.137825ms)
@metis/companies:test: ✔ mapa visual: aísla compañías, deduplica miembros y conserva software y estados reales (11.095368ms)
@metis/companies:test: ✔ mapa es/en: principal solo, vacíos confirmados y error de software conservan navegación y gestión (39.040136ms)
@metis/companies:test: ✔ mapa: composición vacía y sin principal no fabrica relaciones ni instalaciones (1.520409ms)
@metis/companies:test: ✔ contexto de persona: rechaza datos de otra compañía y no ofrece acciones (0.661604ms)
@metis/companies:test: ✔ mapa es/en: carga inicial y carga parcial mantienen estados accesibles (23.346741ms)
@metis/companies:test: ✔ mapa es/en: leyenda con tres conceptos y cobertura explícita sin totales inventados (1.788511ms)
@metis/companies:test: ✔ mapa es/en: revisión de software traducida incluso sin referencia navegable (1.095307ms)
@metis/companies:test: ✔ WD04.4 es/en: acción autorizada, vacío accionable y lectura sin permiso (6.092637ms)
@metis/companies:test: ✔ perfiles del puesto: configuraciones de todos los activos abiertas y destinos accesibles únicos (13.681782ms)
@metis/companies:test: ℹ tests 312
@metis/companies:test: ℹ suites 0
@metis/companies:test: ℹ pass 310
@metis/companies:test: ℹ fail 2
@metis/companies:test: ℹ cancelled 0
@metis/companies:test: ℹ skipped 0
@metis/companies:test: ℹ todo 0
@metis/companies:test: ℹ duration_ms 16304.241322
@metis/companies:test:
@metis/companies:test: ✖ failing tests:
@metis/companies:test:
@metis/companies:test: test at src/web/companies/shared/companies-page.test.tsx:1:6023
@metis/companies:test: ✖ la ficha presenta datos de la compañía, contactos y acceso a sedes (84.738325ms)
@metis/companies:test: AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
@metis/companies:test:
@metis/companies:test: assert.ok(markup.includes("Personas (1)"))
@metis/companies:test:
@metis/companies:test: at TestContext.<anonymous> (/home/david/dev/metis-desk/modules/companies/src/web/companies/shared/companies-page.test.tsx:229:10)
@metis/companies:test: at async Test.run (node:internal/test_runner/test:1404:7)
@metis/companies:test: at async Test.processPendingSubtests (node:internal/test_runner/test:969:7) {
@metis/companies:test: generatedMessage: true,
@metis/companies:test: code: 'ERR_ASSERTION',
@metis/companies:test: actual: false,
@metis/companies:test: expected: true,
@metis/companies:test: operator: '==',
@metis/companies:test: diff: 'simple'
@metis/companies:test: }
@metis/companies:test:
@metis/companies:test: test at src/web/companies/shared/companies-page.test.tsx:1:7439
@metis/companies:test: ✖ el formulario de persona distingue contactos de cuentas de acceso y permite datos opcionales (17.906954ms)
@metis/companies:test: AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
@metis/companies:test:
@metis/companies:test: assert.ok(markup.includes("Esta persona no tiene acceso a Metis Desk"))
@metis/companies:test:
@metis/companies:test: at TestContext.<anonymous> (/home/david/dev/metis-desk/modules/companies/src/web/companies/shared/companies-page.test.tsx:259:10)
@metis/companies:test: at async Test.run (node:internal/test_runner/test:1404:7)
@metis/companies:test: at async Test.processPendingSubtests (node:internal/test_runner/test:969:7) {
@metis/companies:test: generatedMessage: true,
@metis/companies:test: code: 'ERR_ASSERTION',
@metis/companies:test: actual: false,
@metis/companies:test: expected: true,
@metis/companies:test: operator: '==',
@metis/companies:test: diff: 'simple'
@metis/companies:test: }
@metis/companies:test: [ELIFECYCLE] Test failed. See above for more details.
ERROR @metis/companies#test: command (/home/david/dev/metis-desk/modules/companies) /home/david/.nvm/versions/node/v24.20.0/bin/pnpm run test exited (1)
Tasks: 7 successful, 8 total
Cached: 0 cached, 8 total
Time: 31.657s
Failed: @metis/companies#test
ERROR run failed: command exited (1)