From bb3769822635963c35900fb307520e6bed7ff931 Mon Sep 17 00:00:00 2001 From: bep Date: Tue, 16 Dec 2014 12:08:16 +0100 Subject: [PATCH] Fix unicode menu URLs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- hugolib/menu_test.go | 32 +++++++++++++++++++++++++++++++- hugolib/site.go | 2 +- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/hugolib/menu_test.go b/hugolib/menu_test.go index f4758d31f..1712e4520 100644 --- a/hugolib/menu_test.go +++ b/hugolib/menu_test.go @@ -9,6 +9,7 @@ import ( "github.com/spf13/hugo/hugofs" "github.com/spf13/hugo/source" "github.com/spf13/viper" + "github.com/stretchr/testify/assert" ) const ( @@ -47,7 +48,11 @@ const ( [[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(`+++ @@ -139,6 +144,31 @@ func _TestPageMenu(t *testing.T) { } +// 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) { ts := setupMenuTests(t) defer resetMenuTestState(ts) diff --git a/hugolib/site.go b/hugolib/site.go index e2c62a4f5..6ff64b48e 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -1168,7 +1168,7 @@ func (s *Site) permalinkStr(plink string) string { } 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 {