// SPDX-License-Identifier: ISC // Copyright © 2022 siddharth package feed import ( "net/url" "slices" "testing" "ricketyspace.net/fern/file" ) func TestPodcastUnmarshal(t *testing.T) { testFeeds := []string{ "testdata/pc-atp.xml", "testdata/pc-daringfireball.xml", "testdata/pc-kara.xml", "testdata/pc-scwpod.xml", } for _, feed := range testFeeds { bs, err := file.ReadFile(feed) if err != nil { t.Errorf("read feed: %v", err) return } entries, err := podcastUnmarshal(bs) if err != nil { t.Errorf("feed unmarshal: %v", err) return } for _, entry := range 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 } } } } func TestUnmarshal(t *testing.T) { testFeeds := map[string]string{ "podcast": "testdata/pc-daringfireball.xml", "youtube": "testdata/yt-mkbhd.xml", } for schema, feedUrl := range testFeeds { var ( bs []byte err error feed *Feed hasMedia bool ) bs, err = file.ReadFile(feedUrl) 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 slices.Contains([]string{"youtube"}, feed.Schema) && len(entry.Desc) < 1 { t.Errorf("entry desc: %v", entry.Desc) return } if slices.Contains([]string{"youtube"}, feed.Schema) { if entry.ShortMedia { hasMedia = true } } 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 } } if slices.Contains([]string{"youtube"}, feed.Schema) && !hasMedia { t.Errorf("feed has no media entries") } } }