rss and rss item and encode
Former-commit-id: 333b5635cc0eb22964403cc78f660e02a830f077
This commit is contained in:
117
rss/feed_test.go
117
rss/feed_test.go
@@ -1,9 +1,17 @@
|
||||
package rss
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"local/rssmon3/config"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"path"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
@@ -15,6 +23,20 @@ func initRSSFeed() {
|
||||
}
|
||||
}
|
||||
|
||||
type mockStruct struct{}
|
||||
|
||||
func mockRSS() *httptest.Server {
|
||||
return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
var v mockStruct
|
||||
base := reflect.TypeOf(v).PkgPath()
|
||||
f, err := os.Open(path.Join(os.Getenv("GOPATH"), "src", base, "./testdata/rss.xml"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
io.Copy(w, f)
|
||||
}))
|
||||
}
|
||||
|
||||
func TestRSSFeedEncodeDecode(t *testing.T) {
|
||||
initRSSFeed()
|
||||
|
||||
@@ -39,6 +61,97 @@ func TestRSSFeedEncodeDecode(t *testing.T) {
|
||||
if string(fb) != string(gb) {
|
||||
t.Errorf("%v => %v", *f, *g)
|
||||
}
|
||||
|
||||
t.Logf("%s vs. %s", fb, gb)
|
||||
}
|
||||
|
||||
func TestRSSFeedSaveLoad(t *testing.T) {
|
||||
initRSSFeed()
|
||||
|
||||
f := newFeed("key")
|
||||
f.Updated = time.Now()
|
||||
f.TitleFilter = "a"
|
||||
f.ContentFilter = "b"
|
||||
f.Tags = []string{"c"}
|
||||
|
||||
if err := f.save(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
g := newFeed("key")
|
||||
if err := g.load(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
fb, _ := json.Marshal(f)
|
||||
gb, _ := json.Marshal(g)
|
||||
if string(fb) != string(gb) {
|
||||
t.Fatalf("%v != %v", f, g)
|
||||
}
|
||||
|
||||
h := newFeed("key2")
|
||||
if err := h.load(); err == nil {
|
||||
t.Fatal("can load nil feed")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRSSFeedPull(t *testing.T) {
|
||||
initRSSFeed()
|
||||
|
||||
s := mockRSS()
|
||||
defer s.Close()
|
||||
|
||||
f := newFeed("key")
|
||||
f.TitleFilter = "500"
|
||||
f.ContentFilter = "b"
|
||||
f.Tags = []string{"c"}
|
||||
f.URL = s.URL
|
||||
|
||||
log.SetOutput(bytes.NewBuffer(nil))
|
||||
defer log.SetOutput(os.Stderr)
|
||||
if err := f.pull(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
log.SetOutput(os.Stderr)
|
||||
|
||||
if f.Updated.Format("2006-01-02 15:04:05") != "2019-06-18 19:00:00" {
|
||||
t.Errorf("updated is wrong: %v", f)
|
||||
}
|
||||
|
||||
keys, err := config.Values().DB.List([]string{nsItems, f.Key})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(keys) < 1 {
|
||||
t.Fatal(len(keys))
|
||||
}
|
||||
if keys[0] != "https://roosterteeth.com/episode/rooster-teeth-podcast-2018-rooster-teeth-podcast-500" {
|
||||
t.Fatal(keys[0])
|
||||
}
|
||||
|
||||
log.SetOutput(bytes.NewBuffer(nil))
|
||||
defer log.SetOutput(os.Stderr)
|
||||
if err := f.pull(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
log.SetOutput(os.Stderr)
|
||||
keysB, err := config.Values().DB.List([]string{nsItems, f.Key})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if fmt.Sprintf("%v", keys) != fmt.Sprintf("%v", keysB) {
|
||||
t.Fatalf("%v vs %v", keys, keysB)
|
||||
}
|
||||
|
||||
i := &Item{
|
||||
Link: keys[0],
|
||||
FeedKey: f.Key,
|
||||
}
|
||||
if err := i.load(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if *i == (Item{}) {
|
||||
t.Fatal(i)
|
||||
}
|
||||
if i.Link == "" || i.Title == "" || i.FeedKey == "" || i.Content == "" {
|
||||
t.Fatal(i)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user