# Guía de pruebas E2E con Playwright

## Requisitos previos

- Apache corriendo con el proyecto en `http://localhost/mbinv/web/`
- Node.js instalado (`node --version`)
- Dependencias instaladas (`npm install` si es la primera vez)

---

## 1. Smoke tests sin autenticación

Verifica que ninguna ruta devuelva error 500. No requiere password.

```bash
cd /Library/WebServer/Documents/mbinv
npx playwright test tests/e2e/smoke.spec.ts --project=chromium --reporter=list
```

---

## 2. Smoke tests con autenticación (recomendado)

Activa el monitoreo AJAX completo. Detecta errores 500/400 en llamadas de fondo.

```bash
cd /Library/WebServer/Documents/mbinv
E2E_ADMIN_PASSWORD="tu_password" npx playwright test tests/e2e/smoke.spec.ts --project=chromium --reporter=list
```

> Reemplaza `tu_password` con la contraseña del usuario `admin` de la aplicación.

---

## 3. Probar una rama específica

El script hace automáticamente: `git checkout` → limpiar caché Symfony → correr tests.

```bash
cd /Library/WebServer/Documents/mbinv
npm run test:branch -- nombre_de_la_rama
```

**Con autenticación:**

```bash
E2E_ADMIN_PASSWORD="tu_password" npm run test:branch -- nombre_de_la_rama
```

**Ejemplo:**

```bash
E2E_ADMIN_PASSWORD="tu_password" npm run test:branch -- T16384_costeo_formulas
```

---

## 4. Ver el reporte visual

Después de correr los tests, abre el reporte en el navegador:

```bash
npx playwright show-report --port 9324
```

Luego abre: [http://localhost:9324](http://localhost:9324)

> Se usa el puerto 9324 porque el 9323 puede estar ocupado en macOS.

---

## 5. Otros comandos útiles

| Comando                         | Qué hace                                |
| ------------------------------- | --------------------------------------- |
| `npm run test:smoke`            | Smoke tests rápidos en Chromium         |
| `npm run test:all`              | Todos los tests en Chromium             |
| `npm run test:coverage`         | Tests con reporte HTML de cobertura     |
| `npm run report`                | Abre el último reporte (puerto 9323)    |
| `phpstan analyse --no-progress` | Análisis estático — solo errores nuevos |

---

## Qué significan los resultados

### Test pasado ✅

La ruta respondió sin errores HTTP y sin llamadas AJAX fallidas.

### Test fallido ❌ — error en ruta principal

```
● [Inventario] Productos no devuelve 500
  Ruta "/mbinv/web/producto/lista" devolvió 500
```

→ El controlador PHP tiene un error. Ver logs en `app/logs/dev.log`.

### Test fallido ❌ — error AJAX silencioso

```
● [Inventario] Productos no devuelve 500
  Errores AJAX en "/mbinv/web/producto/lista":
    POST 500 → http://localhost/mbinv/web/producto/datos-ajax
```

→ La página cargó bien pero una llamada de fondo falló. Ver logs en `app/logs/dev.log`.

---

## 6. Análisis estático con PHPStan (nivel 1)

Detecta errores de tipos, métodos inexistentes y nulls **antes de ejecutar** el código.
Solo reporta errores en código **nuevo o modificado** — los errores históricos están en el baseline y se ignoran.

```bash
cd /Library/WebServer/Documents/mbinv
/Users/manuelbustamante/phpstan-bin/vendor/bin/phpstan analyse --no-progress
```

Resultado esperado si tu código no tiene problemas:

```
[OK] No errors
```

### Cuando terminás una tarea y corregiste errores existentes

Actualizar el baseline para que los errores corregidos no cuenten más:

```bash
/Users/manuelbustamante/phpstan-bin/vendor/bin/phpstan analyse --no-progress --generate-baseline phpstan-baseline.neon
git add -f phpstan.neon phpstan-baseline.neon && git commit -m "Update PHPStan baseline"
```

---

## Logs de Symfony para investigar errores

```bash
tail -f /Library/WebServer/Documents/mbinv/app/logs/dev.log
```

O solo los errores:

```bash
grep -i "error\|exception" /Library/WebServer/Documents/mbinv/app/logs/dev.log | tail -30
```
