Pipeline de Estandarizacion
### [Nombre del Flujo] Tipo de usuario: Dueno / Vet / Admin Donde empieza: Pagina/boton/link Objetivo: Una oracion Pasos: 1. Primera accion 2. Segunda accion 3. ... Que deberia pasar: - Resultado esperado Problemas comunes: - Problema 1 Casos especiales: - Caso especial 1
Feature: Turnero - Reservar turno Scenario: Reservar vacuna para gato Given estoy en la pagina del turnero When ingreso direccion "Av Santa Fe 1234" And hago click en "Siguiente" Then se crea un usuario invitado When agrego mascota "Koshka" tipo "Gato" And selecciono "Vacunacion" Then "Consulta clinica" se agrega auto Scenario: Servicios filtrados por tipo Given agregue un gato Then veo vacunas felinas And no veo vacunas caninas
features/ ├── pet-owner/ │ ├── registro.feature # 6-8 escenarios │ ├── reservar-turno.feature # 10-15 escenarios │ ├── gestion-mascotas.feature │ └── pago.feature ├── veterinarian/ │ └── ... └── backoffice/ └── ...
# NO hacer esto features/pet-owner/registro/ ├── registro-exitoso.feature ├── registro-email-invalido.feature ├── registro-password-corto.feature └── ... (docenas de archivos pequeños)
# Escenarios por archivo: 5-20 Normal, mantener 20-40 Considerar dividir 40+ Definitivamente dividir
tests/contracts/ ├── base.py # switcher de modo ├── endpoints.py # paths API (fuente unica) ├── helpers.py # datos de prueba │ ├── mascotas/ # tests por app │ ├── test_pet_owners.py │ ├── test_pets.py │ └── test_coverage.py ├── productos/ │ ├── test_services.py │ └── test_cart.py ├── solicitudes/ │ └── test_service_requests.py │ └── workflows/ # composiciones └── test_turnero_general.py
# Rapido (Django test client) pytest tests/contracts/ # Live (HTTP real) CONTRACT_TEST_MODE=live pytest
# Llama endpoints en secuencia:
1. Check cobertura
2. Crear pet owner
3. Crear mascota
4. Obtener servicios
5. Crear solicitud
tests/e2e/ ├── pages/ # Page Objects │ ├── BasePage.ts │ ├── LoginPage.ts │ └── index.ts │ └── login.spec.ts # test E2E
export class LoginPage extends BasePage { get emailInput() { return this.page.getByLabel('Email'); } async login(email, password) { await this.emailInput.fill(email); await this.passwordInput.fill(password); await this.submitButton.click(); } }
# Todos los tests npx playwright test # Con UI npx playwright test --ui # Archivo especifico npx playwright test login.spec.ts
Ejemplo completo: def/work_plan/10-flow-turnero.md
README Backend: amar_django_back/tests/contracts/README.md
README Frontend: amar_frontend/tests/README.md