56 lines
1.8 KiB
Go
56 lines
1.8 KiB
Go
package store
|
|
|
|
import (
|
|
core "agent-system-core"
|
|
"context"
|
|
"testing"
|
|
)
|
|
|
|
func TestReviewDeletedArtifactMustLeaveKnowledge(t *testing.T) {
|
|
st := openTestStore(t)
|
|
a := core.Artifact{Owner: "o", ProjectID: "p", Name: "secret.txt"}
|
|
if err := st.CreateArtifact(&a, []byte("uniqueclassified")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := st.AddKnowledge(core.KnowledgeDoc{Owner: "o", ProjectID: "p", Source: "artifact", Ref: a.ID, Title: a.Name, Chunk: "uniqueclassified"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := st.DeleteArtifact("o", a.ID); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
hits, err := st.SearchKnowledge("o", core.RetrievalQuery{Text: "uniqueclassified", ProjectID: "p"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(hits) > 0 {
|
|
t.Fatalf("deleted source is still retrievable: %d hits", len(hits))
|
|
}
|
|
}
|
|
|
|
func TestDeletedArtifactClearsVectorRowsAndRetrieval(t *testing.T) {
|
|
st := openTestStore(t)
|
|
ctx := context.Background()
|
|
a := core.Artifact{Owner: "o", ProjectID: "p", Name: "source.txt"}
|
|
if e := st.CreateArtifact(&a, []byte("uniqueindexed")); e != nil {
|
|
t.Fatal(e)
|
|
}
|
|
d := core.KnowledgeDoc{ID: "indexed-doc", Owner: "o", ProjectID: "p", Ref: a.ID, Title: a.Name, Chunk: "uniqueindexed", Source: "artifact"}
|
|
if e := st.AddKnowledge(d); e != nil {
|
|
t.Fatal(e)
|
|
}
|
|
if e := st.UpsertKnowledgeVectorExt(ctx, "o", d.ID, a.ID, "m", "h", []float32{1, 0}); e != nil {
|
|
t.Fatal(e)
|
|
}
|
|
if e := st.DeleteArtifact("o", a.ID); e != nil {
|
|
t.Fatal(e)
|
|
}
|
|
var rows int
|
|
if e := st.DB().QueryRow(st.q(`SELECT COUNT(*) FROM knowledge_vectors WHERE owner=? AND ref=?`), "o", a.ID).Scan(&rows); e != nil || rows != 0 {
|
|
t.Fatal("deleted vector rows retained", rows, e)
|
|
}
|
|
hits, e := st.SearchKnowledgeVectorsModel(ctx, "o", "m", []float32{1, 0}, 5, core.RetrievalQuery{ProjectID: "p"})
|
|
if e != nil || len(hits) != 0 {
|
|
t.Fatal("deleted source remains vector-retrievable", hits, e)
|
|
}
|
|
}
|