# e2e_checks proposal — script_navegador
# app_id:   script_navegador
# lang:     go  (NOTE: app.md declara lang:go, no Python — peticion usaba "Python" pero la app es Go)
# stack:    Go + CDP browser functions del registry + gopkg.in/yaml.v3 + go-sqlite3
# date:     2026-05-19
# issue:    0121a wave 3
# autor:    fn-recopilador (design-e2e)
#
# INSTRUCCIONES DE USO:
#   Copiar el bloque e2e_checks: al frontmatter de apps/script_navegador/app.md
#   DESPUES de revision humana. El recopilador NO escribe directamente en app.md.
#
# ERROR CRITICO DETECTADO (independiente de e2e):
#   apps/script_navegador/registry.db existe — viola la regla db_locations.md.
#   registry.db SOLO debe existir en la raiz del repo fn_registry/.
#   Accion: rm apps/script_navegador/registry.db
#   Posible causa: fn ops init o go run cwd resolvio mal el path al inicializar
#   la ops DB y creo un registry.db vacio como side effect.

e2e_checks:
  # -----------------------------------------------------------------------
  # CHECK 1: build
  # Por que: verifica que el modulo Go compila con CGO (go-sqlite3) y las
  # dependencias del registry (replace fn-registry => /home/lucas/fn_registry).
  # Sin esto nada funciona. El binario se deja en /tmp para no contaminar el dir.
  # -----------------------------------------------------------------------
  - id: build
    cmd: >
      cd /home/lucas/fn_registry/apps/script_navegador &&
      CGO_ENABLED=1 go build -tags fts5 -o /tmp/script_navegador_e2e .
    timeout_s: 120

  # -----------------------------------------------------------------------
  # CHECK 2: cli_help
  # Por que: verifica que el binario arranca, parsea flags y sale limpiamente
  # cuando falta --script. Sin Chrome ni conexion real. Exit 1 esperado
  # (el binario imprime "error: --script es obligatorio" y sale con 1).
  # -----------------------------------------------------------------------
  - id: cli_help
    cmd: "/tmp/script_navegador_e2e 2>&1 || true"
    expect_stdout_contains: "--script es obligatorio"
    timeout_s: 10

  # -----------------------------------------------------------------------
  # CHECK 3: syntax_yaml
  # Por que: valida que los ejemplos YAML del repo son parseable por el propio
  # binario (flag --script con archivo valido + forzar fallo de conexion CDP
  # para que no intente Chrome real). Usa un ejemplo que no necesita red.
  # Exit 1 esperado al no haber Chrome, pero DEBE fallar despues de "X pasos",
  # no antes (significa que el YAML se parseo bien).
  # -----------------------------------------------------------------------
  - id: syntax_yaml
    cmd: >
      /tmp/script_navegador_e2e
      --script /home/lucas/fn_registry/apps/script_navegador/examples/busqueda_google.yaml
      --port 19222
      2>&1 || true
    expect_stdout_contains: "busqueda_google"
    timeout_s: 15

  # -----------------------------------------------------------------------
  # CHECK 4: chrome_detect (severity: warning)
  # Por que: detecta si chrome.exe de Windows esta disponible desde WSL.
  # NO arranca Chrome ni navega. Solo verifica presencia del ejecutable.
  # Marcado warning porque CI/CD sin Windows no tendra chrome.exe — no debe
  # bloquear el merge, solo informar al humano.
  # -----------------------------------------------------------------------
  - id: chrome_detect
    cmd: >
      ls "/mnt/c/Program Files/Google/Chrome/Application/chrome.exe" 2>/dev/null &&
      echo "chrome_found" ||
      (ls "/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe" 2>/dev/null &&
       echo "chrome_found_x86") ||
      echo "chrome_not_found"
    expect_stdout_contains: "chrome"
    severity: warning
    timeout_s: 5

  # -----------------------------------------------------------------------
  # CHECK 5: ops_schema
  # Por que: verifica que operations.db existe y tiene las tablas obligatorias
  # del schema fn_operations (executions, entities, relations, logs).
  # NO requiere Chrome. Detecta drift de migraciones.
  # -----------------------------------------------------------------------
  - id: ops_schema
    cmd: >
      sqlite3 /home/lucas/fn_registry/apps/script_navegador/operations.db
      "SELECT name FROM sqlite_master WHERE type='table'
       AND name IN ('entities','relations','executions','logs','assertions','assertion_results')
       ORDER BY name;" 2>/dev/null
    expect_stdout_contains: "executions"
    timeout_s: 10

  # -----------------------------------------------------------------------
  # CHECK 6: ops_audit
  # Por que: invoca al fn-recopilador para auditoria completa de operations.db
  # (integridad referencial, snapshots, assertions activas, etc.).
  # -----------------------------------------------------------------------
  - id: ops_audit
    ref: "fn-recopilador:apps/script_navegador"

# -----------------------------------------------------------------------
# CHECKS OMITIDOS y por que:
#
# - smoke (Chrome real):
#     Requiere Chrome Windows corriendo con --remote-debugging-port.
#     No determinista en CI. Moverlo a suite manual o suite "slow" con tag.
#     Si se quiere en e2e: chrome_detect debe pasar primero y el check
#     debe lanzar chrome.exe headless (--headless=new) y cerrar al final.
#
# - wslpath_convert:
#     wslpath es stdlib WSL, sin logica en el binario propia — no necesita
#     check separado. Cubierto implicitamente por chrome_detect.
#
# - unit tests (go test):
#     No hay archivos *_test.go en el directorio. Si se anaden en el futuro,
#     agregar:
#       - id: tests
#         cmd: "cd /home/lucas/fn_registry/apps/script_navegador && go test -count=1 ./..."
#         timeout_s: 60
# -----------------------------------------------------------------------
