29 lines
1.5 KiB
Go
29 lines
1.5 KiB
Go
package research_runtime_test
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
researchadapter "git.cin.su/m/Assistant/adapters/research"
|
|
"git.cin.su/m/Assistant/contracts/epistemics"
|
|
)
|
|
|
|
func TestRepositoryConnectorReturnsDigestAndExactExcerpt(t *testing.T) {
|
|
root := t.TempDir()
|
|
if err := os.WriteFile(filepath.Join(root, "evidence.txt"), []byte("exact repository evidence"), 0600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
candidate, err := (researchadapter.RepositoryConnector{Root: root}).Collect(context.Background(), epistemics.RepositoryResearchRequest{Plan: epistemics.ResearchPlan{ID: "plan", Question: "q", SourceClasses: []string{"repository"}, FreshnessPolicy: "current"}, PropositionKey: "p", SourceID: "s", Path: "evidence.txt", Statement: "statement"}, 10)
|
|
if err != nil || candidate.Excerpt.Text != "exact repository evidence" || candidate.Snapshot.ContentDigest[:7] != "sha256:" || candidate.Excerpt.SnapshotID != candidate.Snapshot.ID {
|
|
t.Fatalf("candidate=%#v err=%v", candidate, err)
|
|
}
|
|
}
|
|
|
|
func TestRepositoryConnectorRejectsPathTraversal(t *testing.T) {
|
|
if _, err := (researchadapter.RepositoryConnector{Root: t.TempDir()}).Collect(context.Background(), epistemics.RepositoryResearchRequest{Plan: epistemics.ResearchPlan{ID: "plan", Question: "q", SourceClasses: []string{"repository"}, FreshnessPolicy: "current"}, SourceID: "s", Path: "../secret", Statement: "statement"}, 10); err != researchadapter.ErrRepositoryPathRejected {
|
|
t.Fatalf("path traversal error=%v", err)
|
|
}
|
|
}
|