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

56 lines
1.9 KiB
Go

package viral
import "testing"
func TestParseMissionResearchMapOutput_ObjectPillars(t *testing.T) {
raw := `{
"audienceSummary": "轉職焦慮的上班族",
"contentGoal": "找近期高互動轉職心情貼文",
"questions": ["轉職會後悔嗎", "被裁怎麼辦"],
"pillars": [
{"title": "語錄型", "description": "一句話戳中焦慮"},
{"title": "故事型", "description": "親身轉職經驗"}
],
"exclusions": ["純業配", "無結構閒聊"],
"suggestedTags": [
{"tag": "轉職焦慮", "reason": "近期熱詞", "searchIntent": "痛點", "searchType": "短詞"},
{"tag": "被裁", "reason": "高互動", "searchIntent": "痛點", "searchType": "短詞"},
{"tag": "面試失敗", "reason": "共鳴", "searchIntent": "經驗", "searchType": "情境"},
{"tag": "裸辭", "reason": "討論多", "searchIntent": "語錄", "searchType": "短詞"}
],
"benchmarkNotes": "互動高且 hook 清楚"
}`
out, err := ParseMissionResearchMapOutput(raw)
if err != nil {
t.Fatalf("ParseMissionResearchMapOutput: %v", err)
}
if len(out.Pillars) < 2 {
t.Fatalf("expected parsed pillars, got %#v", out.Pillars)
}
if out.Pillars[0] == "" {
t.Fatal("first pillar should not be empty")
}
if len(out.SuggestedTags) < 4 {
t.Fatalf("expected suggested tags, got %#v", out.SuggestedTags)
}
}
func TestParseMissionResearchMapOutput_StringSuggestedTags(t *testing.T) {
raw := `{
"audienceSummary": "新手媽媽",
"contentGoal": "找育兒爆款",
"questions": ["哄睡", "副食品"],
"pillars": ["清單型", "故事型", "語錄型", "問答型"],
"exclusions": ["業配", "晒娃", "無重點", "抄襲"],
"suggestedTags": ["哄睡", "副食品", "崩潰", "育兒"],
"benchmarkNotes": "留言多"
}`
out, err := ParseMissionResearchMapOutput(raw)
if err != nil {
t.Fatalf("ParseMissionResearchMapOutput: %v", err)
}
if len(out.SuggestedTags) != 4 {
t.Fatalf("expected 4 tags, got %#v", out.SuggestedTags)
}
}