thread-master/backend/internal/library/style8d/analyze_test.go

27 lines
1.3 KiB
Go

package style8d
import "testing"
func TestParseLLMOutput(t *testing.T) {
raw := `{"d1Tone":{"summary":"口語親近","evidence":["真的太好笑"]},"d2Structure":{"summary":"短段落開場","evidence":[]},"d3Interaction":{"summary":"常用提問","evidence":[]},"d4Topics":{"summary":"生活與成長","evidence":[]},"d5Rhythm":{"summary":"晚間發文較多","evidence":[]},"d6Visual":{"summary":"愛用換行與 emoji","evidence":[]},"d7Conversion":{"summary":"自然導留言","evidence":[]},"d8Risk":{"summary":"避免照抄","evidence":[]},"personaDraft":{"identity":"生活觀察者","tone":"輕鬆","audience":"同齡上班族","hooks":"先丟痛點","examples":"有時候真的會累","avoid":"不要硬銷"}}`
out, err := ParseLLMOutput(raw)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if out.D1Tone.Summary != "口語親近" {
t.Fatalf("d1=%q", out.D1Tone.Summary)
}
profile := BuildStoredProfile("demo", []Post{{
Text: "sample",
Permalink: "https://www.threads.net/@demo/post/abc",
LikeCount: 3,
ReplyCount: 1,
}}, out)
if profile.Analysis["d1Tone"].Summary == "" {
t.Fatal("stored profile missing d1")
}
if len(profile.SamplePosts) != 1 || profile.SamplePosts[0].Permalink == "" {
t.Fatalf("samplePosts=%+v", profile.SamplePosts)
}
}