Estrategia de pruebas

  • Unitarias: modelos, reglas, métricas y clasificación.
  • Adaptadores: capacidades, normalización, errores y read-only mediante fixtures.
  • API: health, engines, análisis, historial y autorización.
  • Frontend: lint, build y prueba de cliente HTTP/estados.
  • Integración: servicios Docker solo cuando el perfil del motor esté disponible.
  • Escenarios: catálogo de 50 casos, 10 marcados de alto/crítico.
  • Matriz M1: backend/tests/test_core_matrix.py ejecuta parametrizadamente las 50 entradas, verifica cobertura de reglas, limitaciones, evidencia incompleta y las fronteras 0/1/49/50/79/80/100. El reporte reproducible se obtiene con python -m pytest tests/test_core_matrix.py -q.

La suite base no depende de credenciales ni de servicios externos; esto mantiene CI reproducible.

ANALYSIS-01 añade backend/tests/test_analysis_rules.py y amplía la matriz de 50 escenarios: comprueba el catálogo de 15 reglas analíticas y cuatro hallazgos de capability, categoría, severidad, motores aplicables, evidencia/recomendación, HIGH_IMPACT, evidencia incompleta y el orden real de rules_applied.

ANALYSIS-02 añade backend/tests/test_analysis_evidence.py: cubre evidencia exacta, conjunto vacío, muestra acotada, límite, timeout y validación del contrato. Verifica que el reporte exponga denominador, tamaño observado, límite y duración, y que solo la evidencia exacta publique porcentaje; las pruebas mock de MongoDB y CouchDB verifican sus scopes y tiempos de inspección.

REPORT-01 añade backend/tests/test_exports.py: cubre exportación JSON/CSV, cabeceras de descarga, columnas del CSV, redacción de una URI sintética, roles no autorizados, formato inválido, reporte inexistente y contrato OpenAPI. No utiliza secretos ni datos reales.

REPORT-02 añade backend/tests/test_history.py: cubre filtros, paginación, contrato versionado, compatibilidad del listado heredado, dos reportes antes/después, motores distintos, evidencia incompleta, ausencia y OpenAPI. Usa SQLite en memoria y fixtures sintéticos; no consulta motores ni guarda secretos.

UI-03 añade pruebas de cliente para la página vacía, filtros, paginación, selección acotada de comparación, respuesta incompatible y descarga JSON/CSV con nombre seguro. El flujo manual confirma detalle, limitaciones y que no se muestran deltas cuando el backend declara la evidencia incompatible.

UI-04 añade pruebas de cliente para el aviso de evidencia exacta, muestra e incompleta, y para el mensaje que restringe reintentos a lecturas. El checklist manual verifica teclado, foco visible, etiquetas, contraste, capability, riesgo, límites, errores y que nunca se reintenta automáticamente un análisis.

AUDIT-01 añade backend/tests/test_audit.py: cubre el contrato de auditoría, consulta exclusiva de administrador, denegaciones registradas, filtros por actor/fecha, rango inválido, redacción de secretos, retención y migración de una tabla SQLite heredada. Usa datos sintéticos y SQLite en memoria.

UI-02 amplía frontend/src/api.test.ts: cubre la consulta del catálogo de operaciones, payload incompleto y bloqueo de capability no declarada antes del envío. Los errores semánticos o de contrato permanecen verificados por test_api.py en backend.

CASS-01 añade mocks del driver para fixture mode, health, scope por keyspace, timeout, permisos, driver ausente y redacción de secretos. CASS-02 normaliza metadata CQL limitada. CASS-03 añade backend/tests/test_cassandra_safety.py para auditar la lista cerrada de SELECT, rechazar scans de filas sin partition key y verificar que un timeout genera evidencia incompleta sin aprobación. backend/tests/test_cassandra_integration.py usa Cassandra Docker con autenticación/autorizarción y un rol sintético SELECT-only; comprueba health, metadata y que un INSERT es rechazado. CASS-04 añade scripts/run_cassandra_scenarios.py, sus 16 resultados sintéticos y backend/tests/test_cassandra_scenarios.py: cubren tipos, obligatoriedad, eliminación, renombre, operaciones CQL no equivalentes y metadata incompleta sin leer filas reales.

E2E-03 añade scripts/run_e2e_release.py y backend/tests/test_e2e_release.py: el gate ejecuta el smoke Docker aislado, exige que el análisis live del fixture tarde menos de dos segundos y confirma igualdad del hash de la fuente sintética antes/después. También provoca un timeout contra un puerto local sin servicio y exige evidencia incompleta con una limitación visible. El reporte JSON/Markdown no conserva hash, URI, credenciales ni documentos; CI lo ejecuta después de backend, frontend, Compose, smoke y E2E-02.

SEC-02 añade backend/tests/test_secure_configuration.py: cubre que solo se resuelvan referencias env:, perfiles que rechazan secretos o TLS incompletos, rotación de la llave sin reescribir reportes, y opciones TLS verificables de MongoDB, CouchDB y Cassandra. scripts/scan_secrets.py revisa código y configuración versionada para bloquear URI con credenciales, tokens y llaves privadas; el job secret-scan lo ejecuta en CI sin acceder a valores reales.

DOC-02 añade scripts/check_documentation.py y backend/tests/test_documentation_artifacts.py: el checker recorre enlaces locales del README/guía, exige el walkthrough de health/readiness, backup/restore, troubleshooting por motor y compara las variables de .env.example con la matriz versionada. scripts/check_openspec.py comprueba desde un checkout limpio que el cambio OpenSpec versionado conserva sus artefactos y escenarios. Un enlace roto, variable sin descripción, placeholder no resuelto o artefacto OpenSpec ausente detiene el gate.

ACAD-01 añade scripts/check_academic_documents.py y backend/tests/test_academic_documents.py: verifican los entregables de visión, SRS y SAD, sus metadatos, enlaces, referencias RF/RNF, diagramas, secciones obligatorias y ausencia de placeholders. El mismo gate se ejecuta en CI sin requerir LibreOffice ni datos personales adicionales.

ACAD-02 añade scripts/build_academic_evidence.py y backend/tests/test_academic_evidence.py: derivan el bundle JSON/Markdown de los resultados E2E versionados, cubren los 50 escenarios y los 14 críticos, preservan los tres casos incompletos, comprueban la matriz API/UI, la ausencia de mutación, el límite de timeout y el log sanitizado. El gate valida que el bundle no quede obsoleto y conserva capturas SVG reproducibles sin secretos ni datos reales.