Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions .env.testing
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
APP_NAME="CronosMatic Store"
APP_ENV=testing
APP_KEY=base64:testing-key-will-be-generated
APP_DEBUG=false
APP_TIMEZONE=UTC
APP_URL=http://localhost:3000

APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US

APP_MAINTENANCE_DRIVER=file
APP_MAINTENANCE_STORE=database

BCRYPT_ROUNDS=4

LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=sqlite
DB_DATABASE=database/testing.sqlite

SESSION_DRIVER=array
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null

BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync

CACHE_STORE=array
CACHE_PREFIX=

REDIS_CLIENT=phpredis
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_DB=0

MAIL_MAILER=array
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

VITE_APP_NAME="${APP_NAME}"

TELESCOPE_ENABLED=false
PULSE_ENABLED=false
248 changes: 248 additions & 0 deletions DOCKER-TESTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,248 @@
# 🐳 Testing en Docker - CronosMatic

Esta guía explica cómo ejecutar la suite completa de tests en el entorno Docker de desarrollo.

## 🚀 Inicio Rápido

```bash
# Ejecutar todos los tests en Docker
./run-tests-docker.sh all

# O ejecutar tipos específicos
./run-tests-docker.sh backend # Solo tests de backend
./run-tests-docker.sh frontend # Solo tests de frontend
./run-tests-docker.sh e2e # Solo tests E2E
```

## 📋 Prerequisitos

1. **Docker y Docker Compose** instalados
2. **Rama feature/docker-dev-setup** activa
3. **Permisos de ejecución** en los scripts

```bash
chmod +x run-tests-docker.sh
chmod +x docker/test-setup.sh
```

## 🏗️ Arquitectura de Testing

### Scripts Principales
- `run-tests-docker.sh` - Script wrapper que orquesta la ejecución desde fuera del contenedor
- `docker/test-setup.sh` - Script interno que configura y ejecuta tests dentro del contenedor

### Configuraciones Específicas
- `phpunit.docker.xml` - Configuración de PHPUnit optimizada para Docker
- `vitest.docker.config.ts` - Configuración de Vitest con timeouts aumentados
- `cypress.docker.config.ts` - Configuración de Cypress para contenedores
- `.env.testing` - Variables de entorno específicas para testing

## 🔧 Configuración Automática

El sistema configura automáticamente:

### Base de Datos
- ✅ Crea `database/testing.sqlite` si no existe
- ✅ Configura permisos correctos
- ✅ Usa SQLite para tests rápidos

### Dependencias
- ✅ Verifica e instala dependencias PHP (`composer install`)
- ✅ Verifica e instala dependencias Node.js (`npm ci`)
- ✅ Limpia caché de Laravel

### Servidores
- ✅ Inicia Laravel en puerto 3000 para tests E2E
- ✅ Maneja el ciclo de vida de servidores automáticamente

## 📊 Tipos de Tests

### 1. Backend Tests (PHP/Laravel)
- **Cantidad**: ~93 tests
- **Framework**: PHPUnit
- **Base de datos**: SQLite (testing.sqlite)
- **Configuración**: `phpunit.docker.xml`

```bash
./run-tests-docker.sh backend
```

### 2. Frontend Tests (React/TypeScript)
- **Cantidad**: ~34 tests
- **Framework**: Vitest + Testing Library
- **Configuración**: `vitest.docker.config.ts`

```bash
./run-tests-docker.sh frontend
```

### 3. E2E Tests (Cypress)
- **Cantidad**: ~11 tests
- **Framework**: Cypress
- **URL base**: http://localhost:3000
- **Configuración**: `cypress.docker.config.ts`

```bash
./run-tests-docker.sh e2e
```

## 🐳 Servicios Docker Necesarios

Los tests requieren estos servicios corriendo:

```yaml
services:
dev: # Contenedor principal de desarrollo
db: # MariaDB (para la aplicación, no para tests)
redis: # Redis para caché y sesiones
```

El script automáticamente:
1. ✅ Verifica que los servicios estén corriendo
2. ✅ Los inicia si es necesario (`docker compose up -d dev db redis`)
3. ✅ Espera a que estén listos antes de ejecutar tests

## 📁 Estructura de Archivos

```
.
├── run-tests-docker.sh # Script principal (externo)
├── docker/
│ └── test-setup.sh # Script de configuración (interno)
├── phpunit.docker.xml # Configuración PHPUnit para Docker
├── vitest.docker.config.ts # Configuración Vitest para Docker
├── cypress.docker.config.ts # Configuración Cypress para Docker
├── .env.testing # Variables de entorno para testing
└── tests/
└── results/ # Directorio para reportes de tests
├── junit.xml
├── testdox.html
├── coverage/
└── vitest-results.json
```

## 🎯 Flujo de Ejecución

### Para `./run-tests-docker.sh all`:

1. **Verificación** - Docker instalado y funcionando
2. **Contenedores** - Verifica/inicia servicios necesarios
3. **Backend** - Ejecuta tests PHP/Laravel con SQLite
4. **Frontend** - Ejecuta tests React/Vitest
5. **E2E Setup** - Inicia servidor Laravel en puerto 3000
6. **E2E Tests** - Ejecuta tests Cypress
7. **Cleanup** - Termina servidores temporales
8. **Reporte** - Muestra resumen completo

## 🔍 Debugging

### Acceder al Contenedor
```bash
docker compose exec dev bash
```

### Ejecutar Tests Manualmente
```bash
# Dentro del contenedor
php artisan test --configuration=phpunit.docker.xml
npx vitest run --config vitest.docker.config.ts
npm run test:e2e:docker
```

### Ver Logs de Contenedores
```bash
docker compose logs -f dev
docker compose logs -f db
```

### Verificar Estado de Servicios
```bash
docker compose ps
```

## ⚡ Optimizaciones para Docker

### PHPUnit
- Memoria aumentada a 512M
- Timeout de 300 segundos
- SQLite para velocidad
- Reportes en `tests/results/`

### Vitest
- Workers limitados (1-2) para Docker
- Timeouts aumentados (15s)
- Pool optimizado para contenedores
- Cobertura en `tests/results/coverage/`

### Cypress
- Timeouts aumentados (15s comandos, 45s páginas)
- Reintentos automáticos (2x en headless)
- Flags Chrome optimizados (`--no-sandbox`, `--disable-dev-shm-usage`)
- Base URL apunta a puerto 3000

## 🚨 Troubleshooting Común

### Error: "Docker no encontrado"
```bash
# Instalar Docker y Docker Compose
# Verificar que estén en el PATH
docker --version
docker compose version
```

### Error: "Contenedores no inician"
```bash
# Limpiar y reiniciar
docker compose down
docker compose up -d dev db redis
```

### Error: "Base de datos no accesible"
```bash
# Verificar permisos del archivo SQLite
docker compose exec dev ls -la database/testing.sqlite
docker compose exec dev chmod 666 database/testing.sqlite
```

### Error: "Tests E2E fallan"
```bash
# Verificar que Laravel esté en puerto 3000
docker compose exec dev curl http://localhost:3000
# Si no responde, verificar logs
docker compose logs dev
```

### Error: "Dependencias faltantes"
```bash
# Reinstalar dependencias en el contenedor
docker compose exec dev composer install
docker compose exec dev npm ci
```

## 🎉 Resultado Exitoso

Cuando todos los tests pasan, verás:

```
🎉 ¡TODOS LOS TESTS PASARON EXITOSAMENTE!
========================================
📊 Resumen de Tests en Docker:
• Backend (PHP/Laravel): 93 tests
• Frontend (React/Vitest): 34 tests
• E2E (Cypress): 11 tests
• Total: 138 tests
========================================
✨ ¡Suite de tests completa en Docker! ✨
```

## 📝 Notas Importantes

1. **Primera ejecución** puede tomar más tiempo (instalación de dependencias)
2. **SQLite** se usa para tests, no MariaDB (para velocidad)
3. **Puerto 3000** se usa para E2E, no 8000 (configuración Docker)
4. **Resultados** se guardan en `tests/results/` para análisis
5. **Limpieza automática** de servidores temporales al finalizar

---

Para más información sobre testing en general, consulta [TESTING.md](./TESTING.md)
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,3 +147,27 @@ Se ejecuta en push/PR a `develop` y `main`:
- **PHP**: Laravel Pint para formateo automático
- **Frontend**: ESLint + Prettier para código TypeScript/React
- **Auto-format**: Formatea código automáticamente

## 🐳 Testing en Docker

El proyecto incluye soporte completo para ejecutar tests en el entorno Docker:

```bash
# Ejecutar todos los tests en Docker
./run-tests-docker.sh all

# Tests específicos
./run-tests-docker.sh backend # PHP/Laravel tests
./run-tests-docker.sh frontend # React/Vitest tests
./run-tests-docker.sh e2e # Cypress E2E tests
```

**Documentación completa**: [DOCKER-TESTING.md](./DOCKER-TESTING.md)

### Características del Testing en Docker:
- ✅ **Configuración automática** de base de datos SQLite para tests
- ✅ **Gestión de dependencias** automática (PHP + Node.js)
- ✅ **Servidores temporales** para tests E2E
- ✅ **Configuraciones optimizadas** para contenedores
- ✅ **Reportes detallados** con cobertura de código
- ✅ **Limpieza automática** al finalizar
Loading