rssmon3/rss/item_test.go

108 lines
1.9 KiB
Go
Executable File

package rss
import (
"fmt"
"net/http"
"strings"
"testing"
"github.com/mmcdole/gofeed"
)
func initRSSItem() {
initRSSFeed()
}
func TestRSSItemNewEncodeDecode(t *testing.T) {
initRSSItem()
s := mockRSS()
defer s.Close()
resp, err := http.Get(s.URL)
if err != nil {
t.Fatal(err)
}
defer resp.Body.Close()
gofeed, err := gofeed.NewParser().Parse(resp.Body)
if err != nil {
t.Fatal(err)
}
gofeed.Items[0].Content = ""
gofeed.Items[0].Description = ""
item, err := newItem(gofeed.Items[0], ".*", "")
if err != nil {
t.Fatal(err)
}
itemB, err := newItem(gofeed.Items[0], "Podcast", "")
if err != nil {
t.Fatal(err)
}
if itemB.Content == item.Content {
t.Errorf("content filter did not apply")
}
b, err := item.Encode()
if err != nil {
t.Fatal(err)
}
if err := itemB.Decode(b); err != nil {
t.Fatal(err)
}
if itemB.Content != item.Content {
t.Errorf("decode found %v, want %v", itemB.Content, item.Content)
}
if err := item.save("key"); err != nil {
t.Fatal(err)
}
itemC := &Item{
Link: item.Link,
}
if err := itemC.Load(item.ID(), "key"); err != nil {
t.Fatal(err)
}
if fmt.Sprintf("%v", item) != fmt.Sprintf("%v", itemC) {
t.Fatalf("%v != %v", item, itemC)
}
if err := itemC.Load(item.ID()+"not", "key"); err == nil {
t.Fatal(err)
}
if err := itemC.Load(item.ID(), "key"+"not"); err == nil {
t.Fatal(err)
}
}
func TestClearBlankLines(t *testing.T) {
cases := map[string]struct {
in string
outLines int
}{
"remove with and without whitespace": {
in: `<html>
<head>
<script>something</script>
<style>body{hello:"blue";}</style>
</head>
<body>
<br>
<br>
<br>
</body>
</html>`,
outLines: 8,
},
}
for name, c := range cases {
out := clearBlankLines(c.in)
if v := len(strings.Split(out, "\n")); v != c.outLines {
t.Errorf("%v: want %v lines, got %v from %q: %q", name, c.outLines, v, c.in, out)
}
}
}