Some checks failed
CI Pipeline / changes (push) Has been cancelled
CI Pipeline / core (push) Has been cancelled
CI Pipeline / trading-backend (push) Has been cancelled
CI Pipeline / trading-data-service (push) Has been cancelled
CI Pipeline / trading-frontend (push) Has been cancelled
CI Pipeline / erp-core (push) Has been cancelled
CI Pipeline / erp-mecanicas (push) Has been cancelled
CI Pipeline / gamilit-backend (push) Has been cancelled
CI Pipeline / gamilit-frontend (push) Has been cancelled
## Backend - fix(ranks): Reordenar rutas en RanksController para evitar conflictos 404 - feat(gamification): Agregar MayaRankEntity al modulo - feat(ml-coins): Expandir funcionalidad del servicio - feat(teacher): Mejoras en dashboard, mensajes y reportes - feat(entities): Nuevas entidades admin, educational, progress, social ## Frontend - feat(gamificationAPI): API completa para ranks con endpoints - feat(RubricEvaluator): Nuevo componente para evaluacion docente - refactor(admin): Mejoras en hooks y paginas - refactor(teacher): Mejoras en paginas del portal ## Database - fix(initialize_user_stats): Agregar is_current y achieved_at a user_ranks - fix(notifications-policies): Corregir RLS con JOIN correcto - feat(friendships): Agregar columna status con estados - sync(seeds): Homologacion completa DEV <-> PROD ## Docs & Orchestration - docs(api): Actualizar API-TEACHER-MODULE.md - docs(frontend): COMPONENTES-INVENTARIO.md - docs(database): VIEWS-INVENTARIO.md, VALIDACION-DDL-SEEDS - Reportes de analisis y validacion 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
410 lines
10 KiB
Markdown
410 lines
10 KiB
Markdown
# CASOS DE PRUEBA E2E - MÓDULOS 4 Y 5
|
||
## Gamilit Platform - Test Plan
|
||
|
||
**Fecha:** 2025-12-23
|
||
**Versión:** 1.0
|
||
**Estado:** DOCUMENTADO
|
||
|
||
---
|
||
|
||
## RESUMEN
|
||
|
||
Este documento define los casos de prueba E2E para validar el flujo completo de los módulos 4 (Lectura Digital) y 5 (Producción Creativa), incluyendo:
|
||
- Envío de respuestas
|
||
- Validación de estructura
|
||
- Integración con gamificación (XP, ML Coins)
|
||
- Revisión docente
|
||
- Otorgamiento de recompensas
|
||
|
||
---
|
||
|
||
## FLUJO COMPLETO A PROBAR
|
||
|
||
```
|
||
Estudiante completa ejercicio M4/M5
|
||
↓
|
||
Frontend: useExerciseSubmission.submit()
|
||
↓
|
||
Backend: exercises.controller.submit()
|
||
↓
|
||
Backend: validate_module4_module5_answer() [SQL]
|
||
↓
|
||
Backend: exercise-attempt.service.create()
|
||
↓
|
||
Database: progress_tracking.exercise_attempts
|
||
↓
|
||
Triggers: XP, ML Coins (auto-calificable) o pendiente (manual)
|
||
↓
|
||
[Si manual] Docente: ReviewPanel → RubricEvaluator → grade()
|
||
↓
|
||
Backend: grading.service.grade()
|
||
↓
|
||
Triggers: Otorgar rewards finales
|
||
↓
|
||
Estudiante ve feedback en dashboard
|
||
```
|
||
|
||
---
|
||
|
||
## CASOS DE PRUEBA - MÓDULO 4
|
||
|
||
### E2E-M4-01: Verificador Fake News - Respuesta Válida
|
||
|
||
**Precondiciones:**
|
||
- Usuario autenticado como estudiante
|
||
- Ejercicio 4.1 desbloqueado
|
||
- Usuario en rango Nacom (500+ XP)
|
||
|
||
**Pasos:**
|
||
1. Navegar a Módulo 4 > Ejercicio 4.1 (Verificador Fake News)
|
||
2. Completar 3 afirmaciones con veredictos (verdadero/falso/parcial)
|
||
3. Agregar evidencia para cada afirmación (≥10 caracteres)
|
||
4. Citar al menos 1 fuente
|
||
5. Enviar respuesta
|
||
|
||
**Datos de prueba:**
|
||
```json
|
||
{
|
||
"claims_verified": [
|
||
{
|
||
"claim_id": "claim-1",
|
||
"verdict": "verdadero",
|
||
"evidence": "Según biografía oficial de Marie Curie"
|
||
},
|
||
{
|
||
"claim_id": "claim-2",
|
||
"verdict": "falso",
|
||
"evidence": "No hay registros históricos de esto"
|
||
},
|
||
{
|
||
"claim_id": "claim-3",
|
||
"verdict": "parcial",
|
||
"evidence": "Parcialmente correcto pero exagerado"
|
||
}
|
||
],
|
||
"is_fake": false,
|
||
"evidence": "Fuente: Wikipedia + Enciclopedia Britannica"
|
||
}
|
||
```
|
||
|
||
**Resultado esperado:**
|
||
- ✅ Respuesta guardada exitosamente
|
||
- ✅ Estado: "pending_review"
|
||
- ✅ No se otorgan XP/ML Coins hasta revisión docente
|
||
- ✅ Aparece en lista de pendientes del Teacher Portal
|
||
|
||
---
|
||
|
||
### E2E-M4-02: Quiz TikTok - 3/3 Correctas (Auto-calificable)
|
||
|
||
**Precondiciones:**
|
||
- Usuario autenticado como estudiante
|
||
- Ejercicio 4.3 desbloqueado
|
||
- Es el PRIMER intento del usuario
|
||
|
||
**Pasos:**
|
||
1. Navegar a Módulo 4 > Ejercicio 4.3 (Quiz TikTok)
|
||
2. Responder 3 preguntas correctamente en <30s cada una
|
||
3. Enviar respuestas
|
||
|
||
**Datos de prueba:**
|
||
```json
|
||
{
|
||
"answers": [0, 1, 1],
|
||
"swipeHistory": [0, 1, 2],
|
||
"score": 95
|
||
}
|
||
```
|
||
|
||
**Resultado esperado:**
|
||
- ✅ Score: 100 puntos (o cercano con penalización tiempo)
|
||
- ✅ XP otorgado: 150 XP base × 1.10 (Nacom) = 165 XP
|
||
- ✅ ML Coins otorgados: 50 base × 1.10 = 55 coins
|
||
- ✅ Bonus firstAttempt aplicado
|
||
- ✅ Estado: "completed" (no requiere revisión)
|
||
|
||
---
|
||
|
||
### E2E-M4-03: Quiz TikTok - Segundo Intento (Anti-farming)
|
||
|
||
**Precondiciones:**
|
||
- Usuario ya completó E2E-M4-02 previamente
|
||
|
||
**Pasos:**
|
||
1. Intentar hacer el ejercicio 4.3 nuevamente
|
||
2. Responder todas correctamente
|
||
|
||
**Resultado esperado:**
|
||
- ✅ Score calculado correctamente
|
||
- ❌ XP NO otorgado (anti-farming)
|
||
- ❌ ML Coins NO otorgados (anti-farming)
|
||
- ✅ Mensaje: "Ya completaste este ejercicio"
|
||
|
||
---
|
||
|
||
### E2E-M4-04: Análisis Memes - Estructura Inválida
|
||
|
||
**Precondiciones:**
|
||
- Usuario autenticado como estudiante
|
||
|
||
**Pasos:**
|
||
1. Navegar a ejercicio 4.5
|
||
2. Intentar enviar respuesta con estructura incorrecta
|
||
|
||
**Datos de prueba (inválidos):**
|
||
```json
|
||
{
|
||
"annotations": [],
|
||
"analysis": {
|
||
"message": ""
|
||
}
|
||
}
|
||
```
|
||
|
||
**Resultado esperado:**
|
||
- ❌ Error de validación
|
||
- ✅ Mensaje: "annotations debe tener al menos 1 elemento"
|
||
- ✅ Mensaje: "message no puede estar vacío"
|
||
- ✅ No se crea attempt
|
||
|
||
---
|
||
|
||
### E2E-M4-05: Infografía Interactiva - Flujo Completo
|
||
|
||
**Precondiciones:**
|
||
- Usuario en rango Ah K'in (1,000+ XP)
|
||
|
||
**Pasos:**
|
||
1. Explorar al menos 3 secciones de la infografía
|
||
2. Responder preguntas de síntesis
|
||
3. Enviar respuesta
|
||
|
||
**Datos de prueba:**
|
||
```json
|
||
{
|
||
"answers": {
|
||
"q1": "Polonia y Francia",
|
||
"q2": "Física y Química"
|
||
},
|
||
"sections_explored": ["biografia", "descubrimientos", "premios"]
|
||
}
|
||
```
|
||
|
||
**Resultado esperado:**
|
||
- ✅ Respuesta guardada
|
||
- ✅ Estado: "pending_review"
|
||
- ✅ sections_explored validado (≥1)
|
||
|
||
---
|
||
|
||
## CASOS DE PRUEBA - MÓDULO 5
|
||
|
||
### E2E-M5-01: Diario Multimedia - 3 Entradas
|
||
|
||
**Precondiciones:**
|
||
- Usuario autenticado como estudiante
|
||
- Módulos 1-4 completados
|
||
|
||
**Pasos:**
|
||
1. Navegar a Módulo 5 > Ejercicio 5.1 (Diario Multimedia)
|
||
2. Crear 3 entradas de diario
|
||
3. Cada entrada con fecha, contenido (≥50 chars), y mood
|
||
|
||
**Datos de prueba:**
|
||
```json
|
||
{
|
||
"entries": [
|
||
{
|
||
"date": "1898-12-21",
|
||
"content": "Hoy hemos aislado un nuevo elemento. Lo llamaremos polonio en honor a mi amada Polonia...",
|
||
"mood": "esperanzada"
|
||
},
|
||
{
|
||
"date": "1903-11-10",
|
||
"content": "El Premio Nobel ha llegado. Pierre y yo compartimos este honor con Becquerel...",
|
||
"mood": "orgullosa"
|
||
},
|
||
{
|
||
"date": "1911-11-04",
|
||
"content": "Un segundo Premio Nobel, esta vez de Química. Pero Pierre ya no está aquí...",
|
||
"mood": "melancólica"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**Resultado esperado:**
|
||
- ✅ Respuesta guardada
|
||
- ✅ Estado: "pending_review"
|
||
- ✅ XP pendiente: 500 XP (se otorga al calificar)
|
||
- ✅ Validación: 1-5 entradas, ≥50 chars cada una
|
||
|
||
---
|
||
|
||
### E2E-M5-02: Video Carta - Solo Script (sin video)
|
||
|
||
**Precondiciones:**
|
||
- Usuario autenticado como estudiante
|
||
|
||
**Pasos:**
|
||
1. Navegar a ejercicio 5.3
|
||
2. Escribir script (≥100 caracteres)
|
||
3. NO subir video (opción válida)
|
||
4. Enviar
|
||
|
||
**Datos de prueba:**
|
||
```json
|
||
{
|
||
"video_url": null,
|
||
"script": "Querida Marie Curie, te escribo desde el año 2025 para agradecerte por tu valentía al enfrentar los prejuicios de tu época. Tu dedicación a la ciencia inspiró a generaciones de mujeres científicas. Gracias por demostrar que el conocimiento no tiene género.",
|
||
"duration": null
|
||
}
|
||
```
|
||
|
||
**Resultado esperado:**
|
||
- ✅ Respuesta guardada (script válido como alternativa)
|
||
- ✅ Estado: "pending_review"
|
||
- ✅ Validación: script ≥100 caracteres
|
||
|
||
---
|
||
|
||
### E2E-M5-03: Comic Digital - Validación Paneles
|
||
|
||
**Precondiciones:**
|
||
- Usuario autenticado como estudiante
|
||
|
||
**Pasos:**
|
||
1. Navegar a ejercicio 5.2
|
||
2. Crear 5 paneles de cómic
|
||
3. Cada panel con diálogo y narración
|
||
|
||
**Datos de prueba:**
|
||
```json
|
||
{
|
||
"panels": [
|
||
{ "dialogue": "Marie: ¡Pierre, mira esto!", "narration": "En el laboratorio de París, 1898" },
|
||
{ "dialogue": "Pierre: ¿Es... radiactivo?", "narration": "Los esposos examinan el mineral" },
|
||
{ "dialogue": "Marie: Lo llamaremos Radio.", "narration": "El descubrimiento que cambiaría el mundo" },
|
||
{ "dialogue": "Narrador: Años después...", "narration": "Estocolmo, 1903" },
|
||
{ "dialogue": "Marie: Este premio es para la ciencia.", "narration": "Primera mujer en ganar un Nobel" }
|
||
]
|
||
}
|
||
```
|
||
|
||
**Resultado esperado:**
|
||
- ✅ Respuesta guardada
|
||
- ✅ Estado: "pending_review"
|
||
- ✅ Validación: 4-6 paneles
|
||
|
||
---
|
||
|
||
### E2E-M5-04: Calificación por Docente
|
||
|
||
**Precondiciones:**
|
||
- Usuario autenticado como docente
|
||
- Existe submission pendiente de E2E-M5-01
|
||
|
||
**Pasos:**
|
||
1. Navegar a Teacher Portal > Review Panel
|
||
2. Seleccionar submission de Diario Multimedia
|
||
3. Evaluar con RubricEvaluator:
|
||
- Precisión histórica: 4/5
|
||
- Profundidad emocional: 5/5
|
||
- Creatividad: 4/5
|
||
- Voz auténtica: 4/5
|
||
4. Agregar feedback general
|
||
5. Guardar calificación
|
||
|
||
**Datos de entrada:**
|
||
```json
|
||
{
|
||
"scores": [
|
||
{ "criterionId": "precision_historica", "selectedLevel": 4 },
|
||
{ "criterionId": "profundidad_emocional", "selectedLevel": 5 },
|
||
{ "criterionId": "creatividad", "selectedLevel": 4 },
|
||
{ "criterionId": "voz_autentica", "selectedLevel": 4 }
|
||
],
|
||
"feedback": "Excelente trabajo. Las entradas reflejan una comprensión profunda de los sentimientos de Marie Curie."
|
||
}
|
||
```
|
||
|
||
**Resultado esperado:**
|
||
- ✅ Score final: 85% (calculado con pesos)
|
||
- ✅ XP otorgado al estudiante: 500 XP × (85/100) = 425 XP
|
||
- ✅ ML Coins otorgados: proporcional al score
|
||
- ✅ Estado cambia a "graded"
|
||
- ✅ Estudiante recibe notificación
|
||
|
||
---
|
||
|
||
## CASOS DE PRUEBA - GAMIFICACIÓN
|
||
|
||
### E2E-GAM-01: Promoción de Rango
|
||
|
||
**Precondiciones:**
|
||
- Usuario en rango Halach Uinic con 1,850 XP
|
||
- Necesita 50 XP más para K'uk'ulkan (1,900 XP)
|
||
|
||
**Pasos:**
|
||
1. Completar ejercicio que otorgue ≥50 XP
|
||
|
||
**Resultado esperado:**
|
||
- ✅ Total XP: 1,900+
|
||
- ✅ Trigger: promote_to_next_rank() ejecutado
|
||
- ✅ Nuevo rango: K'uk'ulkan
|
||
- ✅ ML Coins bonus: +1,000 coins
|
||
- ✅ Achievement: "Ascenso a K'uk'ulkan" desbloqueado
|
||
- ✅ Multiplicador actualizado: 1.25x
|
||
- ✅ Notificación enviada al usuario
|
||
|
||
---
|
||
|
||
### E2E-GAM-02: Multiplicador ML Coins por Rango
|
||
|
||
**Precondiciones:**
|
||
- Usuario en rango Nacom (multiplicador 1.10x)
|
||
|
||
**Pasos:**
|
||
1. Completar ejercicio con recompensa base 50 ML Coins
|
||
|
||
**Resultado esperado:**
|
||
- ✅ ML Coins finales: 50 × 1.10 = 55 coins
|
||
- ✅ Transacción registrada con multiplicador
|
||
|
||
---
|
||
|
||
## MATRIZ DE COBERTURA
|
||
|
||
| Ejercicio | Envío | Validación | Revisión | XP | ML Coins | Anti-farming |
|
||
|-----------|-------|------------|----------|-----|----------|--------------|
|
||
| 4.1 Verificador FN | ✅ | ✅ | ✅ | ✅ | ✅ | N/A |
|
||
| 4.2 Infografía | ✅ | ✅ | ✅ | ✅ | ✅ | N/A |
|
||
| 4.3 Quiz TikTok | ✅ | ✅ | N/A | ✅ | ✅ | ✅ |
|
||
| 4.4 Nav Hipertextual | ✅ | ✅ | ✅ | ✅ | ✅ | N/A |
|
||
| 4.5 Análisis Memes | ✅ | ✅ | ✅ | ✅ | ✅ | N/A |
|
||
| 5.1 Diario Multi | ✅ | ✅ | ✅ | ✅ | ✅ | N/A |
|
||
| 5.2 Cómic Digital | ✅ | ✅ | ✅ | ✅ | ✅ | N/A |
|
||
| 5.3 Video-Carta | ✅ | ✅ | ✅ | ✅ | ✅ | N/A |
|
||
|
||
---
|
||
|
||
## HERRAMIENTAS DE PRUEBA RECOMENDADAS
|
||
|
||
1. **Cypress** - E2E testing frontend
|
||
2. **Jest + Supertest** - Integration testing backend
|
||
3. **pgTAP** - Database function testing
|
||
4. **Postman/Newman** - API testing
|
||
|
||
---
|
||
|
||
## PRIORIDAD DE EJECUCIÓN
|
||
|
||
1. **P0 - Crítico:** E2E-M4-02, E2E-M4-03 (Quiz TikTok + anti-farming)
|
||
2. **P1 - Alto:** E2E-M5-04, E2E-GAM-01 (Calificación + Promoción)
|
||
3. **P2 - Medio:** Resto de casos M4-M5
|
||
|
||
---
|
||
|
||
**Documento generado:** 2025-12-23
|
||
**Estado:** LISTO PARA IMPLEMENTACIÓN DE TESTS
|