# Configuración del Entorno de Pruebas E2E en Windows 10 + XAMPP

## Requisitos previos

| Herramienta | Versión requerida | Descarga |
|---|---|---|
| XAMPP (PHP 7.1.x) | 7.1.33 | https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/7.1.33/ |
| Node.js | 18 o superior (LTS) | https://nodejs.org |
| Git | cualquier versión reciente | https://git-scm.com |
| Composer | 1.x o 2.x | https://getcomposer.org/download/ |

> **IMPORTANTE:** El proyecto NO es compatible con PHP 8.x. Usar exclusivamente XAMPP 7.1.33.

---

## Paso 1 — Instalar XAMPP 7.1.33

1. Ejecutar el instalador descargado.
2. Instalar en la ruta por defecto: `C:\xampp`.
3. Habilitar los módulos **Apache** y **MySQL** durante la instalación.
4. Al terminar, abrir el **XAMPP Control Panel** y arrancar Apache.

---

## Paso 2 — Habilitar mod_rewrite en Apache

1. Abrir `C:\xampp\apache\conf\httpd.conf`.
2. Localizar la línea:
   ```
   #LoadModule rewrite_module modules/mod_rewrite.so
   ```
   Eliminar el `#` del inicio para que quede:
   ```
   LoadModule rewrite_module modules/mod_rewrite.so
   ```
3. Localizar el bloque `<Directory "C:/xampp/htdocs">` y cambiar:
   ```
   AllowOverride None
   ```
   por:
   ```
   AllowOverride All
   ```
4. Guardar el archivo.

---

## Paso 3 — Configurar el alias de la aplicación

1. Abrir `C:\xampp\apache\conf\extra\httpd-xampp.conf`.
2. Agregar al final del archivo:

   ```apache
   Alias /mbinv/web "C:/xampp/htdocs/mbinv/web"
   <Directory "C:/xampp/htdocs/mbinv/web">
       AllowOverride All
       Require all granted
   </Directory>
   ```

3. Guardar y reiniciar Apache desde el XAMPP Control Panel.

---

## Paso 4 — Clonar el repositorio

Abrir **Git Bash** o **PowerShell** y ejecutar:

```powershell
cd C:\xampp\htdocs
git clone https://github.com/macrobasegt/mbinv.git mbinv
cd mbinv
git checkout rama_pruebas_unitarias
```

---

## Paso 5 — Configurar parameters.yml

1. Copiar el archivo de ejemplo:

   ```powershell
   copy app\config\parameters.yml.dist app\config\parameters.yml
   ```

2. Abrir `app\config\parameters.yml` con un editor de texto y dejarlo así:

   ```yaml
   parameters:
     database_host: "132.226.40.48"
     database_name: "pruebas_unitarias"
     database_user: "manuel"
     database_port: "3310"
     database_password: "TU_PASSWORD_DE_BD"
     secret: ba487cf32fa448625ba8c4f29e33740047c4d500
     session_max_idle_time: 36000
     mailer_transport: smtp
     mailer_host: 127.0.0.1
     mailer_user: ~
     mailer_password: ~
     locale: es
   ```

   > Solicitar la contraseña de base de datos al administrador del proyecto.

---

## Paso 6 — Instalar dependencias PHP con Composer

Abrir **PowerShell** en `C:\xampp\htdocs\mbinv`:

```powershell
C:\xampp\php\php.exe C:\ProgramData\ComposerSetup\bin\composer.phar install --no-dev --optimize-autoloader
```

> Si Composer fue instalado globalmente, simplemente usar `composer install --no-dev`.

---

## Paso 7 — Limpiar la caché de Symfony

```powershell
C:\xampp\php\php.exe app\console cache:clear --env=prod
C:\xampp\php\php.exe app\console cache:warmup --env=prod
```

---

## Paso 8 — Agregar PHP al PATH de Windows (opcional pero recomendado)

1. Buscar "Variables de entorno" en el menú Inicio.
2. En "Variables del sistema" → seleccionar `Path` → Editar.
3. Agregar nueva entrada: `C:\xampp\php`
4. Aceptar todo y reabrir PowerShell.

Desde ese punto se puede usar `php` directamente en lugar de la ruta completa.

---

## Paso 9 — Instalar dependencias Node.js y Playwright

En `C:\xampp\htdocs\mbinv`:

```powershell
npm install
npx playwright install chromium
```

---

## Paso 10 — Verificar que la app responde

Abrir en el navegador:

```
http://localhost/mbinv/web/login
```

Debe aparecer el formulario de inicio de sesión. Si aparece error 500, revisar los pasos 2 y 3.

---

## Paso 11 — Ejecutar los tests E2E

### Calcular la contraseña dinámica del usuario `mb`

La contraseña cambia cada hora según el patrón `monse{HH}` (hora en zona horaria de Guatemala).
En PowerShell:

```powershell
$tz  = [System.TimeZoneInfo]::FindSystemTimeZoneById("Central America Standard Time")
$hh  = [System.TimeZoneInfo]::ConvertTimeFromUtc([DateTime]::UtcNow, $tz).ToString("HH")
$env:E2E_ADMIN_PASSWORD = "monse$hh"
$env:E2E_ADMIN_USER     = "mb"
$env:BASE_URL            = "http://localhost/mbinv/web/"

Write-Host "Usando password: $env:E2E_ADMIN_PASSWORD"
```

### Ejecutar suite completa (smoke - todas las rutas)

```powershell
npx playwright test tests/e2e/smoke.spec.ts --reporter=line
```

### Ejecutar suite de procesos (8 tests detallados)

```powershell
npx playwright test tests/e2e/procesos.spec.ts --reporter=line
```

### Ejecutar todos los tests

```powershell
npx playwright test --reporter=line
```

### Ver reporte HTML de resultados

```powershell
npx playwright show-report
```

---

## Solución de problemas comunes

| Síntoma | Causa probable | Solución |
|---|---|---|
| Error 500 en el navegador | `mod_rewrite` desactivado o `AllowOverride None` | Revisar pasos 2 y 3 |
| "Class not found" en la app | Composer no ejecutado o caché vieja | Correr paso 6 y 7 |
| Tests fallan con timeout | Latencia alta a la BD remota | Normal; los timeouts están en 120s |
| Login falla en los tests | Contraseña expiró (cambió la hora) | Recalcular la password con el comando del paso 11 |
| Puerto 3310 sin respuesta | Firewall de Windows bloqueando | Agregar regla de salida en Windows Defender Firewall para el puerto 3310 hacia `132.226.40.48` |
| `php` no encontrado en PowerShell | PHP no está en el PATH | Agregar `C:\xampp\php` al PATH (paso 8) |
| `node` no encontrado | Node.js no instalado o no está en PATH | Reinstalar Node.js y marcar "Add to PATH" en el instalador |
