diff --git a/internal/store/store.go b/internal/store/store.go index d94a513..ad2544e 100644 --- a/internal/store/store.go +++ b/internal/store/store.go @@ -79,7 +79,7 @@ func (s *Store) UpsertSeen(torrent model.Torrent, now time.Time) (State, error) } func (s *Store) MarkResolved(activeIDs map[int64]bool, now time.Time) error { - rows, err := s.db.Query(`SELECT ncore_id FROM torrents WHERE status = 'active'`) + rows, err := s.db.Query(`SELECT ncore_id FROM torrents WHERE status IN ('active', 'manual_needed')`) if err != nil { return err } diff --git a/internal/store/store_test.go b/internal/store/store_test.go new file mode 100644 index 0000000..41e56ca --- /dev/null +++ b/internal/store/store_test.go @@ -0,0 +1,45 @@ +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) + } +}