package spindle import ( "context" "log/slog" "testing" "github.com/bluesky-social/indigo/atproto/syntax" "tangled.org/core/spindle/db" "tangled.org/core/tapc" ) func handleBackfilled(t *testing.T, b *backfill, evts ...tapc.Event) { t.Helper() for _, evt := range evts { evt.Record.Live = false if err := b.handle(context.Background(), evt); err != nil { t.Fatal(err) } } } func requireMarked(t *testing.T, d *db.DB, did syntax.DID, want bool, msg string) { t.Helper() if _, marked, err := d.RepoRetryRow(did); err != nil || marked != want { t.Fatalf("%s, marked = %v, %v", msg, marked, err) } } func TestBackfilledRecordsOnlyMarkTheirRepo(t *testing.T) { env := newEnsureEnv(t) env.serve("repo") b := newBackfill(env.s, slog.Default(), shortTempDir(t)) handleBackfilled(t, b, markEvent(testRepoDid, env.spindleDid(), testOwner)) if got := env.knot.count(); got != 0 { t.Fatalf("a backfilled manifest cost %d knot requests", got) } requireMarked(t, env.s.db, testRepoDid, true, "no mark for the backfilled repo") } func TestACatchUpMarksServedReposInsteadOfRefreshingThemOneByOne(t *testing.T) { env := newEnsureEnv(t) env.serve("repo") env.ensure(t) b := newBackfill(env.s, slog.Default(), shortTempDir(t)) before := env.knot.count() if err := b.refresh(context.Background(), testRepoDid); err != nil { t.Fatal(err) } if got := env.knot.count(); got != before { t.Fatalf("the catch-up's refresh cost %d knot requests, it should leave that to the repo's job", got-before) } requireMarked(t, env.s.db, testRepoDid, true, "the served repo wasn't marked") }