mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05: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
3 changed files with 84 additions and 13 deletions
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
|
||||
}
|
||||
|
||||
|
||||
section := ""
|
||||
if page, ok := d.(*Page); ok {
|
||||
section, _ = page.RelPermalink()
|
||||
|
@ -585,20 +586,19 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
|
|||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
transformer := transform.NewChain(
|
||||
append(absURL, transform.NavActive(section, "hugo-nav")...)...,
|
||||
)
|
||||
|
||||
var RenderBuffer *bytes.Buffer
|
||||
var renderBuffer *bytes.Buffer
|
||||
|
||||
if strings.HasSuffix(out, ".xml") {
|
||||
RenderBuffer = s.NewXMLBuffer()
|
||||
renderBuffer = s.NewXMLBuffer()
|
||||
} else {
|
||||
RenderBuffer = new(bytes.Buffer)
|
||||
renderBuffer = new(bytes.Buffer)
|
||||
}
|
||||
|
||||
err = s.renderThing(d, layout, RenderBuffer)
|
||||
err = s.renderThing(d, layout, renderBuffer)
|
||||
if err != nil {
|
||||
// Behavior here should be dependent on if running in server or watch mode.
|
||||
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)
|
||||
transformer.Apply(outBuffer, RenderBuffer)
|
||||
if strings.HasSuffix(out, ".xml") {
|
||||
outBuffer = renderBuffer
|
||||
} else {
|
||||
transformer.Apply(outBuffer, renderBuffer)
|
||||
}
|
||||
|
||||
return s.WritePublic(out, outBuffer)
|
||||
}
|
||||
|
||||
|
|
|
@ -348,19 +348,20 @@ date = "2012-01-01"
|
|||
+++
|
||||
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) {
|
||||
files := make(map[string][]byte)
|
||||
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{
|
||||
Target: target,
|
||||
Config: Config{BaseUrl: "http://auth/bub/"},
|
||||
Source: &source.InMemorySource{sources},
|
||||
Source: &source.InMemorySource{WEIGHTED_SOURCES},
|
||||
}
|
||||
s.initializeSiteInfo()
|
||||
|
||||
|
|
Loading…
Reference in a new issue