ref: bb3769822635963c35900fb307520e6bed7ff931
parent: e4a22255ccb818f8b55a20f56ddcfda869db250f
author: bep <[email protected]>
date: Tue Dec 16 07:08:16 EST 2014
Fix unicode menu URLs Menu urls like /categories/новости-проекта would turn into /categories/d0bdd0bed0b2d0bed181d182d0b8-d0bfd180d0bed0b5d0bad182d0b0, which is illegal, while the directory under the categories/ is created with the original name. It results in 404 not found error. This commit fixes that by make sure that SanitizeUrl() is called last. Fixes #719
--- a/hugolib/menu_test.go
+++ b/hugolib/menu_test.go
@@ -9,6 +9,7 @@
"github.com/spf13/hugo/hugofs"
"github.com/spf13/hugo/source"
"github.com/spf13/viper"
+ "github.com/stretchr/testify/assert"
)
const (
@@ -47,7 +48,11 @@
[[menu.tax]]
name = "Tax RSS"
url = "/two/key.xml"
- identifier="xml"`
+ identifier="xml"
+[[menu.unicode]]
+ name = "Unicode Russian"
+ identifier = "unicode-russian"
+ url = "/новости-проекта"` // Russian => "news-project"
)
var MENU_PAGE_1 = []byte(`+++
@@ -137,6 +142,31 @@
}
+}
+
+// issue #719
+func TestMenuWithUnicodeUrls(t *testing.T) {
+ for _, uglyUrls := range []bool{true, false} {
+ doTestMenuWithUnicodeUrls(t, uglyUrls)
+ }
+}
+
+func doTestMenuWithUnicodeUrls(t *testing.T, uglyUrls bool) {
+ viper.Set("UglyUrls", uglyUrls)
+ ts := setupMenuTests(t)
+ defer resetMenuTestState(ts)
+
+ unicodeRussian := ts.findTestMenuEntryById("unicode", "unicode-russian")
+
+ expectedBase := "http://foo.local/zoo/%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0"
+ var expected string
+ if uglyUrls {
+ expected = expectedBase + ".html"
+ } else {
+ expected = expectedBase + "/"
+ }
+
+ assert.Equal(t, expected, unicodeRussian.Url, "uglyUrls[%t]", uglyUrls)
}
func TestTaxonomyNodeMenu(t *testing.T) {
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1168,7 +1168,7 @@
}
func (s *Site) prepUrl(in string) string {
- return helpers.Urlize(s.PrettifyUrl(in))
+ return s.PrettifyUrl(helpers.Urlize(in))
}
func (s *Site) PrettifyUrl(in string) string {