Files
CRM_AGENTES_CARGA/frontend/src/lib/Reporte_Pruebas.MD

9.2 KiB

Reporte de Pruebas — Anexo 76

Resumen ejecutivo

Herramienta Archivos Pruebas Estado
Backend — pytest 4 11 Pasando
Frontend — Vitest (server) 8 68 Pasando
Frontend — Playwright (E2E) 5 28 Pasando
Total 17 107 Pasando

Backend — pytest (11 pruebas)

Ubicacion: backend/tests/

e2e/test_inventory_flow_anexo24.py — 1 prueba

test_e2e_inventory_flow_import_then_export — la prueba mas importante del repositorio. Simula el flujo completo del negocio:

  1. Crea una factura de importacion TEM con 10 piezas
  2. La procesa — genera movimiento ENTRY en el inventario
  3. Crea una factura de exportacion consumiendo 4 piezas
  4. La procesa — genera CONSUMPTION y DISCHARGE
  5. Verifica que el saldo neto es positivo y menor a 10

integration/ — 5 pruebas

  • test_process_export_endpoint_consumes_existing_balances — exportacion consume saldos existentes correctamente
  • test_process_export_prevents_negative_balance — exportacion no puede consumir mas de lo que hay
  • test_process_endpoint_prevents_double_processing_import — una factura no se puede procesar dos veces
  • test_process_import_endpoint_creates_balance_entries — importacion TEM genera entradas de balance
  • test_process_import_def_does_not_create_balance_entries — importacion DEF no genera entradas de balance

unit/ — 5 pruebas

  • test_net_balance_accounts_for_returns_and_entry_void — balance neto calcula correctamente entradas, consumos, devoluciones y anulaciones
  • test_fifo_consumption_algorithm_uses_oldest_lots_first — algoritmo PEPS consume primero los lotes mas antiguos
  • test_assign_values_iva_lines_currency_me — calculo de IVA en moneda extranjera
  • test_assign_values_iva_lines_currency_mn — calculo de IVA en moneda local
  • test_assign_values_iva_lines_currency_mc — calculo de IVA en moneda manual

Comando

docker exec -it anexo76-backend pytest /app/tests/ -v

Frontend Vitest — 68 pruebas

Vitest corre en Node sin navegador. Prueba funciones puras que reciben datos y devuelven un resultado.

backend.test.ts — 2 pruebas

Verifica que el backend esta disponible desde el contenedor del frontend usando la red interna de Docker.

  • el backend esta corriendo y responde — GET /api/health devuelve 200
  • el endpoint de facturas responde — el endpoint de invoices responde (200, 401, 403 o 422 son validos)

Nota: no se usa docker exec porque el contenedor del frontend no tiene acceso a Docker. Se usa la URL interna http://backend:8000 de la red Docker Compose.

utils.getInvoiceTypeColor.test.ts — 19 pruebas

Prueba que cada tipo de factura devuelve el color Tailwind correcto para mostrarse en la UI.

  • Entradas invalidas (null, undefined, '') devuelven gris por defecto
  • TEM / IMPO TEM -> rojo (bg-red-100)
  • DEF / IMPO DEF -> verde (bg-green-100)
  • MEX / COMP MEX -> morado (bg-purple-100)
  • CAM REG -> azul (bg-blue-100)
  • EXPO / EXDEF / PTERM -> azul (bg-blue-100)
  • IMP REP -> azul claro (bg-sky-100)
  • Tipo desconocido -> gris por defecto

utils.getFileHelpers.test.ts — 9 pruebas

Prueba extraccion de nombres de archivo desde rutas y formateo para mostrar al usuario.

  • null / undefined -> string vacio
  • Ruta normal '/uploads/file.png' -> 'file.png'
  • Ruta con query string '/uploads/file.png?token=123' -> 'file.png' sin el token
  • Con fileType -> 'file.png (PDF)'

utils.getBackendAssetUrl.test.ts — 5 pruebas

Prueba construccion de URLs del backend evitando duplicar /api.

Deuda tecnica identificada: la funcion depende de import.meta.env.VITE_API_URL. Se pasa baseUrl explicitamente en cada test.

  • null / undefined -> string vacio
  • URL completa -> se devuelve sin modificar
  • /api/... con base /api -> evita /api/api/
  • Ruta normal -> URL completa correcta

date-utils.test.ts — 17 pruebas

Prueba conversion de fechas entre zona local y UTC ISO.

  • prepareDateForBackend: vacio -> null, fecha + hora -> ISO string valido
  • loadServerDate: null/undefined -> '', ISO UTC -> YYYY-MM-DD, fecha plana sin modificar
  • addDaysLocal: vacio -> '', suma normal, cambio de mes, ano bisiesto (2024-02-29)
  • getCurrentLocal*: verifica formato con regex — no valor exacto porque cambia cada dia

csv-import-commit-metrics.test.ts — 11 pruebas

Prueba metricas del resultado de importacion CSV.

  • totalSkippedFromCommit: null -> 0, objeto vacio -> 0, suma correcta de campos skipped
  • criticalReferenceGaps: null -> 0, objeto vacio -> 0, campo presente -> su valor
  • referenceStateReady: null -> true, campo booleano respeta el valor

csv-import-status-api.test.ts — 4 pruebas

Prueba isWaitingConfirmationPayload. fetchCsvImportStatus no se prueba porque depende del backend.

  • null / {} -> false
  • { status: 'waiting_confirmation' } -> true
  • { job_id: 'abc', total_rows: 10 } -> true

Comando

docker exec -it anexo76-frontend pnpm test:unit --project server

Frontend Playwright E2E — 28 pruebas

Playwright abre un navegador real y prueba flujos completos con el backend y Keycloak levantados.

Configuracion

  • workers: 1 — las pruebas con login no pueden correr en paralelo
  • headless: false — necesario para estabilidad en Windows
  • timeout: 60000 — Keycloak puede tardar hasta 60 segundos
  • storageState — sesion guardada en e2e/.auth/user.json y reutilizada

auth.setup.ts — 1 prueba

Login inicial con credenciales demo/demo123. Guarda la sesion para reutilizar.

full-flow.spec.ts — 4 pruebas

Conecta backend y frontend — corre pytest primero y si pasa, verifica el frontend.

  • pruebas del backend pasan antes de continuar — ejecuta pytest /app/tests/ y verifica 11 passed
  • Import Invoices TEM carga despues de que backend pasa — URL /invoices + main visible
  • Export Invoices carga despues de que backend pasa — URL /invoices + main visible
  • Reportes de facturas carga despues de que backend pasa — URL /reports + main visible

login.spec.ts — 3 pruebas

  • Login exitoso redirige al dashboard
  • Dashboard muestra h1 visible
  • Credenciales incorrectas se quedan en /login

navigation.spec.ts — 10 pruebas

  • Dashboard carga con h1 visible
  • Header muestra Aduanasoft S.A. de C.V.
  • Menu lateral tiene Audit Logs, Customs Brokers, Fractions, Pedimentos
  • Audit Logs, Customs Brokers, Fraction Sitar y Pedimentos cargan sin error

modules.spec.ts — 10 pruebas

  • Import Invoices TEM y DEF cargan sin error
  • Export Invoices carga sin error
  • Fixed Catalogs, General Catalogs, Transportes, Goods, Settings, Reportes cargan sin error
  • Logout redirige a /login

Comando

# Desde la carpeta frontend en Windows
pnpm test:e2e

# Suite especifica
pnpm test:e2e --grep "Flujo completo"
pnpm test:e2e --grep "Login"
pnpm test:e2e --grep "Modulos"
pnpm test:e2e --grep "Navegacion"

Archivos que NO se prueban con Vitest

Archivo Razon
api.ts Depende de fetch, cookies, window, document
auth.ts Depende de Keycloak JS, cookies, window
session-manager.ts Depende de window, setInterval, eventos DOM
sso.ts Depende de Keycloak JS y browser
csv-import-pending.ts Depende de localStorage
csv-import-session.ts Depende de sessionStorage
csv-upload-row-count.ts Depende de File.text(), API del browser
fetchCsvImportStatus Depende de api que necesita el backend

Pruebas pendientes para el futuro

Necesitan datos en la BD

  • Buscar una factura especifica en Import Invoices
  • Filtrar por fecha en Reportes
  • Verificar que tablas muestran registros tras procesar una factura

Necesitan mas usuarios

  • RBAC: usuario sin permisos intenta acceder a ruta protegida
  • Admin vs usuario normal ven opciones distintas

Necesitan flujo completo

  • Subir un CSV y verificar que el proceso funciona
  • Crear una factura y verificar que aparece en la tabla

Estructura de archivos final

backend/tests/
├── conftest.py
├── fixtures/
│   └── builders.py
├── e2e/
│   └── test_inventory_flow_anexo24.py     1 test
├── integration/
│   ├── test_export_process_api.py         3 tests
│   └── test_import_process_api.py         2 tests
└── unit/
    └── invoices/
        ├── test_balance_algorithm.py      2 tests
        └── test_currency_conversion.py    3 tests

frontend/src/lib/
├── backend.test.ts                        2 tests
├── utils.getInvoiceTypeColor.test.ts     19 tests
├── utils.getFileHelpers.test.ts           9 tests
├── utils.getBackendAssetUrl.test.ts       5 tests
├── date-utils.test.ts                    17 tests
├── csv-import-commit-metrics.test.ts     11 tests
└── csv-import-status-api.test.ts          4 tests

frontend/e2e/
├── .auth/user.json
├── auth.setup.ts                          1 test
├── full-flow.spec.ts                      4 tests
├── login.spec.ts                          3 tests
├── navigation.spec.ts                    10 tests
└── modules.spec.ts                       10 tests

Anexo 76 — Reporte de Pruebas v3.0 — 107 pruebas totales