1package pdfexport23import (4 "reflect"5 "testing"6 "time"7)89func TestSummarizeCategoryTotalsAggregatesAcrossSources(t *testing.T) {10 puzzles := []Puzzle{11 {SourceFileName: "sudoku-a.jsonl", Category: "Sudoku"},12 {SourceFileName: "sudoku-b.jsonl", Category: "Sudoku"},13 {SourceFileName: "takuzu-a.jsonl", Category: "Takuzu"},14 }1516 got := summarizeCategoryTotals(puzzles)17 want := []namedCount{18 {Name: "Sudoku", Count: 2},19 {Name: "Takuzu", Count: 1},20 }2122 if !reflect.DeepEqual(got, want) {23 t.Fatalf("summarizeCategoryTotals() = %+v, want %+v", got, want)24 }25}2627func TestSummarizeCategoryTotalsUsesUnknownFallback(t *testing.T) {28 puzzles := []Puzzle{29 {Category: ""},30 {Category: " "},31 }3233 got := summarizeCategoryTotals(puzzles)34 want := []namedCount{{Name: "Unknown", Count: 2}}35 if !reflect.DeepEqual(got, want) {36 t.Fatalf("summarizeCategoryTotals() = %+v, want %+v", got, want)37 }38}3940func TestTitlePageColophonIncludesVersionAndDate(t *testing.T) {41 docs := []PackDocument{42 {Metadata: PackMetadata{Version: "v1.2.3"}},43 }44 ts := time.Date(2026, 3, 10, 12, 0, 0, 0, time.UTC)4546 got := titlePageColophon(docs, ts)47 want := "PuzzleTea v1.2.3 | March 10, 2026"48 if got != want {49 t.Fatalf("titlePageColophon() = %q, want %q", got, want)50 }51}