WIP RSS renderer. #3
parent
7a857e857f
commit
1b99eaa016
@ -0,0 +1 @@ |
||||
domain: "http://localhost:8080" |
@ -0,0 +1,60 @@ |
||||
package owl |
||||
|
||||
import ( |
||||
"bytes" |
||||
"encoding/xml" |
||||
) |
||||
|
||||
type RSS struct { |
||||
XMLName xml.Name `xml:"rss"` |
||||
Version string `xml:"version,attr"` |
||||
Channel RSSChannel `xml:"channel"` |
||||
} |
||||
|
||||
type RSSChannel struct { |
||||
Title string `xml:"title"` |
||||
Link string `xml:"link"` |
||||
Description string `xml:"description"` |
||||
Items []RSSItem `xml:"item"` |
||||
} |
||||
|
||||
type RSSItem struct { |
||||
Title string `xml:"title"` |
||||
Link string `xml:"link"` |
||||
Description string `xml:"description"` |
||||
PubDate string `xml:"pubDate"` |
||||
} |
||||
|
||||
func RenderRSSFeed(user User) (string, error) { |
||||
|
||||
config, _ := user.Config() |
||||
|
||||
rss := RSS{ |
||||
Version: "2.0", |
||||
Channel: RSSChannel{ |
||||
Title: config.Title, |
||||
Link: user.repo.FullUserUrl(user), |
||||
Description: config.SubTitle, |
||||
Items: make([]RSSItem, 0), |
||||
}, |
||||
} |
||||
|
||||
// posts, _ := user.Posts()
|
||||
// for _, post := range posts {
|
||||
// rss.Channel.Items = append(rss.Channel.Items, RSSItem{
|
||||
// Title: post.Title(),
|
||||
// Link: post.Link(),
|
||||
// Description: post.Description(),
|
||||
// PubDate: post.PubDate(),
|
||||
// })
|
||||
// }
|
||||
|
||||
buf := new(bytes.Buffer) |
||||
err := xml.NewEncoder(buf).Encode(rss) |
||||
if err != nil { |
||||
return "", err |
||||
} |
||||
|
||||
return xml.Header + buf.String(), nil |
||||
|
||||
} |
@ -0,0 +1,49 @@ |
||||
package owl_test |
||||
|
||||
import ( |
||||
"h4kor/owl-blogs" |
||||
"strings" |
||||
"testing" |
||||
) |
||||
|
||||
func TestRenderRSSFeedMeta(t *testing.T) { |
||||
user := getTestUser() |
||||
user.SetConfig(owl.UserConfig{ |
||||
Title: "Test Title", |
||||
SubTitle: "Test SubTitle", |
||||
}) |
||||
res, err := owl.RenderRSSFeed(user) |
||||
if err != nil { |
||||
t.Error("Error rendering RSS feed: " + err.Error()) |
||||
return |
||||
} |
||||
if !strings.Contains(res, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>") { |
||||
t.Error("xml version not rendered. Got: " + res) |
||||
} |
||||
if !strings.Contains(res, "<rss version=\"2.0\">") { |
||||
t.Error("rss version not rendered. Got: " + res) |
||||
} |
||||
|
||||
} |
||||
|
||||
func TestRenderRSSFeedUserData(t *testing.T) { |
||||
user := getTestUser() |
||||
user.SetConfig(owl.UserConfig{ |
||||
Title: "Test Title", |
||||
SubTitle: "Test SubTitle", |
||||
}) |
||||
res, err := owl.RenderRSSFeed(user) |
||||
if err != nil { |
||||
t.Error("Error rendering RSS feed: " + err.Error()) |
||||
return |
||||
} |
||||
if !strings.Contains(res, "Test Title") { |
||||
t.Error("Title not rendered. Got: " + res) |
||||
} |
||||
if !strings.Contains(res, "Test SubTitle") { |
||||
t.Error("SubTitle not rendered. Got: " + res) |
||||
} |
||||
if !strings.Contains(res, "http://localhost:8080/user/") { |
||||
t.Error("SubTitle not rendered. Got: " + res) |
||||
} |
||||
} |
Loading…
Reference in new issue