54 lines
2.2 KiB
Go
54 lines
2.2 KiB
Go
package api
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"gardomatic.kleiax.de/internal/storage"
|
|
)
|
|
|
|
func TestSyncSeasonTaskTemplatesCreatesAndPreservesDerivedTemplates(t *testing.T) {
|
|
gardenID, march, day, april := 3, 3, 10, 4
|
|
model := &templateTestModel{items: map[int]storage.SpeciesTaskTemplate{}, nextID: 4}
|
|
app, _, _ := newGardenTestApplication()
|
|
app.models.SpeciesTaskTemplates = model
|
|
species := storage.Species{ID: 2, GardenID: &gardenID, PlantingMonthFrom: &march, PlantingDayFrom: &day, PlantingMonthTo: &april, PlantingDayTo: &day}
|
|
|
|
if err := app.syncSeasonTaskTemplates(gardenID, species); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(model.items) != 1 {
|
|
t.Fatalf("templates=%d want=1", len(model.items))
|
|
}
|
|
var generated storage.SpeciesTaskTemplate
|
|
for _, generated = range model.items {
|
|
}
|
|
if generated.Origin != storage.TaskTemplateOriginSeasonPlanting || generated.TriggerType != storage.TaskTriggerRelativeToSpeciesPlanting {
|
|
t.Fatalf("unexpected generated template: %+v", generated)
|
|
}
|
|
if generated.Duration != 31 || generated.Recurrence != storage.TaskRecurrenceNone {
|
|
t.Fatalf("unexpected generated schedule: %+v", generated)
|
|
}
|
|
|
|
generated.Title, generated.Active = "Eigener Titel", false
|
|
model.items[generated.ID] = generated
|
|
if err := app.syncSeasonTaskTemplates(gardenID, species); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := model.items[generated.ID]; got.Title != "Eigener Titel" || got.Active {
|
|
t.Fatalf("user changes were overwritten: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestGeneratedTaskUsesSpeciesPlantingSeason(t *testing.T) {
|
|
acquired := time.Date(2026, 8, 1, 0, 0, 0, 0, time.UTC)
|
|
month, day := 3, 15
|
|
plant := storage.Plant{ID: 8, AcquiredAt: &acquired}
|
|
species := storage.Species{PlantingMonthFrom: &month, PlantingDayFrom: &day}
|
|
template := storage.SpeciesTaskTemplate{ID: 9, Title: "Pflanzen", TriggerType: storage.TaskTriggerRelativeToSpeciesPlanting, DurationUnit: storage.TaskDurationDay}
|
|
tasks := generatedTasksForTemplate(plant, species, template, nil, 3, 1, time.Date(2026, 9, 1, 0, 0, 0, 0, time.UTC))
|
|
if len(tasks) != 1 || tasks[0].DueAtStart.Month() != time.March || tasks[0].DueAtStart.Day() != 15 || tasks[0].DueAtStart.Year() != 2027 {
|
|
t.Fatalf("unexpected planting season task: %+v", tasks)
|
|
}
|
|
}
|