ref: 73894cca56597c814ba8decb838d9dc80634396c
parent: 2071d470e69a9aa7e8393fc9a0eb917f37c4606c
author: Bjørn Erik Pedersen <[email protected]>
date: Wed Sep 21 10:09:41 EDT 2016
Add TestChangeDefaultLanguage
--- a/hugolib/hugo_sites_test.go
+++ b/hugolib/hugo_sites_test.go
@@ -6,10 +6,10 @@
"strings"
"testing"
+ "os"
"path/filepath"
+ "text/template"
- "os"
-
"github.com/fsnotify/fsnotify"
"github.com/spf13/afero"
"github.com/spf13/hugo/helpers"
@@ -21,6 +21,10 @@
"github.com/stretchr/testify/require"
)
+type testSiteConfig struct {
+ DefaultContentLanguage string
+}
+
func init() {
testCommonResetState()
jww.SetStdoutThreshold(jww.LevelCritical)
@@ -50,8 +54,9 @@
func doTestMultiSitesMainLangInRoot(t *testing.T, defaultInSubDir bool) {
testCommonResetState()
viper.Set("DefaultContentLanguageInSubdir", defaultInSubDir)
+ siteConfig := testSiteConfig{DefaultContentLanguage: "fr"}
- sites := createMultiTestSites(t, multiSiteTOMLConfig)
+ sites := createMultiTestSites(t, siteConfig, multiSiteTOMLConfigTemplate)
err := sites.Build(BuildCfg{})
@@ -171,7 +176,7 @@
content string
suffix string
}{
- {multiSiteTOMLConfig, "toml"},
+ {multiSiteTOMLConfigTemplate, "toml"},
{multiSiteYAMLConfig, "yml"},
{multiSiteJSONConfig, "json"},
} {
@@ -179,9 +184,10 @@
}
}
-func doTestMultiSitesBuild(t *testing.T, configContent, configSuffix string) {
+func doTestMultiSitesBuild(t *testing.T, configTemplate, configSuffix string) {
testCommonResetState()
- sites := createMultiTestSitesForConfig(t, configContent, configSuffix)
+ siteConfig := testSiteConfig{DefaultContentLanguage: "fr"}
+ sites := createMultiTestSitesForConfig(t, siteConfig, configTemplate, configSuffix)
err := sites.Build(BuildCfg{})
@@ -342,7 +348,8 @@
func TestMultiSitesRebuild(t *testing.T) {
testCommonResetState()
- sites := createMultiTestSites(t, multiSiteTOMLConfig)
+ siteConfig := testSiteConfig{DefaultContentLanguage: "fr"}
+ sites := createMultiTestSites(t, siteConfig, multiSiteTOMLConfigTemplate)
cfg := BuildCfg{Watching: true}
err := sites.Build(cfg)
@@ -554,8 +561,9 @@
func TestAddNewLanguage(t *testing.T) {
testCommonResetState()
+ siteConfig := testSiteConfig{DefaultContentLanguage: "fr"}
- sites := createMultiTestSites(t, multiSiteTOMLConfig)
+ sites := createMultiTestSites(t, siteConfig, multiSiteTOMLConfigTemplate)
cfg := BuildCfg{}
err := sites.Build(cfg)
@@ -564,7 +572,7 @@
t.Fatalf("Failed to build sites: %s", err)
}
- newConfig := multiSiteTOMLConfig + `
+ newConfig := multiSiteTOMLConfigTemplate + `
[Languages.sv]
weight = 15
@@ -571,6 +579,8 @@
title = "Svenska"
`
+ newConfig = createConfig(t, siteConfig, newConfig)
+
writeNewContentFile(t, "Swedish Contentfile", "2016-01-01", "content/sect/doc1.sv.md", 10)
// replace the config
writeSource(t, "multilangconfig.toml", newConfig)
@@ -612,7 +622,42 @@
}
-var multiSiteTOMLConfig = `
+func TestChangeDefaultLanguage(t *testing.T) {
+ testCommonResetState()
+ viper.Set("DefaultContentLanguageInSubdir", false)
+
+ sites := createMultiTestSites(t, testSiteConfig{DefaultContentLanguage: "fr"}, multiSiteTOMLConfigTemplate)
+ cfg := BuildCfg{}
+
+ err := sites.Build(cfg)
+
+ if err != nil {
+ t.Fatalf("Failed to build sites: %s", err)
+ }
+
+ assertFileContent(t, "public/sect/doc1/index.html", true, "Single", "Bonjour")
+ assertFileContent(t, "public/en/sect/doc2/index.html", true, "Single", "Hello")
+
+ newConfig := createConfig(t, testSiteConfig{DefaultContentLanguage: "en"}, multiSiteTOMLConfigTemplate)
+
+ // replace the config
+ writeSource(t, "multilangconfig.toml", newConfig)
+
+ // Watching does not work with in-memory fs, so we trigger a reload manually
+ require.NoError(t, viper.ReadInConfig())
+ err = sites.Build(BuildCfg{CreateSitesFromConfig: true})
+
+ if err != nil {
+ t.Fatalf("Failed to rebuild sites: %s", err)
+ }
+
+ // Default language is now en, so that should now be the "root" language
+ assertFileContent(t, "public/fr/sect/doc1/index.html", true, "Single", "Bonjour")
+ assertFileContent(t, "public/sect/doc2/index.html", true, "Single", "Hello")
+
+}
+
+var multiSiteTOMLConfigTemplate = `
DefaultExtension = "html"
baseurl = "http://example.com/blog"
DisableSitemap = false
@@ -620,7 +665,7 @@
RSSUri = "index.xml"
paginate = 1
-DefaultContentLanguage = "fr"
+DefaultContentLanguage = "{{ .DefaultContentLanguage }}"
[permalinks]
other = "/somewhere/else/:filename"
@@ -805,12 +850,14 @@
}
`
-func createMultiTestSites(t *testing.T, tomlConfig string) *HugoSites {
- return createMultiTestSitesForConfig(t, tomlConfig, "toml")
+func createMultiTestSites(t *testing.T, siteConfig testSiteConfig, tomlConfigTemplate string) *HugoSites {
+ return createMultiTestSitesForConfig(t, siteConfig, tomlConfigTemplate, "toml")
}
-func createMultiTestSitesForConfig(t *testing.T, configContent, configSuffix string) *HugoSites {
+func createMultiTestSitesForConfig(t *testing.T, siteConfig testSiteConfig, configTemplate, configSuffix string) *HugoSites {
+ configContent := createConfig(t, siteConfig, configTemplate)
+
// Add some layouts
if err := afero.WriteFile(hugofs.Source(),
filepath.Join("layouts", "_default/single.html"),
@@ -1070,4 +1117,14 @@
func writeNewContentFile(t *testing.T, title, date, filename string, weight int) {
content := newTestPage(title, date, weight)
writeSource(t, filename, content)
+}
+
+func createConfig(t *testing.T, config testSiteConfig, configTemplate string) string {
+ templ, err := template.New("test").Parse(configTemplate)
+ if err != nil {
+ t.Fatal("Template parse failed:", err)
+ }
+ var b bytes.Buffer
+ templ.Execute(&b, config)
+ return b.String()
}