mirror of
https://github.com/gohugoio/hugo.git
synced 2024-12-28 22:14:54 +00:00
3466884e36
Before a robots.txt is created in every Site. So in public/robots.txt if there are no languages (was correct). But if there are multiple languages in every language directory, too (was wrong). If defaultContentLanguageInSubdir is true, no language is created into the root directory, so no robots.txt is in the root directory (was wrong). If multihosts are configured for each language, that is the only case where one robots.txt must be created in each language directory (was correct). I've changed the behaviour, that only in the multihost case the robots.txt is created in the language directories. In any other case it is created in public/robots.txt. I've also added tests that files are not created in the wrong directories. Fixes #5160 See also #4193
120 lines
4 KiB
Go
120 lines
4 KiB
Go
package hugolib
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/gohugoio/hugo/resources/page"
|
|
|
|
qt "github.com/frankban/quicktest"
|
|
)
|
|
|
|
func TestMultihosts(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
c := qt.New(t)
|
|
|
|
var configTemplate = `
|
|
paginate = 1
|
|
disablePathToLower = true
|
|
defaultContentLanguage = "fr"
|
|
defaultContentLanguageInSubdir = false
|
|
staticDir = ["s1", "s2"]
|
|
enableRobotsTXT = true
|
|
|
|
[permalinks]
|
|
other = "/somewhere/else/:filename"
|
|
|
|
[Taxonomies]
|
|
tag = "tags"
|
|
|
|
[Languages]
|
|
[Languages.en]
|
|
staticDir2 = ["ens1", "ens2"]
|
|
baseURL = "https://example.com/docs"
|
|
weight = 10
|
|
title = "In English"
|
|
languageName = "English"
|
|
|
|
[Languages.fr]
|
|
staticDir2 = ["frs1", "frs2"]
|
|
baseURL = "https://example.fr"
|
|
weight = 20
|
|
title = "Le Français"
|
|
languageName = "Français"
|
|
|
|
[Languages.nn]
|
|
staticDir2 = ["nns1", "nns2"]
|
|
baseURL = "https://example.no"
|
|
weight = 30
|
|
title = "På nynorsk"
|
|
languageName = "Nynorsk"
|
|
|
|
`
|
|
|
|
b := newMultiSiteTestDefaultBuilder(t).WithConfigFile("toml", configTemplate)
|
|
b.CreateSites().Build(BuildCfg{})
|
|
|
|
b.AssertFileContent("public/en/sect/doc1-slug/index.html", "Hello")
|
|
|
|
s1 := b.H.Sites[0]
|
|
|
|
s1h := s1.getPage(page.KindHome)
|
|
c.Assert(s1h.IsTranslated(), qt.Equals, true)
|
|
c.Assert(len(s1h.Translations()), qt.Equals, 2)
|
|
c.Assert(s1h.Permalink(), qt.Equals, "https://example.com/docs/")
|
|
|
|
// For “regular multilingual” we kept the aliases pages with url in front matter
|
|
// as a literal value that we use as is.
|
|
// There is an ambiguity in the guessing.
|
|
// For multihost, we never want any content in the root.
|
|
//
|
|
// check url in front matter:
|
|
pageWithURLInFrontMatter := s1.getPage(page.KindPage, "sect/doc3.en.md")
|
|
c.Assert(pageWithURLInFrontMatter, qt.Not(qt.IsNil))
|
|
c.Assert(pageWithURLInFrontMatter.RelPermalink(), qt.Equals, "/docs/superbob/")
|
|
b.AssertFileContent("public/en/superbob/index.html", "doc3|Hello|en")
|
|
|
|
// the domain root is the language directory for each language, so the robots.txt is created in the language directories
|
|
b.AssertFileContent("public/en/robots.txt", "robots|en")
|
|
b.AssertFileContent("public/fr/robots.txt", "robots|fr")
|
|
b.AssertFileContent("public/nn/robots.txt", "robots|nn")
|
|
b.AssertFileDoesNotExist("public/robots.txt")
|
|
|
|
// check alias:
|
|
b.AssertFileContent("public/en/al/alias1/index.html", `content="0; url=https://example.com/docs/superbob/"`)
|
|
b.AssertFileContent("public/en/al/alias2/index.html", `content="0; url=https://example.com/docs/superbob/"`)
|
|
|
|
s2 := b.H.Sites[1]
|
|
|
|
s2h := s2.getPage(page.KindHome)
|
|
c.Assert(s2h.Permalink(), qt.Equals, "https://example.fr/")
|
|
|
|
b.AssertFileContent("public/fr/index.html", "French Home Page", "String Resource: /docs/text/pipes.txt")
|
|
b.AssertFileContent("public/fr/text/pipes.txt", "Hugo Pipes")
|
|
b.AssertFileContent("public/en/index.html", "Default Home Page", "String Resource: /docs/text/pipes.txt")
|
|
b.AssertFileContent("public/en/text/pipes.txt", "Hugo Pipes")
|
|
|
|
// Check paginators
|
|
b.AssertFileContent("public/en/page/1/index.html", `refresh" content="0; url=https://example.com/docs/"`)
|
|
b.AssertFileContent("public/nn/page/1/index.html", `refresh" content="0; url=https://example.no/"`)
|
|
b.AssertFileContent("public/en/sect/page/2/index.html", "List Page 2", "Hello", "https://example.com/docs/sect/", "\"/docs/sect/page/3/")
|
|
b.AssertFileContent("public/fr/sect/page/2/index.html", "List Page 2", "Bonjour", "https://example.fr/sect/")
|
|
|
|
// Check bundles
|
|
|
|
bundleEn := s1.getPage(page.KindPage, "bundles/b1/index.en.md")
|
|
c.Assert(bundleEn, qt.Not(qt.IsNil))
|
|
c.Assert(bundleEn.RelPermalink(), qt.Equals, "/docs/bundles/b1/")
|
|
c.Assert(len(bundleEn.Resources()), qt.Equals, 1)
|
|
|
|
b.AssertFileContent("public/en/bundles/b1/logo.png", "PNG Data")
|
|
b.AssertFileContent("public/en/bundles/b1/index.html", " image/png: /docs/bundles/b1/logo.png")
|
|
|
|
bundleFr := s2.getPage(page.KindPage, "bundles/b1/index.md")
|
|
c.Assert(bundleFr, qt.Not(qt.IsNil))
|
|
c.Assert(bundleFr.RelPermalink(), qt.Equals, "/bundles/b1/")
|
|
c.Assert(len(bundleFr.Resources()), qt.Equals, 1)
|
|
b.AssertFileContent("public/fr/bundles/b1/logo.png", "PNG Data")
|
|
b.AssertFileContent("public/fr/bundles/b1/index.html", " image/png: /bundles/b1/logo.png")
|
|
|
|
}
|