# Tests de CRUD de Bots con Dependencias

Este directorio contiene tests para verificar el funcionamiento correcto del CRUD de bots, especialmente el borrado con dependencias.

## Problema Identificado

El sistema tenía un problema al borrar bots que tenían:
- Asignaciones de estudiantes (`StudentBotAccess`)
- Conversaciones existentes

El error ocurría porque:
1. La foreign key `student_bot_access.bot_id` estaba configurada como `ON DELETE RESTRICT`
2. El controlador verificaba las dependencias y lanzaba un error en lugar de permitir el borrado en cascada

## Solución Implementada

### 1. Migración de Base de Datos
- **Archivo**: `backend/prisma/migrations/20250110000000_fix_student_bot_access_cascade_delete/migration.sql`
- **Cambio**: Modificar `ON DELETE RESTRICT` a `ON DELETE CASCADE` para `student_bot_access.bot_id`

### 2. Actualización del Controlador
- **Archivo**: `backend/src/controllers/botController.ts`
- **Cambios**:
  - Eliminar verificaciones que lanzan errores por dependencias
  - Agregar logs informativos sobre dependencias que serán borradas
  - Mejorar mensaje de respuesta para indicar qué se borró en cascada

### 3. Tests de Verificación
- **Archivo**: `test/test-bot-crud-with-dependencies.js`
- **Funcionalidad**: Tests completos para verificar el CRUD y borrado en cascada

## Archivos de Test

### `test-bot-crud-with-dependencies.js`
Test principal que incluye:

#### Test de CRUD Básico (`runBotCRUDTest`)
1. ✅ Creación de usuarios (admin, teacher, student)
2. ✅ Creación de bot
3. ✅ Asignación de bot a estudiante
4. ✅ Creación de conversación
5. ✅ Creación de mensajes
6. ✅ Verificación de estado antes del borrado
7. ✅ Verificación de que el borrado falla con dependencias (comportamiento anterior)
8. ✅ Verificación de que las dependencias persisten
9. ✅ Limpieza de datos de prueba

#### Test de Borrado en Cascada (`runCascadeDeleteTest`)
1. ✅ Creación de datos de prueba
2. ✅ Verificación de estado inicial
3. ✅ Borrado del bot
4. ✅ Verificación de borrado del bot
5. ✅ Verificación de borrado en cascada de asignaciones
6. ✅ Verificación de borrado en cascada de conversaciones
7. ✅ Limpieza de datos de prueba

### Scripts de Ejecución

```bash
# Ejecutar ambos tests
./run-bot-crud-test.sh

# Ejecutar solo test de CRUD
./run-bot-crud-test.sh crud

# Ejecutar solo test de cascada
./run-bot-crud-test.sh cascade
```

## Configuración

### Variables de Entorno
Los tests usan las siguientes variables de entorno (con valores por defecto):

```bash
API_URL=http://localhost:3000/api
TEST_EMAIL=admin@test.com
```

### Prerequisitos
1. **Base de datos**: PostgreSQL ejecutándose
2. **Backend**: API ejecutándose en el puerto configurado
3. **Usuario admin**: Debe existir un usuario admin con las credenciales de test
4. **Node.js**: Versión compatible instalada

## Ejecución

### 1. Aplicar la Migración
```bash
cd backend
npx prisma migrate deploy
```

### 2. Ejecutar los Tests
```bash
cd test
./run-bot-crud-test.sh
```

## Resultados Esperados

### Antes de la Corrección
- ❌ Borrado de bot con dependencias falla con error 400
- ✅ Dependencias persisten después del intento de borrado

### Después de la Corrección
- ✅ Borrado de bot con dependencias funciona
- ✅ Asignaciones se borran en cascada
- ✅ Conversaciones se borran en cascada
- ✅ Mensajes se borran en cascada (a través de conversaciones)

## Estructura de Dependencias

```
Bot
├── StudentBotAccess (ON DELETE CASCADE)
└── Conversation (ON DELETE CASCADE)
    ├── Message (ON DELETE CASCADE)
    ├── ConversationSession (ON DELETE CASCADE)
    └── Feedback (ON DELETE CASCADE)
```

## Logs de Debugging

Los tests incluyen logs detallados para debugging:
- 🔍 Operaciones de base de datos
- ✅ Operaciones exitosas
- ❌ Errores y fallos
- 📊 Estados y conteos
- 🧹 Operaciones de limpieza

## Mantenimiento

### Agregar Nuevos Tests
1. Agregar función de test en `test-bot-crud-with-dependencies.js`
2. Llamar la función en `main()`
3. Actualizar documentación

### Modificar Configuración
1. Actualizar variables de entorno en los scripts
2. Actualizar valores por defecto en el código
3. Actualizar documentación

## Troubleshooting

### Error: "Can't reach database server"
- Verificar que PostgreSQL esté ejecutándose
- Verificar configuración de `DATABASE_URL`

### Error: "Authentication required"
- Verificar que el usuario admin existe
- Verificar credenciales en variables de entorno

### Error: "Bot not found"
- Verificar que el backend esté ejecutándose
- Verificar que la API esté accesible en la URL configurada

### Tests Fallan
- Revisar logs detallados en la consola
- Verificar que no hay datos de prueba previos
- Ejecutar limpieza manual si es necesario
