package dataset import ( "context" "testing" "time" "chat-agent-system/internal/artifactvault" ) func TestPauseResumeAndReplayCounts(t *testing.T) { ctx := context.Background() now := time.Now().UTC() body := []byte("# pause resume body") enum := NewMemoryEnumerator() enum.Seed(artifactvault.KindApproved, []artifactvault.Candidate{ {Kind: artifactvault.KindApproved, SourcePK: 1, LogicalID: "doc_a", SnapshotID: 2, ApprovedAt: &now, Payload: body, EventID: "approved:doc_a:2"}, {Kind: artifactvault.KindApproved, SourcePK: 2, LogicalID: "doc_b", SnapshotID: 3, ApprovedAt: &now, Payload: body, EventID: "approved:doc_b:3"}, }) mem := artifactvault.NewMemoryRegistry() run := NewMemoryRunner(enum, mem) job := NewJob("pause", "dev", "scratch", 38) st, err := run.RunBatch(ctx, job, artifactvault.KindApproved, 0, 1) if err != nil { t.Fatal(err) } if st.Scanned != 1 { t.Fatalf("first batch scanned=%d", st.Scanned) } job.Pause() if _, err := run.RunBatch(ctx, job, artifactvault.KindApproved, 0, 1); err == nil { t.Fatal("paused job must refuse batches") } if err := job.Resume(); err != nil { t.Fatal(err) } st, err = run.RunBatch(ctx, job, artifactvault.KindApproved, 0, 50) if err != nil { t.Fatal(err) } if st.Scanned != 2 || st.Succeeded != 2 || mem.Coverage(ctx).Required != 2 { t.Fatalf("resume stats=%+v required=%d", st, mem.Coverage(ctx).Required) } job.Checkpoints = map[string]Checkpoint{} st, err = run.RunBatch(ctx, job, artifactvault.KindApproved, 0, 50) if err != nil { t.Fatal(err) } if mem.Coverage(ctx).Required != 2 { t.Fatalf("replay duplicated artifacts %d stats=%+v", mem.Coverage(ctx).Required, st) } }