# Tests - ADIF API Scripts de prueba para validar la funcionalidad de la API de ADIF. ## 🧪 Tests Activos ### test_endpoints_detailed.py Test exhaustivo de todos los endpoints con información de debug completa. **Características**: - Muestra status codes, headers y respuesta JSON - Prueba múltiples variaciones de payload - Identifica errores 400, 401 y sus causas - Útil para debugging de nuevos endpoints **Uso**: ```bash python3 tests/test_endpoints_detailed.py ``` **Salida esperada**: - Información detallada de cada petición - Análisis de errores con mensajes del servidor - Diferenciación entre errores de payload vs permisos --- ### test_onepaths_with_real_trains.py Test funcional que obtiene trenes reales y prueba el endpoint `onepaths`. **Características**: - Consulta `departures` para obtener trenes circulando - Extrae `commercialNumber`, `launchingDate`, códigos de estación - Prueba `onepaths` con datos reales - Valida que el endpoint funciona correctamente **Uso**: ```bash python3 tests/test_onepaths_with_real_trains.py ``` **Requisitos**: - Ejecutar durante el día (cuando hay trenes circulando) - Si se ejecuta de noche/madrugada puede no encontrar trenes **Salida esperada**: ``` ====================================================================== PASO 1: Obteniendo trenes reales de Madrid Atocha ====================================================================== ✅ Obtenidos 25 trenes ====================================================================== PASO 2: Probando onePaths con trenes reales ====================================================================== ✅ SUCCESS! onePaths funciona con datos reales ``` --- ## 📁 Tests Archivados La carpeta `archived/` contiene tests antiguos que fueron útiles durante el desarrollo pero ya no son necesarios: - `test_all_endpoints.py` - Versión simple sin debug - `test_complete_bodies.py` - Pruebas de payloads completos - `test_corrected_api.py` / `test_corrected_api_v2.py` - Versiones anteriores - `test_real_auth.py` - Tests de autenticación básicos - `test_simple.py` - Test minimalista - `test_with_auth_headers.py` - Validación de headers - `test_without_auth.py` - Test sin autenticación - `debug_auth.py` - Debug del algoritmo HMAC Estos tests se mantienen por si son útiles como referencia, pero los tests activos son más completos. --- ## 🔧 Estructura de un Test ### Template Básico ```python from adif_auth import AdifAuthenticator import requests import uuid ACCESS_KEY = "and20210615" SECRET_KEY = "Jthjtr946RTt" def test_endpoint(): auth = AdifAuthenticator(access_key=ACCESS_KEY, secret_key=SECRET_KEY) url = "https://circulacion.api.adif.es/portroyalmanager/secure/..." payload = { # Tu payload aquí } user_id = str(uuid.uuid4()) headers = auth.get_auth_headers("POST", url, payload, user_id=user_id) headers["User-key"] = auth.USER_KEY_CIRCULATION response = requests.post(url, json=payload, headers=headers, timeout=10) assert response.status_code == 200 print(f"✅ Test passed: {response.json()}") if __name__ == "__main__": test_endpoint() ``` ### Análisis de Status Codes ```python if response.status_code == 200: print("✅ SUCCESS - Endpoint funcional") data = response.json() elif response.status_code == 204: print("⚠️ NO CONTENT - Autenticación correcta pero sin datos") elif response.status_code == 400: print("❌ BAD REQUEST - Payload incorrecto") print(f"Error: {response.json()}") elif response.status_code == 401: print("❌ UNAUTHORIZED - Sin permisos") print(f"Error: {response.json()}") ``` --- ## 📊 Resultados Esperados ### Endpoints Funcionales (200) - `/departures/traffictype/` - `/arrivals/traffictype/` - `/onepaths/` (con commercialNumber real) - `/stationsobservations/` ### Endpoints Bloqueados (401) - `/betweenstations/traffictype/` - `/onestation/` - `/severalpaths/` - `/compositions/path/` --- ## 💡 Tips para Crear Nuevos Tests 1. **Usar `test_endpoints_detailed.py` como base** - Tiene buen manejo de errores 2. **Validar timestamps** - Usar milisegundos, no segundos 3. **Probar con datos reales** - Como hace `test_onepaths_with_real_trains.py` 4. **Diferenciar errores**: - 400 = Payload incorrecto → Revisar campos - 401 = Sin permisos → Las claves no tienen acceso - 204 = Sin datos → Autenticación OK, pero respuesta vacía --- **Última actualización**: 2025-12-05