diff --git a/internal/rss/rss.go b/internal/rss/rss.go index 20bd87a..e2ef36a 100644 --- a/internal/rss/rss.go +++ b/internal/rss/rss.go @@ -73,7 +73,11 @@ func feedToRSS(f config.Feed, feed *gofeed.Feed) RSS { ni.Categories = it.Categories - ni.PubDate = *it.PublishedParsed + // PublishedParsed will be nil if parsing failed + if it.PublishedParsed != nil { + ni.PubDate = *it.PublishedParsed + } + ni.FeedName = f.Name items = append(items, ni) diff --git a/internal/rss/rss_test.go b/internal/rss/rss_test.go index 8ba5063..a367c94 100644 --- a/internal/rss/rss_test.go +++ b/internal/rss/rss_test.go @@ -13,28 +13,29 @@ import ( ) const dropboxFixture = "../test/data/dropbox_fixture.rss" +const badPubDateFixture = "../test/data/bad_pub_date.rss" -func getFixtureAsFeed(t *testing.T) *gofeed.Feed { - f, err := os.ReadFile(dropboxFixture) +func getFixtureAsFeed(path string) (*gofeed.Feed, error) { + f, err := os.ReadFile(path) if err != nil { - t.Logf("error getting fixture: %e", err) - t.Fail() - return nil + return nil, err } p := gofeed.NewParser() feed, err := p.Parse(bytes.NewReader(f)) if err != nil { - t.Logf("error getting fixture: %e", err) - t.Fail() - return nil + return nil, err } - return feed + return feed, nil } func TestFeedToRss(t *testing.T) { - fd := getFixtureAsFeed(t) + fd, err := getFixtureAsFeed(dropboxFixture) + if err != nil { + t.Logf("error getting fixture: %e", err) + t.Fail() + } r := feedToRSS(config.Feed{Name: "bigup"}, fd) @@ -52,5 +53,15 @@ func TestFeedToRss(t *testing.T) { test.Equal(t, "Dropbox Platform Team", r.Channel.Items[0].Author, "bad item author") test.Equal(t, "bigup", r.Channel.Items[0].FeedName, "bad feedname") test.Equal(t, 1666161000, r.Channel.Items[0].PubDate.Unix(), "bad feedname") +} + +func TestFeedPubDateBadParse(t *testing.T) { + fd, err := getFixtureAsFeed(badPubDateFixture) + if err != nil { + t.Logf("error getting fixture: %e", err) + t.Fail() + } + r := feedToRSS(config.Feed{}, fd) + test.Equal(t, "0001-01-01 00:00:00 +0000 UTC", r.Channel.Items[0].PubDate.String(), "dates don't match") } diff --git a/internal/test/data/bad_pub_date.rss b/internal/test/data/bad_pub_date.rss new file mode 100644 index 0000000..938ca43 --- /dev/null +++ b/internal/test/data/bad_pub_date.rss @@ -0,0 +1,66 @@ + + + + + + SinEmbargo MXCon Claudia "no va a haber retrocesos"; el relevo está asegurado, dice el Presidente + https://www.sinembargo.mx + Periodismo digital con rigor. + + Dom, 16 Jun 2024 14:09:05 +0000 + + es + hourly + 1 + + + + + https://www.sinembargo.mx/wp-content/themes/wp-bootstrap-starter-child/assets/img/sinembargo_icon.jpeg + + Periodismo digital con rigor. + https://www.sinembargo.mx + + + https://wordpress.org/?v=6.4.3 +31219980 + + + + Con Claudia “no va a haber retrocesos”; el relevo está asegurado, dice el Presidente + https://www.sinembargo.mx/16-06-2024/4514535 + https://www.sinembargo.mx/?p=4514535 + Redacción/SinEmbargo + + https://i2.wp.com/www.sinembargo.mx/wp-content/uploads/2024/06/amlo-y-claudia-sheinbaum-en-durango.jpg?fit=1100%2C580&quality=80&strip=all&ssl=1"/> + + + Dom, 16 Jun 2024 14:09:05 +0000 2024-06-16 14:09:05 + + + + Leer el texto completo en sinembargo.mx

]]> +
+
+
+
+ diff --git a/internal/test/test.go b/internal/test/test.go index c3a294c..e34220f 100644 --- a/internal/test/test.go +++ b/internal/test/test.go @@ -6,7 +6,7 @@ func Equal[K comparable](t *testing.T, want, have K, msg string) { t.Helper() if want != have { - t.Fatalf("%s\nWant: %v,\nHave: %v\n", msg, want, have) + t.Fatalf("\n%s\nWant: %v\nHave: %v\n", msg, want, have) } }