4.8 KiB
4.8 KiB
FASE 2 - Prueba de Fallback Automático
🎯 Objetivo
Verificar que el sistema hace fallback automático de ExternalContentAdapter a LocalContentAdapter cuando el backend no está disponible.
🔍 Cómo Funciona el Fallback
ContentAdapterFactory
El ContentAdapterFactory decide automáticamente qué adapter usar:
static getAdapter(): ContentAdapter {
// Crear adapters si no existen
if (!this.externalAdapter) {
this.externalAdapter = new ExternalContentAdapter();
}
if (!this.localAdapter) {
this.localAdapter = new LocalContentAdapter();
}
// Intentar usar external primero, fallback a local
if (this.externalAdapter.isAvailable()) {
return this.externalAdapter;
}
return this.localAdapter;
}
ExternalContentAdapter
- Intenta cargar el Content Pack desde el backend
- Si falla, marca
loaded = trueperopack = null isAvailable()retornafalsesipack === null- El factory automáticamente usa
LocalContentAdaptercomo fallback
LocalContentAdapter
- Siempre disponible (
isAvailable() === true) - Lee datos directamente de
src/data/*.ts - No requiere conexión al backend
🧪 Pruebas Realizadas
1. Backend Disponible
# Verificar que el backend responde
curl http://localhost:3000/health
# Verificar Content Pack
curl http://localhost:3000/api/content-pack/latest.json
Resultado esperado:
- ✅ Backend responde
- ✅ Content Pack disponible
- ✅
ExternalContentAdapterse usa automáticamente - ✅ Badge "Externo" visible en la UI
2. Backend No Disponible
# Detener backend
kill $(lsof -ti:3000)
# Verificar que no responde
curl http://localhost:3000/health
Resultado esperado:
- ✅ Backend no responde
- ✅
ExternalContentAdapter.isAvailable() === false - ✅
LocalContentAdapterse usa automáticamente - ✅ App funciona normalmente con datos locales
- ✅ No hay errores en consola
3. Cache del Content Pack
El ExternalContentAdapter intenta usar cache antes de hacer fetch:
- IndexedDB (primero)
- localStorage (fallback)
- Fetch desde backend (si no hay cache)
Si hay cache válido (< 24 horas), el adapter puede seguir funcionando aunque el backend esté caído.
📋 Checklist de Verificación
En el Navegador
-
Con Backend Activo:
- Abrir http://localhost:8096
- Abrir consola del navegador
- Verificar mensaje:
[ContentAdapter] Content Pack cargado desde servidor - Verificar badge "Externo" visible
- Navegar a diferentes páginas (Fármacos, Protocolos, Guías)
- Verificar que los datos se cargan correctamente
-
Sin Backend (Fallback):
- Detener backend:
kill $(lsof -ti:3000) - Recargar página en navegador
- Verificar mensaje en consola:
[ContentAdapter] No se pudo cargar Content Pack - Verificar que NO aparece badge "Externo"
- Navegar a diferentes páginas
- Verificar que los datos locales se cargan correctamente
- No debe haber errores en consola
- Detener backend:
-
Reconexión Automática:
- Reiniciar backend:
cd backend && npm start - Recargar página en navegador
- Verificar que vuelve a usar
ExternalContentAdapter - Badge "Externo" vuelve a aparecer
- Reiniciar backend:
🔧 Comandos Útiles
# Verificar estado del backend
curl http://localhost:3000/health
# Ver Content Pack
curl http://localhost:3000/api/content-pack/latest.json | jq '.metadata'
# Detener backend
kill $(lsof -ti:3000)
# Reiniciar backend
cd backend && npm start
# Ver logs del backend
tail -f /tmp/backend.log
✅ Resultados Esperados
Escenario 1: Backend Disponible
- ✅
ExternalContentAdapteractivo - ✅ Content Pack cargado desde servidor
- ✅ Badge "Externo" visible
- ✅ Datos del backend se muestran
Escenario 2: Backend No Disponible
- ✅
LocalContentAdapteractivo (fallback automático) - ✅ Datos locales se muestran
- ✅ No hay errores
- ✅ App funciona normalmente
Escenario 3: Cache Disponible
- ✅
ExternalContentAdapterpuede usar cache - ✅ Funciona aunque backend esté caído temporalmente
- ✅ Cache válido por 24 horas
📝 Notas
- El fallback es completamente automático y transparente para el usuario
- No se requiere ninguna acción manual
- La app siempre funciona, con o sin backend
- El cache permite funcionar offline por hasta 24 horas
🎯 Estado Actual
- ✅ Backend funcionando
- ✅ Content Pack generándose correctamente
- ✅
ExternalContentAdapterimplementado - ✅
LocalContentAdapterimplementado - ✅
ContentAdapterFactorycon fallback automático - ✅ Cache implementado (IndexedDB + localStorage)
- ⏳ Pendiente: Prueba manual en navegador
🚀 Siguiente Paso
Probar manualmente en el navegador siguiendo el checklist de verificación arriba.