package fa import ( "bytes" "strings" "testing" "github.com/PuerkitoBio/goquery" ) const syntheticJournalHTML = ` JJWriter

My Journal Entry

Apr 5
` func TestParseJournal_Synthetic(t *testing.T) { doc, err := goquery.NewDocumentFromReader(strings.NewReader(syntheticJournalHTML)) if err != nil { t.Fatalf("setup: %v", err) } j, err := parseJournal(42, doc) if err != nil { t.Fatalf("parseJournal: %v", err) } if j.ID != 42 { t.Errorf("ID = %d; want 42", j.ID) } if j.Title != "My Journal Entry" { t.Errorf("Title = %q", j.Title) } if j.Author.Name != "jjwriter" { t.Errorf("Author.Name = %q", j.Author.Name) } if j.Author.DisplayName != "JJWriter" { t.Errorf("Author.DisplayName = %q", j.Author.DisplayName) } if j.PostedAt.Year() != 2025 { t.Errorf("PostedAt year = %d", j.PostedAt.Year()) } if !strings.Contains(j.BodyText, "thoughts") { t.Errorf("BodyText missing: %q", j.BodyText) } } const syntheticUserJournalsHTML = `

First Entry

today
Hello.

Second Entry

yesterday
World.
Next ` func TestParseUserJournalsPage_Synthetic(t *testing.T) { doc, err := goquery.NewDocumentFromReader(strings.NewReader(syntheticUserJournalsHTML)) if err != nil { t.Fatalf("setup: %v", err) } entries, hasNext := parseUserJournalsPage(doc) if len(entries) != 2 { t.Fatalf("entries = %d; want 2", len(entries)) } if entries[0].ID != 111 || entries[1].ID != 222 { t.Errorf("ids = [%d, %d]; want [111, 222]", entries[0].ID, entries[1].ID) } if entries[0].Title != "First Entry" { t.Errorf("title[0] = %q", entries[0].Title) } if !hasNext { t.Error("hasNext = false; want true") } } func TestParseJournal_RealFixture(t *testing.T) { raw := loadFixture(t, "journal.html") doc, err := goquery.NewDocumentFromReader(bytes.NewReader(raw)) if err != nil { t.Fatalf("read doc: %v", err) } j, err := parseJournal(0, doc) if err != nil { t.Fatalf("parseJournal(real): %v", err) } if j.Title == "" { t.Error("real fixture: Title is empty") } }