|
| 1 | +# Pre-plan: Tests esqueleto en master + Guión del instructor |
| 2 | + |
| 3 | +## Contexto |
| 4 | + |
| 5 | +Workshop funcionalmente completo y visualmente pulido. Este pre-plan recoge dos iniciativas |
| 6 | +pendientes que preparar antes del workshop. |
| 7 | + |
| 8 | +--- |
| 9 | + |
| 10 | +## Iniciativa 1: Tests esqueleto en master |
| 11 | + |
| 12 | +### Idea |
| 13 | + |
| 14 | +En `master` (punto de partida de los asistentes), todos los test files estarán creados con |
| 15 | +los `it` escritos pero vacíos (`it.todo`), agrupados por `describe` por iteración. Así los |
| 16 | +asistentes tienen desde el primer momento una guía clara de qué deben construir en cada fase. |
| 17 | + |
| 18 | +### Motivación |
| 19 | + |
| 20 | +- Los asistentes no arrancan de cero sin saber qué testear |
| 21 | +- Elimina el tiempo de "¿qué test escribo primero?" |
| 22 | +- Los `describe` por iteración dan estructura y orientación progresiva |
| 23 | +- Los `it.todo` aparecen en el runner como pendientes (feedback visual inmediato) |
| 24 | + |
| 25 | +### Estructura propuesta |
| 26 | + |
| 27 | +**`src/pages/home/__tests__/Home.test.tsx`** |
| 28 | +``` |
| 29 | +describe('Iteración 1 - Listado de categorías', () => { |
| 30 | + it.todo('should render the list of categories in the navigation') |
| 31 | +}) |
| 32 | +
|
| 33 | +describe('Iteración 2 - Listado de productos', () => { |
| 34 | + it.todo('should display the products with their prices correctly formatted') |
| 35 | +}) |
| 36 | +
|
| 37 | +describe('Iteración 4 - Toggle card/list view', () => { |
| 38 | + it.todo('should not display product descriptions and nutriscore in card view') |
| 39 | + it.todo('should display product descriptions and nutriscore when switching to list view') |
| 40 | + it.todo('should hide product descriptions and nutriscore when switching back to card view') |
| 41 | +}) |
| 42 | +
|
| 43 | +describe('Iteración 5 - Modal de producto', () => { |
| 44 | + it.todo('should open a dialog with product details when clicking a product') |
| 45 | + it.todo('should close the dialog when clicking close button') |
| 46 | +}) |
| 47 | +``` |
| 48 | + |
| 49 | +**`src/pages/category-detail/__tests__/CategoryDetail.test.tsx`** |
| 50 | +``` |
| 51 | +describe('Iteración 3 - Navegación y routing', () => { |
| 52 | + it.todo('should navigate to the category page and display the category title') |
| 53 | + it.todo('should display a not found message when the category does not exist') |
| 54 | + it.todo('should highlight the active category in the navigation') |
| 55 | + it.todo('should navigate to home when clicking the logo') |
| 56 | +}) |
| 57 | +``` |
| 58 | + |
| 59 | +**`src/pages/not-found/__tests__/NotFound.test.tsx`** — pendiente de decidir si tiene |
| 60 | +sentido incluirlo aquí o si se crea en la iteración 3 en vivo. |
| 61 | + |
| 62 | +### Preguntas a resolver en sesión de planificación |
| 63 | + |
| 64 | +- ¿Los `it.todo` o simplemente `it('descripción')` sin callback? (Vitest muestra ambos como |
| 65 | + pending, pero `it.todo` es más explícito) |
| 66 | +- ¿Se mantiene el test de Home que ya existe en master |
| 67 | + (`should render the list of categories in the navigation` real, no todo)? |
| 68 | + O se convierte también en todo y el asistente lo implementa en iteración 1 |
| 69 | +- ¿Los helpers (`clickCategory`, `toggleViewMode`, `clickProduct`) también en master |
| 70 | + como esqueleto vacío, o se añaden en cada iteración? |
| 71 | +- ¿Los imports necesarios para los tests (App, screen, render...) ya incluidos en el esqueleto, |
| 72 | + o se deja el archivo completamente vacío salvo los describes? |
| 73 | +- ¿Cómo afecta esto a las ramas `-start`? Deberían heredar de master limpiamente. |
| 74 | + Las ramas `-solution` ya tienen los tests reales implementados. |
| 75 | + |
| 76 | +### Impacto en ramas |
| 77 | + |
| 78 | +- Solo afecta a `master` (y por cascade a todas las ramas `-start`) |
| 79 | +- Las ramas `-solution` no se tocan: ya tienen los tests completos |
| 80 | +- Hay que verificar que los `it.todo` no rompan ninguna configuración de CI |
| 81 | + |
| 82 | +--- |
| 83 | + |
| 84 | +## Iniciativa 2: Guión del instructor |
| 85 | + |
| 86 | +### Idea |
| 87 | + |
| 88 | +Documento markdown que sirve de guión para conducir el workshop. No es un tutorial para |
| 89 | +asistentes sino una referencia para quien lo imparte. |
| 90 | + |
| 91 | +### Estructura propuesta |
| 92 | + |
| 93 | +``` |
| 94 | +# Guión del instructor - TDD Workshop |
| 95 | +
|
| 96 | +## Antes de empezar |
| 97 | +- Setup del entorno (requisitos, clone, npm install, npm start) |
| 98 | +- Cómo mostrar las ramas solución |
| 99 | +
|
| 100 | +## Iteración 1 — Listado de categorías (~20 min) |
| 101 | +### Qué van a construir |
| 102 | +### Ciclo TDD esperado |
| 103 | +### Puntos clave a remarcar |
| 104 | +### Solución de referencia (rama: iteration-1-solution) |
| 105 | +### Errores frecuentes |
| 106 | +
|
| 107 | +## Iteración 2 — Productos y formateo (~25 min) |
| 108 | +... |
| 109 | +
|
| 110 | +## Iteración 3 — Navegación y routing (~25 min) |
| 111 | +... |
| 112 | +
|
| 113 | +## Iteración 4 — Toggle card/list view (~20 min) |
| 114 | +... |
| 115 | +
|
| 116 | +## Iteración 5 — Modal con dialog nativo (~20 min) |
| 117 | +... |
| 118 | +
|
| 119 | +## Cierre |
| 120 | +- Retrospectiva con asistentes |
| 121 | +- Recursos y siguientes pasos |
| 122 | +``` |
| 123 | + |
| 124 | +### Preguntas a resolver en sesión de planificación |
| 125 | + |
| 126 | +- ¿Dónde vive el documento? ¿`.aiplan/instructor-guide.md` o en raíz como `INSTRUCTOR.md`? |
| 127 | +- ¿Nivel de detalle: solo puntos clave o con el código de solución inline? |
| 128 | +- ¿Incluye timings orientativos? |
| 129 | +- ¿Se escribe en español o inglés? |
| 130 | + |
| 131 | +--- |
| 132 | + |
| 133 | +## Orden sugerido de implementación |
| 134 | + |
| 135 | +1. Tests esqueleto en master (impacta código, requiere cascade) |
| 136 | +2. Guión del instructor (solo documentación, independiente) |
0 commit comments