package parser
import (
"reflect"
"strings"
"testing"
)
func TestRSSFeed(t *testing.T) {
have, _ := Parse(strings.NewReader(`
en
???
http://www.scripting.com/
Scripting News
-
Title 1
http://www.scripting.com/one/
Description 1
-
Title 2
http://www.scripting.com/two/
Description 2
`))
want := &Feed{
Title: "Scripting News",
SiteURL: "http://www.scripting.com/",
Items: []Item{
{
GUID: "http://www.scripting.com/one/",
URL: "http://www.scripting.com/one/",
Title: "Title 1",
Content: "Description 1",
},
{
GUID: "http://www.scripting.com/two/",
URL: "http://www.scripting.com/two/",
Title: "Title 2",
Content: "Description 2",
},
},
}
if !reflect.DeepEqual(want, have) {
t.Logf("want: %#v", want)
t.Logf("have: %#v", have)
t.Fatal("invalid rss")
}
}
func TestRSSMediaContentThumbnail(t *testing.T) {
// see: https://vimeo.com/channels/staffpicks/videos/rss
feed, _ := Parse(strings.NewReader(`
-
`))
if len(feed.Items[0].MediaLinks) != 1 {
t.Fatalf("Expected 1 media link, got %#v", feed.Items[0].MediaLinks)
}
have := feed.Items[0].MediaLinks[0]
want := MediaLink{
URL: "https://i.vimeocdn.com/video/1092705247_960.jpg",
Type: "image",
}
if !reflect.DeepEqual(want, have) {
t.Logf("want: %#v", want)
t.Logf("have: %#v", have)
t.FailNow()
}
}
func TestRSSWithLotsOfSpaces(t *testing.T) {
// https://pxlnv.com/: https://feedpress.me/pxlnv
feed, err := Parse(strings.NewReader(strings.ReplaceAll(`
finally
`, "", strings.Repeat(" ", 500))))
if err != nil {
t.Fatal(err)
}
have := feed.Title
want := "finally"
if have != want {
t.Logf("want: %#v", want)
t.Logf("have: %#v", have)
t.FailNow()
}
}
func TestRSSPodcast(t *testing.T) {
feed, _ := Parse(strings.NewReader(`
-
`))
if len(feed.Items[0].MediaLinks) != 1 {
t.Fatal("Invalid media links")
}
have := feed.Items[0].MediaLinks[0]
want := MediaLink{
URL: "http://example.com/audio.ext",
Type: "audio",
}
if !reflect.DeepEqual(want, have) {
t.Logf("want: %#v", want)
t.Logf("have: %#v", have)
t.FailNow()
}
}
func TestRSSOpusPodcast(t *testing.T) {
feed, _ := Parse(strings.NewReader(`
-
`))
if len(feed.Items[0].MediaLinks) != 1 {
t.Fatal("Invalid media links")
}
have := feed.Items[0].MediaLinks[0]
want := MediaLink{
URL: "http://example.com/audio.ext",
Type: "audio",
}
if !reflect.DeepEqual(want, have) {
t.Logf("want: %#v", want)
t.Logf("have: %#v", have)
t.FailNow()
}
}
// found in: https://podcast.cscript.site/podcast.xml
func TestRSSPodcastDuplicated(t *testing.T) {
feed, _ := Parse(strings.NewReader(`
-
]]>
`))
have := feed.Items[0].Content
want := ``
if want != have {
t.Fatalf("content doesn't match\nwant: %#v\nhave: %#v\n", want, have)
}
if len(feed.Items[0].MediaLinks) != 0 {
t.Fatal("item media must be excluded if present in the content")
}
}
func TestRSSTitleHTMLTags(t *testing.T) {
feed, _ := Parse(strings.NewReader(`
-
<p>title in p</p>
-
very <strong>strong</strong> title
`))
have := []string{feed.Items[0].Title, feed.Items[1].Title}
want := []string{"title in p", "very strong title"}
for i := 0; i < len(want); i++ {
if want[i] != have[i] {
t.Errorf("title doesn't match\nwant: %#v\nhave: %#v\n", want[i], have[i])
}
}
}
func TestRSSIsPermalink(t *testing.T) {
feed, _ := Parse(strings.NewReader(`
-
http://example.com/posts/1
`))
have := feed.Items
want := []Item{
{
GUID: "http://example.com/posts/1",
URL: "http://example.com/posts/1",
},
}
for i := 0; i < len(want); i++ {
if !reflect.DeepEqual(want, have) {
t.Errorf("Failed to handle isPermalink\nwant: %#v\nhave: %#v\n", want[i], have[i])
}
}
}