53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
// ingestion/internal/search/search_test.go
|
|
package search_test
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/mathiasbq/hyperguild/ingestion/internal/search"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestSearch_ReturnsMatchingPages(t *testing.T) {
|
|
dir := t.TempDir()
|
|
require.NoError(t, os.MkdirAll(filepath.Join(dir, "knowledge"), 0o755))
|
|
|
|
require.NoError(t, os.WriteFile(
|
|
filepath.Join(dir, "knowledge", "retry-logic.md"),
|
|
[]byte("---\ntitle: Retry Logic\ndomain: software\n---\n\nRetry logic handles transient failures by re-attempting operations.\n"),
|
|
0o644,
|
|
))
|
|
require.NoError(t, os.WriteFile(
|
|
filepath.Join(dir, "knowledge", "database.md"),
|
|
[]byte("---\ntitle: Database\ndomain: software\n---\n\nA database stores structured data.\n"),
|
|
0o644,
|
|
))
|
|
|
|
results, err := search.Query(dir, "retry transient", 5)
|
|
require.NoError(t, err)
|
|
require.Len(t, results, 1)
|
|
assert.Equal(t, "knowledge/retry-logic.md", results[0].Path)
|
|
assert.Equal(t, "Retry Logic", results[0].Title)
|
|
assert.Greater(t, results[0].Score, 0)
|
|
assert.Contains(t, results[0].Excerpt, "Retry")
|
|
}
|
|
|
|
func TestSearch_RespectsLimit(t *testing.T) {
|
|
dir := t.TempDir()
|
|
require.NoError(t, os.MkdirAll(filepath.Join(dir, "knowledge"), 0o755))
|
|
for i := 0; i < 5; i++ {
|
|
require.NoError(t, os.WriteFile(
|
|
filepath.Join(dir, "knowledge", fmt.Sprintf("page-%d.md", i)),
|
|
[]byte(fmt.Sprintf("---\ntitle: Page %d\n---\n\nThis page mentions retry.\n", i)),
|
|
0o644,
|
|
))
|
|
}
|
|
results, err := search.Query(dir, "retry", 3)
|
|
require.NoError(t, err)
|
|
assert.LessOrEqual(t, len(results), 3)
|
|
}
|