package state import ( "os" "path/filepath" "testing" "time" ) func newStore(t *testing.T) *Store { t.Helper() return &Store{Root: t.TempDir()} } func TestSaveAndLoadLast(t *testing.T) { s := newStore(t) rec := RunRecord{ StartedAt: time.Date(2026, 4, 13, 10, 0, 0, 0, time.UTC), EndedAt: time.Date(2026, 4, 13, 10, 1, 0, 0, time.UTC), Modules: []ModuleRecord{{ID: "hello", Status: "succeeded", Duration: "1s"}}, } if err := s.Save(rec, 10); err != nil { t.Fatal(err) } got, ok, err := s.LastRun() if err != nil || !ok { t.Fatalf("LastRun err=%v ok=%v", err, ok) } if len(got.Modules) != 1 || got.Modules[0].ID != "hello" { t.Fatalf("modules = %+v", got.Modules) } } func TestLastRunMissingReturnsFalse(t *testing.T) { s := newStore(t) _, ok, err := s.LastRun() if err != nil { t.Fatal(err) } if ok { t.Fatal("expected ok=false") } } func TestRotateKeepsNewest(t *testing.T) { s := newStore(t) for i := 0; i < 12; i++ { rec := RunRecord{ StartedAt: time.Date(2026, 1, 1, 0, 0, i, 0, time.UTC), EndedAt: time.Date(2026, 1, 1, 0, 0, i, 0, time.UTC), } if err := s.Save(rec, 5); err != nil { t.Fatal(err) } } entries, err := os.ReadDir(filepath.Join(s.Root, "runs")) if err != nil { t.Fatal(err) } if len(entries) != 5 { t.Fatalf("runs count = %d, want 5", len(entries)) } }