mirror of
https://github.com/gohugoio/hugo.git
synced 2024-06-30 23:17:55 +00:00
Adding RSS test case.
Checks to make sure the xml document starts with <?xml. Previously, the html translate package would write additional details into the document that caused it to fail.
This commit is contained in:
parent
b22364570b
commit
1cebce12ad
65
hugolib/rss_test.go
Normal file
65
hugolib/rss_test.go
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
package hugolib
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"bytes"
|
||||||
|
"github.com/spf13/hugo/source"
|
||||||
|
"github.com/spf13/hugo/target"
|
||||||
|
)
|
||||||
|
|
||||||
|
const RSS_TEMPLATE = `<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>{{ .Title }} on {{ .Site.Title }} </title>
|
||||||
|
<link>{{ .Permalink }}</link>
|
||||||
|
<language>en-us</language>
|
||||||
|
<author>Steve Francia</author>
|
||||||
|
<rights>Francia; all rights reserved.</rights>
|
||||||
|
<updated>{{ .Date }}</updated>
|
||||||
|
{{ range .Data.Pages }}
|
||||||
|
<item>
|
||||||
|
<title>{{ .Title }}</title>
|
||||||
|
<link>{{ .Permalink }}</link>
|
||||||
|
<pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 MST" }}</pubDate>
|
||||||
|
<author>Steve Francia</author>
|
||||||
|
<guid>{{ .Permalink }}</guid>
|
||||||
|
<description>{{ .Content | html }}</description>
|
||||||
|
</item>
|
||||||
|
{{ end }}
|
||||||
|
</channel>
|
||||||
|
</rss>`
|
||||||
|
|
||||||
|
func TestRSSOutput(t *testing.T) {
|
||||||
|
files := make(map[string][]byte)
|
||||||
|
target := &target.InMemoryTarget{Files: files}
|
||||||
|
s := &Site{
|
||||||
|
Target: target,
|
||||||
|
Config: Config{BaseUrl: "http://auth/bub/"},
|
||||||
|
Source: &source.InMemorySource{WEIGHTED_SOURCES},
|
||||||
|
}
|
||||||
|
s.initializeSiteInfo()
|
||||||
|
s.prepTemplates()
|
||||||
|
// Add an rss.xml template to invoke the rss build.
|
||||||
|
s.addTemplate("rss.xml", RSS_TEMPLATE)
|
||||||
|
|
||||||
|
if err := s.CreatePages(); err != nil {
|
||||||
|
t.Fatalf("Unable to create pages: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := s.BuildSiteMeta(); err != nil {
|
||||||
|
t.Fatalf("Unable to build site metadata: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := s.RenderHomePage(); err != nil {
|
||||||
|
t.Fatalf("Unable to RenderHomePage: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := files[".xml"]; !ok {
|
||||||
|
t.Errorf("Unable to locate: %s", ".xml")
|
||||||
|
t.Logf("%q", files)
|
||||||
|
}
|
||||||
|
|
||||||
|
rss, _ := files[".xml"]
|
||||||
|
if !bytes.HasPrefix(rss, []byte("<?xml")) {
|
||||||
|
t.Errorf("rss feed should start with <?xml. %s", rss)
|
||||||
|
}
|
||||||
|
}
|
|
@ -576,6 +576,7 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
section := ""
|
section := ""
|
||||||
if page, ok := d.(*Page); ok {
|
if page, ok := d.(*Page); ok {
|
||||||
section, _ = page.RelPermalink()
|
section, _ = page.RelPermalink()
|
||||||
|
@ -585,20 +586,19 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
transformer := transform.NewChain(
|
transformer := transform.NewChain(
|
||||||
append(absURL, transform.NavActive(section, "hugo-nav")...)...,
|
append(absURL, transform.NavActive(section, "hugo-nav")...)...,
|
||||||
)
|
)
|
||||||
|
|
||||||
var RenderBuffer *bytes.Buffer
|
var renderBuffer *bytes.Buffer
|
||||||
|
|
||||||
if strings.HasSuffix(out, ".xml") {
|
if strings.HasSuffix(out, ".xml") {
|
||||||
RenderBuffer = s.NewXMLBuffer()
|
renderBuffer = s.NewXMLBuffer()
|
||||||
} else {
|
} else {
|
||||||
RenderBuffer = new(bytes.Buffer)
|
renderBuffer = new(bytes.Buffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = s.renderThing(d, layout, RenderBuffer)
|
err = s.renderThing(d, layout, renderBuffer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Behavior here should be dependent on if running in server or watch mode.
|
// Behavior here should be dependent on if running in server or watch mode.
|
||||||
fmt.Println(fmt.Errorf("Rendering error: %v", err))
|
fmt.Println(fmt.Errorf("Rendering error: %v", err))
|
||||||
|
@ -608,7 +608,12 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
var outBuffer = new(bytes.Buffer)
|
var outBuffer = new(bytes.Buffer)
|
||||||
transformer.Apply(outBuffer, RenderBuffer)
|
if strings.HasSuffix(out, ".xml") {
|
||||||
|
outBuffer = renderBuffer
|
||||||
|
} else {
|
||||||
|
transformer.Apply(outBuffer, renderBuffer)
|
||||||
|
}
|
||||||
|
|
||||||
return s.WritePublic(out, outBuffer)
|
return s.WritePublic(out, outBuffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -348,19 +348,20 @@ date = "2012-01-01"
|
||||||
+++
|
+++
|
||||||
Front Matter with Ordered Pages 4`)
|
Front Matter with Ordered Pages 4`)
|
||||||
|
|
||||||
|
var WEIGHTED_SOURCES = []source.ByteSource{
|
||||||
|
{"sect/doc1.md", WEIGHTED_PAGE_1, "sect"},
|
||||||
|
{"sect/doc2.md", WEIGHTED_PAGE_2, "sect"},
|
||||||
|
{"sect/doc3.md", WEIGHTED_PAGE_3, "sect"},
|
||||||
|
{"sect/doc4.md", WEIGHTED_PAGE_4, "sect"},
|
||||||
|
}
|
||||||
|
|
||||||
func TestOrderedPages(t *testing.T) {
|
func TestOrderedPages(t *testing.T) {
|
||||||
files := make(map[string][]byte)
|
files := make(map[string][]byte)
|
||||||
target := &target.InMemoryTarget{Files: files}
|
target := &target.InMemoryTarget{Files: files}
|
||||||
sources := []source.ByteSource{
|
|
||||||
{"sect/doc1.md", WEIGHTED_PAGE_1, "sect"},
|
|
||||||
{"sect/doc2.md", WEIGHTED_PAGE_2, "sect"},
|
|
||||||
{"sect/doc3.md", WEIGHTED_PAGE_3, "sect"},
|
|
||||||
{"sect/doc4.md", WEIGHTED_PAGE_4, "sect"},
|
|
||||||
}
|
|
||||||
s := &Site{
|
s := &Site{
|
||||||
Target: target,
|
Target: target,
|
||||||
Config: Config{BaseUrl: "http://auth/bub/"},
|
Config: Config{BaseUrl: "http://auth/bub/"},
|
||||||
Source: &source.InMemorySource{sources},
|
Source: &source.InMemorySource{WEIGHTED_SOURCES},
|
||||||
}
|
}
|
||||||
s.initializeSiteInfo()
|
s.initializeSiteInfo()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue