package documents import ( "strings" "testing" "github.com/openclaw/gitcrawl/internal/store") func TestBuildIncludesTitleBodyAndLabels(t *testing.T) { doc := BuildWithComments(store.Thread{ ID: 12, Title: "Download stalls", Body: "Large downloads hang near the end.", LabelsJSON: `[{"name":"bug"},{"name":"downloads"}]`, UpdatedAt: "2026-04-26T00:00:00Z", }, []store.Comment{{AuthorLogin: "vincentkoc", Body: "same failure here"}}) if doc.ThreadID != 12 { t.Fatalf("thread id: got %d want 12", doc.ThreadID) } if !strings.Contains(doc.RawText, "Labels: bug, downloads") { t.Fatalf("raw text missing labels: %q", doc.RawText) } if !strings.Contains(doc.RawText, "vincentkoc: same failure here") { t.Fatalf("raw text missing comment: %q", doc.RawText) } if doc.DedupeText != "download stalls large downloads hang near the end. bug downloads same failure here" { t.Fatalf("dedupe text: %q", doc.DedupeText) }} func TestBuildToleratesBadLabelJSON(t *testing.T) { doc := Build(store.Thread{Title: "A", LabelsJSON: `nope`}) if doc.DedupeText != "a" { t.Fatalf("dedupe text: %q", doc.DedupeText) }} func TestBuildSupportsLegacyStringLabels(t *testing.T) { doc := Build(store.Thread{Title: "A", LabelsJSON: `["bug","help wanted"]`}) if doc.DedupeText != "a bug help wanted" { t.Fatalf("dedupe text: %q", doc.DedupeText) }} func TestBuildIncludesPullRequestPathsAndCommitSubjects(t *testing.T) { doc := BuildWithContext( store.Thread{ID: 8, Title: "Refresh cache", LabelsJSON: "[]"}, nil, []store.PullRequestFile{ {Path: "internal/cache/store.go"}, {Path: "docs/cache.md", PreviousPath: "docs/old-cache.md"}, }, []store.PullRequestCommit{ {Message: "fix: refresh manifest cache\n\nLong body"}, {Message: "test: cover stale entries"}, }, ) for _, want := range []string{"Changed files:", "internal/cache/store.go", "docs/old-cache.md", "Commits:", "fix: refresh manifest cache"} { if !strings.Contains(doc.RawText, want) { t.Fatalf("raw text missing %q: %s", want, doc.RawText) } } if strings.Contains(doc.RawText, "Long body") { t.Fatalf("commit body leaked into document: %s", doc.RawText) } if !strings.Contains(doc.DedupeText, "internal/cache/store.go") || !strings.Contains(doc.DedupeText, "test: cover stale entries") { t.Fatalf("dedupe text missing pull context: %s", doc.DedupeText) }}
package documents
import (
"strings"
"testing"
"github.com/openclaw/gitcrawl/internal/store"
)
func TestBuildIncludesTitleBodyAndLabels(t *testing.T) {
doc := BuildWithComments(store.Thread{
ID: 12,
Title: "Download stalls",
Body: "Large downloads hang near the end.",
LabelsJSON: `[{"name":"bug"},{"name":"downloads"}]`,
UpdatedAt: "2026-04-26T00:00:00Z",
}, []store.Comment{{AuthorLogin: "vincentkoc", Body: "same failure here"}})
if doc.ThreadID != 12 {
t.Fatalf("thread id: got %d want 12", doc.ThreadID)
}
if !strings.Contains(doc.RawText, "Labels: bug, downloads") {
t.Fatalf("raw text missing labels: %q", doc.RawText)
}
if !strings.Contains(doc.RawText, "vincentkoc: same failure here") {
t.Fatalf("raw text missing comment: %q", doc.RawText)
}
if doc.DedupeText != "download stalls large downloads hang near the end. bug downloads same failure here" {
t.Fatalf("dedupe text: %q", doc.DedupeText)
}
}
func TestBuildToleratesBadLabelJSON(t *testing.T) {
doc := Build(store.Thread{Title: "A", LabelsJSON: `nope`})
if doc.DedupeText != "a" {
t.Fatalf("dedupe text: %q", doc.DedupeText)
}
}
func TestBuildSupportsLegacyStringLabels(t *testing.T) {
doc := Build(store.Thread{Title: "A", LabelsJSON: `["bug","help wanted"]`})
if doc.DedupeText != "a bug help wanted" {
t.Fatalf("dedupe text: %q", doc.DedupeText)
}
}
func TestBuildIncludesPullRequestPathsAndCommitSubjects(t *testing.T) {
doc := BuildWithContext(
store.Thread{ID: 8, Title: "Refresh cache", LabelsJSON: "[]"},
nil,
[]store.PullRequestFile{
{Path: "internal/cache/store.go"},
{Path: "docs/cache.md", PreviousPath: "docs/old-cache.md"},
},
[]store.PullRequestCommit{
{Message: "fix: refresh manifest cache\n\nLong body"},
{Message: "test: cover stale entries"},
},
)
for _, want := range []string{"Changed files:", "internal/cache/store.go", "docs/old-cache.md", "Commits:", "fix: refresh manifest cache"} {
if !strings.Contains(doc.RawText, want) {
t.Fatalf("raw text missing %q: %s", want, doc.RawText)
}
}
if strings.Contains(doc.RawText, "Long body") {
t.Fatalf("commit body leaked into document: %s", doc.RawText)
}
if !strings.Contains(doc.DedupeText, "internal/cache/store.go") || !strings.Contains(doc.DedupeText, "test: cover stale entries") {
t.Fatalf("dedupe text missing pull context: %s", doc.DedupeText)
}
}