# e2e_checks proposal — metabase_registry
# app_id:   metabase_registry
# lang:     py
# stack:    Python + httpx + argparse (no venv propio, usa python/.venv del repo)
# entry:    apps/metabase_registry/main.py
# date:     2026-05-19
# issue:    0121a wave 3
#
# Notas de deteccion:
#   - lang=py, framework=httpx (requirements.txt: httpx>=0.27.0)
#   - Tres scripts ejecutables: main.py, create_registry_dashboard.py,
#     create_apps_dashboard.py. Sin pyproject.toml, sin tests/.
#   - NO es service (sin tag service, sin puerto HTTP propio).
#   - operations.db presente con schema completo (11 tablas + schema_migrations).
#   - Credenciales: en .env y env vars, NUNCA en checks. Todos los checks
#     son mock-only (import + syntax + dry-run sin conexion a Metabase real).
#   - Sin tests/ → check 'tests' OMITIDO (regla: no inventar tests inexistentes).
#
# REGLAS APLICADAS:
#   - Sin credenciales reales en ningun cmd.
#   - Todos los checks son idempotentes y terminan solos (sin &).
#   - python/.venv del repo padre (ruta absoluta para claridad; adaptar si se
#     crea venv propio en la app).
#   - ops_audit incluido porque operations.db existe y tiene 2 entities + assertions.

e2e_checks_suggested:
  # --- Check 1: import ---
  # Verifica que el modulo main.py es importable y sus dependencias del registry
  # (python/functions/metabase/) estan disponibles sin errores de import.
  # No conecta a Metabase — solo resuelve imports.
  - id: import
    cmd: >
      cd /home/lucas/fn_registry/apps/metabase_registry &&
      /home/lucas/fn_registry/python/.venv/bin/python3 -c
      "import sys, os;
      sys.path.insert(0, os.path.join(os.getcwd(), '..', '..', 'python', 'functions'));
      from metabase import MetabaseClient, metabase_create_card, metabase_create_dashboard, metabase_update_dashboard;
      from metabase.client import metabase_auth;
      from metabase.databases import metabase_add_database, metabase_list_databases;
      print('imports OK')"
    expect_stdout_contains: "imports OK"
    timeout_s: 15
    severity: critical
    # por que: si los imports del registry fallan, ningun script funciona.
    # detecta: renombrado de funciones metabase_*, rotura de __init__.py, httpx no instalado.

  # --- Check 2: cli_help ---
  # Verifica que el parser CLI de main.py esta intacto.
  # argparse imprime usage sin necesitar credenciales ni conexion.
  - id: cli_help
    cmd: >
      cd /home/lucas/fn_registry/apps/metabase_registry &&
      /home/lucas/fn_registry/python/.venv/bin/python3 main.py --help
    expect_stdout_contains: "metabase_registry"
    expect_exit: 0
    timeout_s: 10
    severity: critical
    # por que: si --help falla, el CLI esta roto (argparse error o import error previo).

  # --- Check 3: syntax_check (todos los scripts) ---
  # Compila los tres scripts con py_compile sin ejecutarlos.
  # Detecta SyntaxError y NameError de nivel modulo antes de cualquier deploy.
  - id: syntax_check
    cmd: >
      cd /home/lucas/fn_registry/apps/metabase_registry &&
      /home/lucas/fn_registry/python/.venv/bin/python3 -m py_compile
      main.py create_registry_dashboard.py create_apps_dashboard.py
      create_script_navegador_dashboard.py &&
      echo "syntax OK"
    expect_stdout_contains: "syntax OK"
    timeout_s: 10
    severity: critical
    # por que: los 4 scripts no tienen tests unitarios; py_compile es el gate
    # mas ligero antes de un run real. Detecta typos, variables no definidas
    # a nivel modulo, imports ciclicos.

  # --- Check 4: dry_run_parser ---
  # Ejercita el parser con credenciales ficticias para verificar que
  # los defaults de env vars y la logica de build_parser() funcionan.
  # Falla INTENCIONALMENTE en autenticacion (no hay Metabase disponible)
  # pero debe mostrar el mensaje de error de auth, no un traceback de Python.
  # severity: warning porque el fallo esperado viene de red, no del codigo.
  - id: dry_run_parser
    cmd: >
      cd /home/lucas/fn_registry/apps/metabase_registry &&
      METABASE_URL=http://127.0.0.1:19999
      METABASE_ADMIN_EMAIL=test@example.com
      METABASE_ADMIN_PASSWORD=fake_password_for_e2e
      /home/lucas/fn_registry/python/.venv/bin/python3 main.py
      --url http://127.0.0.1:19999
      --admin-email test@example.com
      --admin-password fake_password_for_e2e
      2>&1 | head -5
    expect_stdout_contains: "[metabase_registry]"
    expect_exit: 1
    timeout_s: 15
    severity: warning
    # por que: verifica que el flujo run() arranca (auth, log(), log_err()),
    # no que Metabase este activo. exit 1 es esperado (sin servidor en :19999).
    # Si sale exit 2 (argparse error) o traceback sin el prefijo → regresion.

  # --- Check 5: ops_audit ---
  # Invoca fn-recopilador sobre operations.db de esta app.
  # operations.db tiene schema completo (schema_migrations + 11 tablas),
  # 2 entities y assertions declaradas.
  - id: ops_audit
    ref: "fn-recopilador:apps/metabase_registry"
    severity: warning
    # por que: operations.db existe y tiene datos vivos. El recopilador valida
    # integridad referencial, snapshots al dia y assertions activas evaluadas.
    # warning porque la app no depende de operations.db para su funcion principal.
