feat(demo): horario real de 4t A para Leo en el seeder
La familia demo siembra el horario escolar real de 4º de primaria para Leo (11 asignaturas nuevas bilingües + 29 entradas semanales en orden cronológico; Piscina lleva la Toalla asociada). Nora y Mía conservan el horario genérico. Test que fija el lunes completo de Leo.
This commit is contained in:
@@ -94,8 +94,14 @@ public class DataSeeder implements ApplicationRunner {
|
||||
Child leo = childRepository.save(child(family, "Leo", "🐢", "#5BC0BE", 9, 28, LocalTime.of(8, 30)));
|
||||
Child mia = childRepository.save(child(family, "Mía", "🦉", "#A78BD0", 6, 55, LocalTime.of(8, 15)));
|
||||
|
||||
for (Child c : List.of(nora, leo, mia)) {
|
||||
// Nora y Mía llevan el horario genérico de ejemplo; Leo (9 años, 4º de
|
||||
// primaria) lleva un horario real de 4t A, como en una familia de verdad.
|
||||
for (Child c : List.of(nora, mia)) {
|
||||
seedWeeklyMornings(c, activities);
|
||||
}
|
||||
seedWeekly4tA(leo, family, activities);
|
||||
|
||||
for (Child c : List.of(nora, leo, mia)) {
|
||||
// Rutinas de tarde escalonadas por edad, desde el catálogo de la familia.
|
||||
initialDataset.provisionChildRoutines(c);
|
||||
}
|
||||
@@ -190,6 +196,44 @@ public class DataSeeder implements ApplicationRunner {
|
||||
templateRepository.save(new WeeklyTemplateEntry(child, day, activity, 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Horario REAL de 4º de primaria (4t A, curso 2025-26) para Leo: asignaturas
|
||||
* propias del curso más las genéricas reutilizadas (Matemáticas, Música,
|
||||
* Gimnasia=Ed. Física), en el orden cronológico de cada día. El patio no se
|
||||
* siembra: no es una actividad con material que preparar.
|
||||
*/
|
||||
private void seedWeekly4tA(Child leo, Family family, ActivitiesCatalog base) {
|
||||
// La toalla (extra de la demo) acompaña a Piscina: hay que meterla en la mochila.
|
||||
MaterialItem toalla = fromBase(materialRepository.findByFamilyId(family.getId()), "Toalla");
|
||||
|
||||
Activity catala = activity(family, "Català", "Català", "📕", "#F4C95D");
|
||||
Activity castellano = activity(family, "Castellano", "Castellà", "📙", "#F2A65A");
|
||||
Activity medio = activity(family, "Medio", "Medi", "🌍", "#7FBF6B");
|
||||
Activity ingles = activity(family, "Inglés", "Anglès", "🇬🇧", "#A78BD0");
|
||||
Activity piscina = activity(family, "Piscina", "Piscina", "🏊", "#5BC0BE", toalla);
|
||||
Activity lectura = activity(family, "Lectura", "Lectura", "📖", "#EC8FA4");
|
||||
Activity religiosa = activity(family, "Cultura religiosa", "Cultura religiosa", "🙏", "#F2A65A");
|
||||
Activity workshop = activity(family, "Workshop", "Workshop", "🛠️", "#A78BD0");
|
||||
Activity robotica = activity(family, "Robótica", "Robòtica", "🤖", "#EC8FA4");
|
||||
Activity plastica = activity(family, "Plástica", "Plàstica", "🎨", "#EC8FA4");
|
||||
Activity tutoria = activity(family, "Tutoría", "Tutoria", "💬", "#5BC0BE");
|
||||
|
||||
addDay(leo, DayOfWeek.MONDAY, base.matematicas(), medio, castellano, piscina, ingles, catala);
|
||||
addDay(leo, DayOfWeek.TUESDAY, catala, base.musica(), base.gimnasia(), ingles, religiosa,
|
||||
base.matematicas());
|
||||
addDay(leo, DayOfWeek.WEDNESDAY, catala, medio, ingles, lectura, base.matematicas(), castellano);
|
||||
addDay(leo, DayOfWeek.THURSDAY, workshop, base.matematicas(), medio, base.musica(), robotica,
|
||||
base.gimnasia());
|
||||
addDay(leo, DayOfWeek.FRIDAY, base.matematicas(), plastica, catala, castellano, tutoria);
|
||||
}
|
||||
|
||||
/** Añade las asignaturas de un día en orden cronológico (orderIndex incremental). */
|
||||
private void addDay(Child child, DayOfWeek day, Activity... subjects) {
|
||||
for (int i = 0; i < subjects.length; i++) {
|
||||
templateRepository.save(new WeeklyTemplateEntry(child, day, subjects[i], i));
|
||||
}
|
||||
}
|
||||
|
||||
private record ActivitiesCatalog(Activity gimnasia, Activity musica, Activity matematicas,
|
||||
Activity lengua) {
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* Verifica que el sembrado del prototipo (familia demo + sus datos) se ejecuta
|
||||
@@ -41,8 +42,21 @@ class DataSeederIT {
|
||||
assertThat(familyRepository.findByEmailIgnoreCase("demo@recordalexia.local")).isPresent();
|
||||
assertThat(childRepository.count()).isEqualTo(3); // Nora, Leo, Mía
|
||||
assertThat(rewardRepository.count()).isEqualTo(6); // 6 premios
|
||||
assertThat(activityRepository.count()).isEqualTo(4); // 4 actividades
|
||||
assertThat(templateRepository.count()).isEqualTo(15); // 3 niños x 5 días
|
||||
assertThat(activityRepository.count()).isEqualTo(15); // 4 genéricas + 11 de 4t A
|
||||
// Nora y Mía: 5 días x 1 asignatura; Leo: horario real 4t A (29 entradas).
|
||||
assertThat(templateRepository.count()).isEqualTo(5 + 5 + 29);
|
||||
}
|
||||
|
||||
// Transaccional: navega la relación LAZY entrada→actividad, que requiere sesión.
|
||||
@Test
|
||||
@Transactional(readOnly = true)
|
||||
void leoLlevaElHorarioRealDe4tA() {
|
||||
Long leoId = childRepository.findAll().stream()
|
||||
.filter(c -> c.getName().equals("Leo")).findFirst().orElseThrow().getId();
|
||||
var lunes = templateRepository
|
||||
.findByChildIdAndDayOfWeekOrderByOrderIndexAsc(leoId, java.time.DayOfWeek.MONDAY);
|
||||
assertThat(lunes).extracting(e -> e.getActivity().getLabelEs())
|
||||
.containsExactly("Matemáticas", "Medio", "Castellano", "Piscina", "Inglés", "Català");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user