From 96ab2fcb2ff442698465389d75390afa91629165 Mon Sep 17 00:00:00 2001 From: Sam Scholten Date: Sun, 30 Aug 2026 12:50:24 +1000 Subject: fluxrec: personal Miniflux article recommender --- cmds/rss_test.go | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 cmds/rss_test.go (limited to 'cmds/rss_test.go') diff --git a/cmds/rss_test.go b/cmds/rss_test.go new file mode 100644 index 0000000..406f853 --- /dev/null +++ b/cmds/rss_test.go @@ -0,0 +1,73 @@ +// Golden test for the RSS renderer: fixed runs in, exact XML out. Also +// pins batch ordering (newest first) and XML escaping of item text. +package cmds + +import ( + "testing" + "time" + + "fluxrec/core" +) + +func TestRenderRSSGolden(t *testing.T) { + at := func(day, h, m int) time.Time { + return time.Date(2024, 3, day, h, m, 0, 0, time.UTC) + } + runs := []core.RunRow{ + { + RanAt: at(1, 6, 0), EntriesSeen: 40, + Kept: []core.KeptItem{ + {EntryID: 101, URL: "https://example.com/a?x=1&y=2", Title: "Alpha & Omega", + FeedTitle: "Feed A", PublishedAt: at(1, 5, 0), + Content: "x < y", Score: 0.9, Kind: core.KindRanked}, + {EntryID: 102, URL: "https://example.com/b", Title: "Beta", + FeedTitle: "Feed B", PublishedAt: at(1, 5, 30), + Content: "second body", Score: 0.2, Kind: core.KindRandom}, + }, + }, + { + RanAt: at(1, 12, 0), EntriesSeen: 12, + Kept: []core.KeptItem{ + {EntryID: 103, URL: "https://example.com/c", Title: "Gamma", + FeedTitle: "Feed A", PublishedAt: at(1, 11, 0), + Content: "", Score: 0.8, Kind: core.KindRunnerUp}, + }, + }, + } + + got, err := RenderRSS(runs) + if err != nil { + t.Fatalf("RenderRSS: %v", err) + } + want := ` + + + fluxrec recommendations + Top-scored Miniflux entries, refreshed on a schedule. + + Gamma + https://example.com/c + mf:103 + Fri, 01 Mar 2024 11:00:00 +0000 + Feed A + + + Alpha & Omega + https://example.com/a?x=1&y=2 + mf:101 + Fri, 01 Mar 2024 05:00:00 +0000 + Feed A x < y + + + Beta + https://example.com/b + mf:102 + Fri, 01 Mar 2024 05:30:00 +0000 + Feed B second body + + +` + if string(got) != want { + t.Errorf("RSS mismatch.\ngot:\n%s", got) + } +} -- cgit v1.2.3