mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-15 20:44:01 +02:00
Misc permalinks adjustments
* Move config loading to the page package * Fix a lower bound panic for the `:sections` slice syntax. * Always return the `:title` * Add some permalinks integration tests * Also see issues below Fixes #9448 Fixes #11184 See #8523
This commit is contained in:
198
resources/page/permalinks_integration_test.go
Normal file
198
resources/page/permalinks_integration_test.go
Normal file
@@ -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.")
|
||||
|
||||
}
|
Reference in New Issue
Block a user