rss_test.go (3059B)
1 // Copyright 2019 The Hugo Authors. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package hugolib 15 16 import ( 17 "path/filepath" 18 "strings" 19 "testing" 20 21 "github.com/gohugoio/hugo/deps" 22 ) 23 24 func TestRSSOutput(t *testing.T) { 25 t.Parallel() 26 var ( 27 cfg, fs = newTestCfg() 28 th = newTestHelper(cfg, fs, t) 29 ) 30 31 rssLimit := len(weightedSources) - 1 32 33 rssURI := "index.xml" 34 35 cfg.Set("baseURL", "http://auth/bub/") 36 cfg.Set("title", "RSSTest") 37 cfg.Set("rssLimit", rssLimit) 38 39 for _, src := range weightedSources { 40 writeSource(t, fs, filepath.Join("content", "sect", src[0]), src[1]) 41 } 42 43 buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{}) 44 45 // Home RSS 46 th.assertFileContent(filepath.Join("public", rssURI), "<?xml", "rss version", "RSSTest") 47 // Section RSS 48 th.assertFileContent(filepath.Join("public", "sect", rssURI), "<?xml", "rss version", "Sects on RSSTest") 49 // Taxonomy RSS 50 th.assertFileContent(filepath.Join("public", "categories", "hugo", rssURI), "<?xml", "rss version", "hugo on RSSTest") 51 52 // RSS Item Limit 53 content := readWorkingDir(t, fs, filepath.Join("public", rssURI)) 54 c := strings.Count(content, "<item>") 55 if c != rssLimit { 56 t.Errorf("incorrect RSS item count: expected %d, got %d", rssLimit, c) 57 } 58 59 // Encoded summary 60 th.assertFileContent(filepath.Join("public", rssURI), "<?xml", "description", "A <em>custom</em> summary") 61 } 62 63 // Before Hugo 0.49 we set the pseudo page kind RSS on the page when output to RSS. 64 // This had some unintended side effects, esp. when the only output format for that page 65 // was RSS. 66 // For the page kinds that can have multiple output formats, the Kind should be one of the 67 // standard home, page etc. 68 // This test has this single purpose: Check that the Kind is that of the source page. 69 // See https://github.com/gohugoio/hugo/issues/5138 70 func TestRSSKind(t *testing.T) { 71 t.Parallel() 72 73 b := newTestSitesBuilder(t) 74 b.WithSimpleConfigFile().WithTemplatesAdded("index.rss.xml", `RSS Kind: {{ .Kind }}`) 75 76 b.Build(BuildCfg{}) 77 78 b.AssertFileContent("public/index.xml", "RSS Kind: home") 79 } 80 81 func TestRSSCanonifyURLs(t *testing.T) { 82 t.Parallel() 83 84 b := newTestSitesBuilder(t) 85 b.WithSimpleConfigFile().WithTemplatesAdded("index.rss.xml", `<rss>{{ range .Pages }}<item>{{ .Content | html }}</item>{{ end }}</rss>`) 86 b.WithContent("page.md", `--- 87 Title: My Page 88 --- 89 90 Figure: 91 92 {{< figure src="/images/sunset.jpg" title="Sunset" >}} 93 94 95 96 `) 97 b.Build(BuildCfg{}) 98 99 b.AssertFileContent("public/index.xml", "img src="http://example.com/images/sunset.jpg") 100 }