From 3cd999ac2ed914eb2d0c76e31261b4416a84d9ca Mon Sep 17 00:00:00 2001 From: Evgeny Kuznetsov Date: Wed, 5 Feb 2020 20:27:25 +0300 Subject: don't panic when feed image can't be parsed --- main.go | 18 ++++++++++++------ main_test.go | 28 ++++++++++++++++++++++++++-- testdata/TestNoImage.golden | 7 +++++++ testdata/episodes.noimg | 1 + 4 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 testdata/TestNoImage.golden create mode 100644 testdata/episodes.noimg diff --git a/main.go b/main.go index 5f990bb..febb3e0 100644 --- a/main.go +++ b/main.go @@ -119,12 +119,7 @@ func populateFeed(feed *feeds.Feed, page []byte) (err error) { } feed.Title = stripLink(string(title)) - programImage := programImageRe.FindSubmatch(page) - feed.Image = &feeds.Image{ - Link: feed.Link.Href, - Url: string(programImage[2]), - Title: string(programImage[4]), - } + addFeedImage(page, feed) episodes := findEpisodes(page) urlPrefix := episodeURLPrefix(feed.Link.Href) @@ -154,6 +149,17 @@ func populateFeed(feed *feeds.Feed, page []byte) (err error) { return } +func addFeedImage(page []byte, feed *feeds.Feed) { + programImage, err := parse(page, programImageRe, 4) + if err == nil { + feed.Image = &feeds.Image{ + Link: feed.Link.Href, + Url: string(programImage[1]), + Title: string(programImage[3]), + } + } +} + func parse(src []byte, re *regexp.Regexp, n int) (out [][]byte, err error) { match := re.FindSubmatch(src) if len(match) != n+1 { diff --git a/main_test.go b/main_test.go index d00a6ae..a85b65d 100644 --- a/main_test.go +++ b/main_test.go @@ -57,9 +57,16 @@ func assertGolden(t *testing.T, actual []byte, golden string) { t.Helper() if *update { - writeFile(actual, golden) + if _, err := os.Stat(golden); os.IsNotExist(err) { + writeFile(actual, golden) + } else { + t.Log("file", golden, "exists, remove it to record new golden result") + } + } + expected, err := ioutil.ReadFile(golden) + if err != nil { + t.Error("no file:", golden) } - expected, _ := ioutil.ReadFile(golden) if !bytes.Equal(actual, expected) { t.Fail() @@ -107,6 +114,23 @@ func TestBadEpisode(t *testing.T) { } } +func TestNoImage(t *testing.T) { + feed := &feeds.Feed{ + Link: &feeds.Link{Href: "http://www.radiorus.ru/brand/57083/episodes"}, + } + + page := helperLoadBytes(t, "episodes.noimg") + page = cleanText(page) + + if err := populateFeed(feed, page); err != nil { + t.Fatal(err) + } + + actual := createFeed(feed) + golden := filepath.Join("testdata", t.Name()+".golden") + assertGolden(t, actual, golden) +} + func TestFindEpisodes(t *testing.T) { var tests = []string{ "episodes", diff --git a/testdata/TestNoImage.golden b/testdata/TestNoImage.golden new file mode 100644 index 0000000..fcb03d7 --- /dev/null +++ b/testdata/TestNoImage.golden @@ -0,0 +1,7 @@ + + + "Аэростат" + http://www.radiorus.ru/brand/57083/episodes + + + \ No newline at end of file diff --git a/testdata/episodes.noimg b/testdata/episodes.noimg new file mode 100644 index 0000000..d13a0fc --- /dev/null +++ b/testdata/episodes.noimg @@ -0,0 +1 @@ +

"Аэростат"

-- cgit v1.2.3