package fa
import (
"bytes"
"strings"
"testing"
"github.com/PuerkitoBio/goquery"
)
const syntheticJournalHTML = `
JJWriter
My Journal Entry
`
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 = `
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")
}
}