Files
fn_registry/dev/proposals_e2e_checks_0121/metabase_registry.yaml
T
egutierrez fc4180cbb3 chore: auto-commit (129 archivos)
- .claude/agents/fn-analizador/SKILL.md
- .claude/agents/fn-constructor/SKILL.md
- .claude/agents/fn-executor/SKILL.md
- .claude/agents/fn-mejorador/SKILL.md
- .claude/agents/fn-orquestador/SKILL.md
- .claude/agents/fn-recopilador/SKILL.md
- .claude/commands/app.md
- .claude/commands/compile.md
- .claude/commands/cpp-app.md
- .claude/commands/create_functions.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-01 22:23:12 +02:00

112 lines
5.1 KiB
YAML

# 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/fn_registry/apps/metabase_registry &&
$HOME/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/fn_registry/apps/metabase_registry &&
$HOME/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/fn_registry/apps/metabase_registry &&
$HOME/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/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/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.