package logic import ( "context" "net/http" "net/http/httptest" "strings" "testing" ) func TestParseAtomFeedAndHelpers(t *testing.T) { atom := []byte(` Atom News Entry One https://example.com/e/1 <p>Body <img src="https://example.com/fallback.png"/></p> `) items, err := parseFeed(atom, "https://example.com/atom") if err != nil || len(items) != 1 { t.Fatalf("%+v %v", items, err) } if items[0].ImageURL != "https://example.com/atom.jpg" { t.Fatalf("image=%q", items[0].ImageURL) } long := strings.Repeat("字", 300) if got := truncateRunes(long, 10); len([]rune(got)) != 10 { t.Fatalf("truncate %q", got) } } func TestRSSMediaContentAndFetchFeed(t *testing.T) { rss := []byte(` MRSS Media item https://example.com/m no img tag `) items, err := parseFeed(rss, "https://example.com/mrss") if err != nil || len(items) != 1 || items[0].ImageURL != "https://example.com/m.jpg" { t.Fatalf("%+v %v", items, err) } srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { _, _ = w.Write(rss) })) defer srv.Close() got, err := FetchFeed(context.Background(), srv.Client(), srv.URL) if err != nil || len(got) != 1 { t.Fatalf("%+v %v", got, err) } }