rss and rss item and encode

Former-commit-id: 333b5635cc0eb22964403cc78f660e02a830f077
This commit is contained in:
bel
2019-06-22 10:07:52 -06:00
parent be065c5dcb
commit fc94f94bd2
10 changed files with 353 additions and 52 deletions

View File

@@ -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)
}
}