diff options
| author | Evgeny Kuznetsov <evgeny@kuznetsov.md> | 2020-02-05 20:27:25 +0300 | 
|---|---|---|
| committer | Evgeny Kuznetsov <evgeny@kuznetsov.md> | 2020-02-05 20:27:25 +0300 | 
| commit | 3cd999ac2ed914eb2d0c76e31261b4416a84d9ca (patch) | |
| tree | 5723bec595e13678b15506f43cf33582aa9eea47 | |
| parent | 789eb9f24ac72505ef8bd89d6c94a99ba9d7efad (diff) | |
| download | radiorus-rss-3cd999ac2ed914eb2d0c76e31261b4416a84d9ca.tar.gz radiorus-rss-3cd999ac2ed914eb2d0c76e31261b4416a84d9ca.zip  | |
don't panic when feed image can't be parsed
| -rw-r--r-- | main.go | 18 | ||||
| -rw-r--r-- | main_test.go | 28 | ||||
| -rw-r--r-- | testdata/TestNoImage.golden | 7 | ||||
| -rw-r--r-- | testdata/episodes.noimg | 1 | 
4 files changed, 46 insertions, 8 deletions
@@ -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 @@ +<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> +  <channel> +    <title>"Аэростат"</title> +    <link>http://www.radiorus.ru/brand/57083/episodes</link> +    <description></description> +  </channel> +</rss>
\ 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 @@ +    <h2><a href="/brand/57083">"Аэростат"</a></h2>  |