commit
0723beb92a
@ -0,0 +1 @@ |
||||
domain: "http://localhost:8080" |
@ -0,0 +1,62 @@ |
||||
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 { |
||||
Guid string `xml:"guid"` |
||||
Title string `xml:"title"` |
||||
Link string `xml:"link"` |
||||
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.FullUrl(), |
||||
Description: config.SubTitle, |
||||
Items: make([]RSSItem, 0), |
||||
}, |
||||
} |
||||
|
||||
posts, _ := user.Posts() |
||||
for _, postId := range posts { |
||||
post, _ := user.GetPost(postId) |
||||
_, meta := post.MarkdownData() |
||||
rss.Channel.Items = append(rss.Channel.Items, RSSItem{ |
||||
Guid: postId, |
||||
Title: post.Title(), |
||||
Link: post.FullUrl(), |
||||
PubDate: meta.Date, |
||||
}) |
||||
} |
||||
|
||||
buf := new(bytes.Buffer) |
||||
err := xml.NewEncoder(buf).Encode(rss) |
||||
if err != nil { |
||||
return "", err |
||||
} |
||||
|
||||
return xml.Header + buf.String(), nil |
||||
|
||||
} |
@ -0,0 +1,100 @@ |
||||
package owl_test |
||||
|
||||
import ( |
||||
"h4kor/owl-blogs" |
||||
"os" |
||||
"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) |
||||
} |
||||
} |
||||
|
||||
func TestRenderRSSFeedPostData(t *testing.T) { |
||||
user := getTestUser() |
||||
post, _ := user.CreateNewPost("testpost") |
||||
|
||||
content := "---\n" |
||||
content += "title: Test Post\n" |
||||
content += "date: 2015-01-01\n" |
||||
content += "---\n" |
||||
content += "This is a test" |
||||
os.WriteFile(post.ContentFile(), []byte(content), 0644) |
||||
|
||||
res, err := owl.RenderRSSFeed(user) |
||||
if err != nil { |
||||
t.Error("Error rendering RSS feed: " + err.Error()) |
||||
return |
||||
} |
||||
if !strings.Contains(res, "Test Post") { |
||||
t.Error("Title not rendered. Got: " + res) |
||||
} |
||||
if !strings.Contains(res, post.FullUrl()) { |
||||
t.Error("SubTitle not rendered. Got: " + res) |
||||
} |
||||
if !strings.Contains(res, "2015-01-01") { |
||||
t.Error("Date not rendered. Got: " + res) |
||||
} |
||||
} |
||||
|
||||
func TestRenderRSSFeedPostDataWithoutDate(t *testing.T) { |
||||
user := getTestUser() |
||||
post, _ := user.CreateNewPost("testpost") |
||||
|
||||
content := "---\n" |
||||
content += "title: Test Post\n" |
||||
content += "---\n" |
||||
content += "This is a test" |
||||
os.WriteFile(post.ContentFile(), []byte(content), 0644) |
||||
|
||||
res, err := owl.RenderRSSFeed(user) |
||||
if err != nil { |
||||
t.Error("Error rendering RSS feed: " + err.Error()) |
||||
return |
||||
} |
||||
if !strings.Contains(res, "Test Post") { |
||||
t.Error("Title not rendered. Got: " + res) |
||||
} |
||||
if !strings.Contains(res, post.FullUrl()) { |
||||
t.Error("SubTitle not rendered. Got: " + res) |
||||
} |
||||
} |
Loading…
Reference in new issue