thread-master/internal/library/viral/reference_accounts_test.go

59 lines
1.9 KiB
Go

package viral
import (
"testing"
"haixun-backend/internal/library/placement"
)
func TestBuildReferenceAccountsFromScan_filtersLowEngagement(t *testing.T) {
got := BuildReferenceAccountsFromScan(ReferenceAccountInput{
SeedQuery: "轉職",
Label: "轉職語錄",
Posts: []placement.ScanCandidate{
{Author: "weak_user", Text: "轉職心得", SearchTag: "轉職", LikeCount: 2, ReplyCount: 0, EngagementScore: 10},
{Author: "hot_user", Text: "轉職面試技巧分享", SearchTag: "轉職", LikeCount: 30, ReplyCount: 5, EngagementScore: 85},
},
Limit: 5,
})
if len(got) != 1 {
t.Fatalf("expected 1 account, got %d", len(got))
}
if got[0].Username != "hot_user" {
t.Fatalf("unexpected username %q", got[0].Username)
}
}
func TestBuildReferenceAccountsFromScan_prefersVerified(t *testing.T) {
got := BuildReferenceAccountsFromScan(ReferenceAccountInput{
SeedQuery: "轉職",
Label: "轉職",
Posts: []placement.ScanCandidate{
{Author: "plain_user", Text: "轉職技巧", SearchTag: "轉職", LikeCount: 22, ReplyCount: 3, EngagementScore: 55},
{Author: "blue_user", Text: "轉職分享", SearchTag: "轉職", LikeCount: 14, ReplyCount: 2, EngagementScore: 42, AuthorVerified: true},
},
Limit: 5,
})
if len(got) < 2 {
t.Fatalf("expected 2 accounts, got %d", len(got))
}
if got[0].Username != "blue_user" || !got[0].AuthorVerified {
t.Fatalf("verified author should rank first, got %+v", got[0])
}
}
func TestBuildReferenceAccountsFromScan_requiresTopicMatch(t *testing.T) {
posts := []placement.ScanCandidate{
{Author: "off_topic", Text: "今天天氣真好", SearchTag: "天氣", LikeCount: 40, ReplyCount: 8, EngagementScore: 90},
}
got := BuildReferenceAccountsFromScan(ReferenceAccountInput{
SeedQuery: "轉職",
Label: "轉職",
Posts: posts,
Limit: 5,
})
if len(got) != 0 {
t.Fatalf("expected no accounts for off-topic post, got %d", len(got))
}
}