package research_runtime_test import ( "context" "testing" "git.cin.su/m/Assistant/contracts/epistemics" "git.cin.su/m/Assistant/modules/epistemics/application" ) type store struct{ saved []epistemics.TruthBundle } func (s *store) SaveTruthBundle(_ context.Context, value epistemics.TruthBundle, _ int64) error { s.saved = append(s.saved, value) return nil } func TestEvaluateAndPersistStoresExactCandidateChain(t *testing.T) { candidate := epistemics.ResearchCandidate{ PropositionKey: "p1", Statement: "fact", Source: epistemics.Source{ID: "source-1", Kind: "repo", Locator: "file:///repo/doc", Title: "doc"}, Snapshot: epistemics.SourceSnapshot{ID: "snapshot-1", SourceID: "source-1", ContentDigest: "sha256:x", CapturedAtUnixMillis: 10, Freshness: epistemics.FreshnessCurrent}, Excerpt: epistemics.SourceExcerpt{ID: "excerpt-1", SnapshotID: "snapshot-1", Text: "fact", Start: 0, End: 4}, Evidence: epistemics.EvidenceObserved, Coverage: epistemics.CoverageComplete, Conflict: epistemics.ConflictNone, } store := &store{} result, err := application.EvaluateAndPersist(context.Background(), epistemics.ResearchEvaluationRequest{Plan: epistemics.ResearchPlan{ID: "plan-1", Question: "q", SourceClasses: []string{"repo"}, FreshnessPolicy: "current"}, Candidates: []epistemics.ResearchCandidate{candidate}}, store, 20) if err != nil || len(result.Findings) != 1 || len(store.saved) != 1 || store.saved[0].Excerpt.ID != candidate.Excerpt.ID || store.saved[0].Source.Locator != candidate.Source.Locator { t.Fatalf("result=%#v saved=%#v err=%v", result, store.saved, err) } }