summaryrefslogtreecommitdiffstats
path: root/resources/page/permalinks_integration_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'resources/page/permalinks_integration_test.go')
-rw-r--r--resources/page/permalinks_integration_test.go198
1 files changed, 198 insertions, 0 deletions
diff --git a/resources/page/permalinks_integration_test.go b/resources/page/permalinks_integration_test.go
new file mode 100644
index 000000000..6c2411ad7
--- /dev/null
+++ b/resources/page/permalinks_integration_test.go
@@ -0,0 +1,198 @@
+// Copyright 2023 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package page_test
+
+import (
+ "testing"
+
+ "github.com/bep/logg"
+ qt "github.com/frankban/quicktest"
+ "github.com/gohugoio/hugo/hugolib"
+)
+
+func TestPermalinks(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- layouts/_default/list.html --
+List|{{ .Kind }}|{{ .RelPermalink }}|
+-- layouts/_default/single.html --
+Single|{{ .Kind }}|{{ .RelPermalink }}|
+-- hugo.toml --
+[taxonomies]
+tag = "tags"
+[permalinks.page]
+withpageslug = '/pageslug/:slug/'
+withallbutlastsection = '/:sections[:last]/:slug/'
+[permalinks.section]
+withfilefilename = '/sectionwithfilefilename/:filename/'
+withfilefiletitle = '/sectionwithfilefiletitle/:title/'
+withfileslug = '/sectionwithfileslug/:slug/'
+nofileslug = '/sectionnofileslug/:slug/'
+nofilefilename = '/sectionnofilefilename/:filename/'
+nofiletitle1 = '/sectionnofiletitle1/:title/'
+nofiletitle2 = '/sectionnofiletitle2/:sections[:last]/'
+[permalinks.term]
+tags = '/tagsslug/tag/:slug/'
+[permalinks.taxonomy]
+tags = '/tagsslug/:slug/'
+-- content/withpageslug/p1.md --
+---
+slug: "p1slugvalue"
+tags: ["mytag"]
+---
+-- content/withfilefilename/_index.md --
+-- content/withfileslug/_index.md --
+---
+slug: "withfileslugvalue"
+---
+-- content/nofileslug/p1.md --
+-- content/nofilefilename/p1.md --
+-- content/nofiletitle1/p1.md --
+-- content/nofiletitle2/asdf/p1.md --
+-- content/withallbutlastsection/subsection/p1.md --
+-- content/tags/_index.md --
+---
+slug: "tagsslug"
+---
+-- content/tags/mytag/_index.md --
+---
+slug: "mytagslug"
+---
+
+
+`
+
+ b := hugolib.NewIntegrationTestBuilder(
+ hugolib.IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ LogLevel: logg.LevelWarn,
+ }).Build()
+
+ t.Log(b.LogString())
+ // No .File.TranslationBaseName on zero object etc. warnings.
+ b.Assert(b.H.Log.LoggCount(logg.LevelWarn), qt.Equals, 0)
+ b.AssertFileContent("public/pageslug/p1slugvalue/index.html", "Single|page|/pageslug/p1slugvalue/|")
+ b.AssertFileContent("public/sectionwithfilefilename/index.html", "List|section|/sectionwithfilefilename/|")
+ b.AssertFileContent("public/sectionwithfileslug/withfileslugvalue/index.html", "List|section|/sectionwithfileslug/withfileslugvalue/|")
+ b.AssertFileContent("public/sectionnofilefilename/index.html", "List|section|/sectionnofilefilename/|")
+ b.AssertFileContent("public/sectionnofileslug/nofileslugs/index.html", "List|section|/sectionnofileslug/nofileslugs/|")
+ b.AssertFileContent("public/sectionnofiletitle1/nofiletitle1s/index.html", "List|section|/sectionnofiletitle1/nofiletitle1s/|")
+ b.AssertFileContent("public/sectionnofiletitle2/index.html", "List|section|/sectionnofiletitle2/|")
+
+ b.AssertFileContent("public/tagsslug/tag/mytagslug/index.html", "List|term|/tagsslug/tag/mytagslug/|")
+ b.AssertFileContent("public/tagsslug/tagsslug/index.html", "List|taxonomy|/tagsslug/tagsslug/|")
+
+ permalinksConf := b.H.Configs.Base.Permalinks
+ b.Assert(permalinksConf, qt.DeepEquals, map[string]map[string]string{
+ "page": {"withallbutlastsection": "/:sections[:last]/:slug/", "withpageslug": "/pageslug/:slug/"},
+ "section": {"nofilefilename": "/sectionnofilefilename/:filename/", "nofileslug": "/sectionnofileslug/:slug/", "nofiletitle1": "/sectionnofiletitle1/:title/", "nofiletitle2": "/sectionnofiletitle2/:sections[:last]/", "withfilefilename": "/sectionwithfilefilename/:filename/", "withfilefiletitle": "/sectionwithfilefiletitle/:title/", "withfileslug": "/sectionwithfileslug/:slug/"},
+ "taxonomy": {"tags": "/tagsslug/:slug/"},
+ "term": {"tags": "/tagsslug/tag/:slug/"},
+ })
+
+}
+
+func TestPermalinksOldSetup(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- layouts/_default/list.html --
+List|{{ .Kind }}|{{ .RelPermalink }}|
+-- layouts/_default/single.html --
+Single|{{ .Kind }}|{{ .RelPermalink }}|
+-- hugo.toml --
+[permalinks]
+withpageslug = '/pageslug/:slug/'
+-- content/withpageslug/p1.md --
+---
+slug: "p1slugvalue"
+---
+
+
+
+
+`
+
+ b := hugolib.NewIntegrationTestBuilder(
+ hugolib.IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ LogLevel: logg.LevelWarn,
+ }).Build()
+
+ t.Log(b.LogString())
+ // No .File.TranslationBaseName on zero object etc. warnings.
+ b.Assert(b.H.Log.LoggCount(logg.LevelWarn), qt.Equals, 0)
+ b.AssertFileContent("public/pageslug/p1slugvalue/index.html", "Single|page|/pageslug/p1slugvalue/|")
+
+ permalinksConf := b.H.Configs.Base.Permalinks
+ b.Assert(permalinksConf, qt.DeepEquals, map[string]map[string]string{
+ "page": {"withpageslug": "/pageslug/:slug/"},
+ "section": {},
+ "taxonomy": {},
+ "term": {"withpageslug": "/pageslug/:slug/"},
+ })
+
+}
+
+func TestPermalinksNestedSections(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- hugo.toml --
+[permalinks.page]
+books = '/libros/:sections[1:]/:filename'
+
+[permalinks.section]
+books = '/libros/:sections[1:]'
+-- content/books/_index.md --
+---
+title: Books
+---
+-- content/books/fiction/_index.md --
+---
+title: Fiction
+---
+-- content/books/fiction/2023/_index.md --
+---
+title: 2023
+---
+-- content/books/fiction/2023/book1/index.md --
+---
+title: Book 1
+---
+-- layouts/_default/single.html --
+Single.
+-- layouts/_default/list.html --
+List.
+`
+
+ b := hugolib.NewIntegrationTestBuilder(
+ hugolib.IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ LogLevel: logg.LevelWarn,
+ }).Build()
+
+ t.Log(b.LogString())
+ // No .File.TranslationBaseName on zero object etc. warnings.
+ b.Assert(b.H.Log.LoggCount(logg.LevelWarn), qt.Equals, 0)
+
+ b.AssertFileContent("public/libros/index.html", "List.")
+ b.AssertFileContent("public/libros/fiction/index.html", "List.")
+ b.AssertFileContent("public/libros/fiction/2023/book1/index.html", "Single.")
+
+}