Imported from kelvinhe04/pollclass (
AGENTS.md). Install upstream withnpx skills add kelvinhe04/pollclass. Copyright stays with the author.
Bitácora Agéntica - Laboratorio 5: Playwright E2E
Objetivo
Implementar pruebas automatizadas end-to-end (E2E) con Playwright para el proyecto PollClass, validando flujos críticos de usuario y casos de seguridad.
Sesión 1: Auditoría y Análisis (40 min)
Acciones Realizadas
- Revisé CONTEXT.md y README.md para entender la aplicación PollClass
- Analicé la configuración existente de Playwright:
playwright.config.js- Configuración completa con webServerstests/professor.spec.js- 3 tests de flujo de profesortests/student.spec.js- 4 tests de flujo de estudiantetests/security-roles.spec.js- 4 tests de seguridadPLAYWRIGHT.md- Documentación existente.github/workflows/e2e.yml- GitHub Actions configurado
Problemas Identificados
| Problema | Severidad | Impacto |
|---|---|---|
| Sin script Bun para ejecutar tests | Alta | Dificulta ejecución |
| Assertions frágiles (usan OR) | Alta | Tests pasan falsamente |
| Caso negativo débil | Media | No valida voto duplicado |
| Sin helpers/fixtures reutilizables | Media | Código duplicado |
| AGENTS.md no existe | Alta | Falta bitácora agéntica |
| Documentación desactualizada | Media | Inconsistencia |
Decisiones Tomadas
- Reescribir todos los tests con helpers reutilizables
- Fortalecer assertions (eliminar ORs)
- Agregar test robusto de voto duplicado
- Crear AGENTS.md con esta bitácora
Sesión 2: Implementación (60 min)
Cambios Realizados
1. package.json
+ "setup:e2e": "bun x playwright install chromium"
+ "test:e2e": "bun run playwright test"
+ "test:e2e:headed": "bun run playwright test --headed"
+ "test:e2e:ui": "bun run playwright test --ui"
+ "test:e2e:report": "bun run playwright show-report"
2. tests/fixtures.js (NUEVO)
- Funciones helper reutilizables:
generateEmail()- Emails únicos con timestampregisterProfessor()- Registro completoregisterStudent()- Registro completologinProfessor()- Login de profesorloginStudent()- Login de estudiantecreatePoll()- Crear encuestaclosePoll()- Cerrar encuestadeletePoll()- Eliminar encuestajoinPollWithCode()- Unirse con códigologout()- Cerrar sesión
3. tests/professor.spec.js
- 8 tests con assertions robustas
- Usa helpers de fixtures
- Validación real de cierre, eliminación y logout
4. tests/student.spec.js
- 7 tests (incluye verificación de códigos + caso negativo)
- Assertions robustas sin OR
- Validación real de comportamiento esperado
5. tests/security-roles.spec.js
- 6 tests de seguridad y roles
- Assertions con
toHaveURLmás confiables
Flujos Cubiertos
Flujo Profesor
- Registro exitoso
- Login exitoso
- Login con credenciales incorrectas
- Crear encuesta
- Cerrar encuesta
- Eliminar encuesta
- Ver resultados
Flujo Estudiante
- Registro exitoso
- Login exitoso
- Login con credenciales incorrectas
- Código inválido
- Unirse y votar
- Voto duplicado (CASO NEGATIVO)
- Ver resultados
Seguridad
- Ruta protegida sin auth (profesor)
- Ruta protegida sin auth (estudiante)
- Estudiante en ruta de profesor
- Profesor en ruta de estudiante
- Logout profesor
- Logout estudiante
Comandos para Ejecutar (con Bun)
# PRIMERA VEZ - Instalar navegador Chromium
bun run setup:e2e
# Ejecutar todos los tests (19 tests)
bun run test:e2e
# Ejecutar suites específicas
bun run test:professor # 8 tests - flujo profesor
bun run test:student # 7 tests - flujo estudiante
bun run test:security # 6 tests - seguridad y roles
# Modo headed (navegador visible)
bun run test:e2e:headed
# Modo UI (interfaz gráfica)
bun run test:e2e:ui
# Ver reporte HTML
bun run test:e2e:report
# Ejecutar suite específica manualmente
bun x playwright test tests/professor.spec.js
bun x playwright test tests/student.spec.js
bun x playwright test tests/security-roles.spec.js
Resultados Esperados
| Suite | Tests | Descripción |
|---|---|---|
| professor.spec.js | 8 | Flujo completo profesor |
| student.spec.js | 7 | Flujo estudiante + voto duplicado |
| security-roles.spec.js | 6 | Validaciones de seguridad |
| Total | 21 | 100% coverage |
Notas para Próximas Entregas
- Scripts - Disponibles: test:e2e, test:professor, test:student, test:security, test:e2e:headed, test:e2e:ui, test:e2e:report
- Fixtures - El archivo tests/fixtures.js puede expandirse con más helpers
- Page Objects - Para proyectos más grandes, considerar Page Object Model
- Datos de prueba - Los emails se generan dinámicamente para evitar colisiones
- CI/CD - GitHub Actions ya está configurado en .github/workflows/e2e.yml
Herramientas Utilizadas
- OpenCode - Asistente de desarrollo
- Playwright - Framework de testing E2E
- GitHub Actions - CI/CD
Bitácora Agéntica (Interacción con IA)
¿Qué se pidió al agente?
Se solicitó a OpenCode que analizara la implementación existente de Playwright y que generara una suite completa de pruebas E2E que cubriera los flujos críticos del sistema PollClass, incluyendo profesor, estudiante y validaciones de seguridad.
También se le pidió:
- Mejorar la estructura de los tests
- Implementar assertions más robustas
- Agregar al menos un caso negativo (voto duplicado)
- Crear scripts ejecutables y documentación
¿Qué se aceptó del agente?
Se aceptaron:
- La estructura base de los archivos de test (professor, student, security)
- La configuración inicial de Playwright
- La idea de usar helpers reutilizables (fixtures.js)
- La organización general de la suite
¿Qué se corrigió manualmente?
Se realizaron correcciones importantes:
- Se eliminaron assertions débiles que usaban condiciones OR
- Se fortalecieron validaciones para asegurar comportamiento real
- Se ajustaron locators para hacerlos más estables
- Se agregaron helpers adicionales: closePoll, deletePoll, logout
- Se agregaron scripts por suite: test:professor, test:student, test:security
- Se aumentó a 21 tests totales (incluyendo caso negativo de voto duplicado)
Esto fue necesario porque algunas pruebas generadas por el agente podían pasar sin validar correctamente el resultado.
¿Cómo se validó el resultado?
La validación se realizó mediante:
bun run test:e2e
Resultado: 21 tests pasando (100%)
Laboratorio 5 completado: 21 tests E2E implementados con assertions robustas, helpers reutilizables, scripts por suite y documentación completa.