From da88db4a6b8783cbe5f52b5e9cc1ae6a270b2401 Mon Sep 17 00:00:00 2001 From: siddharth ravikumar Date: Sat, 26 Nov 2022 07:59:01 -0500 Subject: feed: update `Feed.unmarshal` Add handling to unmarshal 'podcast' feeds. --- feed/feed.go | 6 ++++++ feed/feed_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/feed/feed.go b/feed/feed.go index 3a3fa30..31159cc 100644 --- a/feed/feed.go +++ b/feed/feed.go @@ -242,6 +242,12 @@ func (feed *Feed) unmarshal(bs []byte) error { return err } return nil + case feed.Schema == "podcast": + feed.Entries, err = podcastUnmarshal(bs) + if err != nil { + return err + } + return nil } return fmt.Errorf("schema of feed '%s' unknown", feed.Id) } diff --git a/feed/feed_test.go b/feed/feed_test.go index 7b38ae8..c700a71 100644 --- a/feed/feed_test.go +++ b/feed/feed_test.go @@ -49,3 +49,41 @@ func TestPodcastUnmarshal(t *testing.T) { } } } + +func TestUnmarshal(t *testing.T) { + testFeeds := map[string]string{ + "podcast": "testdata/pc-daringfireball.xml", + } + for schema, feed := range testFeeds { + bs, err := file.ReadFile(feed) + if err != nil { + t.Errorf("read feed: %v", err) + return + } + feed := new(Feed) + feed.Schema = schema + if err = feed.unmarshal(bs); err != nil { + t.Errorf("feed unmarshal: %v", err) + return + } + for _, entry := range feed.Entries { + if len(entry.Id) < 1 { + t.Errorf("entry id: %v", entry.Id) + return + } + if len(entry.Title) < 1 { + t.Errorf("entry title: %v", entry.Title) + return + } + if entry.PubTime.Unix() < 994702392 { + t.Errorf("entry time: %v", entry.PubTime) + return + } + _, err = url.Parse(entry.Link) + if err != nil { + t.Errorf("entry link: %s: %v", entry.Link, err) + return + } + } + } +} -- cgit v1.2.3