package store import ( "testing" "time" "ncore-hnr/internal/model" ) func TestMarkResolvedResolvesManualNeededTorrent(t *testing.T) { db, err := Open(t.TempDir() + "/state.sqlite") if err != nil { t.Fatal(err) } defer db.Close() now := time.Date(2026, 5, 7, 1, 0, 0, 0, time.UTC) torrent := model.Torrent{ID: 123, Name: "The Black Dagger Brotherhood S01E01 720p"} if _, err := db.UpsertSeen(torrent, now); err != nil { t.Fatal(err) } if err := db.MarkManualNeeded(torrent.ID, now.Add(time.Hour)); err != nil { t.Fatal(err) } resolvedAt := now.Add(2 * time.Hour) if err := db.MarkResolved(map[int64]bool{}, resolvedAt); err != nil { t.Fatal(err) } status, err := db.Status() if err != nil { t.Fatal(err) } if len(status.Torrents) != 1 { t.Fatalf("expected 1 tracked torrent, got %d", len(status.Torrents)) } got := status.Torrents[0] if got.Status != "resolved" { t.Fatalf("expected status resolved, got %q", got.Status) } if got.LastResolvedAt != resolvedAt.Format(time.RFC3339) { t.Fatalf("expected last_resolved_at %q, got %q", resolvedAt.Format(time.RFC3339), got.LastResolvedAt) } } func TestInsertRunRecordsFailureMetadata(t *testing.T) { db, err := Open(t.TempDir() + "/state.sqlite") if err != nil { t.Fatal(err) } defer db.Close() startedAt := time.Date(2026, 5, 7, 11, 0, 0, 0, time.UTC) if err := db.InsertRun(model.RunSummary{ StartedAt: startedAt, Status: "failed", ErrorStep: "fetch nCore HnR page", ErrorMessage: "timeout", DryRun: true, }); err != nil { t.Fatal(err) } stats, err := db.Stats() if err != nil { t.Fatal(err) } if stats.LastRun == nil { t.Fatal("expected last run") } if stats.LastRun.Status != "failed" { t.Fatalf("expected status failed, got %q", stats.LastRun.Status) } if stats.LastRun.ErrorStep != "fetch nCore HnR page" { t.Fatalf("expected error step to be recorded, got %q", stats.LastRun.ErrorStep) } if stats.LastRun.ErrorMessage != "timeout" { t.Fatalf("expected error message to be recorded, got %q", stats.LastRun.ErrorMessage) } if !stats.LastRun.DryRun { t.Fatal("expected dry-run to be recorded") } }