thread-master/backend/internal/library/placement/discover_for_query_test.go

70 lines
1.9 KiB
Go
Raw Normal View History

package placement
import (
"context"
"testing"
libkg "haixun-backend/internal/library/knowledge"
"haixun-backend/internal/library/websearch"
)
type stubWebSearch struct {
enabled bool
posts []DiscoverPost
}
func (s stubWebSearch) Search(ctx context.Context, opts websearch.SearchOptions) (websearch.SearchResponse, error) {
_ = ctx
_ = opts
results := make([]websearch.SearchResult, 0, len(s.posts))
for _, post := range s.posts {
results = append(results, websearch.SearchResult{
Title: post.Text,
URL: post.Permalink,
Snippet: "",
})
}
return websearch.SearchResponse{Status: "success", Results: results, Provider: websearch.ProviderBrave}, nil
}
func (s stubWebSearch) Enabled() bool { return s.enabled }
func (s stubWebSearch) Provider() websearch.Provider { return websearch.ProviderBrave }
func TestDiscoverForQueryMergesWebSearchWhenBraveEnabled(t *testing.T) {
input := DualTrackInput{
Member: MemberContext{
AllowsBrave: true,
AllowsThreadsAPI: false,
SearchSourceMode: SearchSourceBrave,
WebSearchProvider: string(websearch.ProviderBrave),
BraveAPIKey: "test-key",
},
WebSearch: stubWebSearch{
enabled: true,
posts: []DiscoverPost{{
Text: "最近洗衣精有推薦嗎?皮膚會癢",
Permalink: "https://www.threads.net/@user1/post/abc123",
}},
},
PatrolContext: PostScanContextFromPatrolInput(libkg.PatrolTagInput{
ProductName: "天然洗衣精",
MatchTags: []string{"洗衣精"},
}, nil),
}
tq := TagQuery{
Tag: "洗衣精 推薦",
Query: `site:threads.net 洗衣精 推薦`,
Dimension: QueryRelevance,
}
posts, channel, err := discoverForQuery(context.Background(), input, tq, 5)
if err != nil {
t.Fatalf("discoverForQuery error: %v", err)
}
if len(posts) == 0 {
t.Fatal("expected web search posts to be merged")
}
if channel != DiscoverBrave {
t.Fatalf("expected brave channel, got %s", channel)
}
}