# 🃏 Machete de Tests — OnAPB
### Resumen para la Defensa del Proyecto (Taller de Integración)

Este documento sirve como guía para explicarle al profesor qué estamos probando exactamente con cada comando de `php artisan test`.

---

## 🏗️ Conceptos Clave (Para responder si preguntan)
- **Feature Tests:** Prueban una funcionalidad completa desde la perspectiva del usuario (ej: hacer login, crear un club).
- **DatabaseTransactions:** Es un "Trait" que usamos en los tests para que cada prueba se envuelva en una transacción de base de datos y se haga un **Rollback** al final. Así, los datos de prueba nunca ensucian la base de datos real.
- **Assertions (Afirmaciones):** Son las comprobaciones que hacemos, como `assertStatus(200)` (la página cargó bien) o `assertDatabaseHas` (el dato se guardó en la BD).

---

## 📂 Detalle de los Tests (Qué hace cada uno)

### 1. `AuthTest.php` (Autenticación)
- **Qué prueba:** Que los 3 tipos de usuarios (Admin, Jugador, Aficionado) puedan entrar al sistema con sus credenciales y que el Logout funcione.
- **Escenario crítico:** Verifica que el captcha de Cloudflare (Turnstile) sea sorteado correctamente en el entorno de pruebas.

### 2. `AdminTest.php` (Seguridad y Roles)
- **Qué prueba:** El control de acceso.
  - Un visitante o un jugador **no deben** poder entrar al `/admin` (Error 403).
  - Un Súper Admin **sí debe** poder entrar y ver el "Panel de Control".
  - El Súper Admin puede crear un Club y este se guarda correctamente en la BD.

### 3. `PaseTest.php` (Lógica de Negocio — **NUEVO**)
- **Qué prueba:** El flujo de traspaso de un jugador.
- **Escenario:** Un Súper Admin aprueba un pase pendiente. El test verifica que:
  1. El estado del pase cambie a "Aprobado".
  2. El `id_club_actual` del jugador se actualice automáticamente al club de destino.

### 4. `SoftDeleteTest.php` (Recuperación ante fallos — **NUEVO**)
- **Qué prueba:** Que el borrado sea "lógico" y no "físico".
- **Escenario:** Al eliminar un Club o un Jugador, el test verifica que el registro **siga existiendo** en la base de datos pero con la columna `deleted_at` completa. Esto demuestra la capacidad de recuperación del sistema.

### 5. `EventoQRTest.php` (Generación de QRs)
- **Qué prueba:** La funcionalidad estrella del sistema.
- **Escenario:** Un aficionado solicita un QR para un partido. El test verifica que se genere el registro en la tabla `qr_codes` y que el sistema **impida** solicitar un segundo QR para el mismo evento (evita fraudes).

### 6. `JugadorCreationTest.php` (Validaciones)
- **Qué prueba:** Reglas de integridad de datos.
- **Escenario:** Intentar crear un jugador con un DNI que ya existe. El test verifica que el sistema devuelva un error amigable indicando a qué club pertenece ese DNI ya registrado.

### 7. `CleanupTest.php` (Mantenimiento)
- **Qué prueba:** Que el sistema de limpieza automática funcione.
- **Escenario:** Simula la limpieza de eventos viejos. Verifica que se borren los QRs (para ahorrar espacio) pero que el **Evento (partido)** se mantenga para el historial de torneos.

---

### 8. `TFICorrectionsTest.php` (Correcciones Finales — **NUEVO**)
- **Qué prueba:** Las últimas mejoras solicitadas por los profesores.
- **Escenario:** 
  1. Verifica que los listados de administración estén ordenados de forma descendente (último creado, primero en verse).
  2. Verifica que la descarga de QRs en formato PDF funcione correctamente y devuelva el archivo esperado.
  3. Verifica que el Manual de Usuario sea accesible y se renderice correctamente en la web.
  4. Verifica la presencia del sistema de bloqueo de botones y validación proactiva en el panel.

---

## 🚀 Cómo ejecutar y mostrar
Si el profesor pide ver los tests en vivo:
1. Abrir la terminal.
2. Correr: `php artisan test`
3. Explicar: *"Instalamos una batería de 22 tests que cubren desde el login y la lógica de pases hasta las nuevas correcciones de ordenamiento, descarga de PDFs y documentación integrada. Esto asegura que el sistema sea extremadamente robusto para la entrega final."*
