From aebfe156fb2f27057e61b2e50c7576e6b06dab58 Mon Sep 17 00:00:00 2001 From: ivan-meridianbanc-com Date: Wed, 2 Dec 2020 13:47:01 +0200 Subject: [PATCH] Fix RelURL and AbsURL when path starts with language --- helpers/url.go | 16 ++++++++++++---- helpers/url_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/helpers/url.go b/helpers/url.go index 6dbdea299..1e88def9e 100644 --- a/helpers/url.go +++ b/helpers/url.go @@ -181,10 +181,14 @@ func (p *PathSpec) AbsURL(in string, addLanguage bool) string { if prefix != "" { hasPrefix := false // avoid adding language prefix if already present + in2 := in if strings.HasPrefix(in, "/") { - hasPrefix = strings.HasPrefix(in[1:], prefix) + in2 = in[1:] + } + if in2 == prefix { + hasPrefix = true } else { - hasPrefix = strings.HasPrefix(in, prefix) + hasPrefix = strings.HasPrefix(in2, prefix+"/") } if !hasPrefix { @@ -230,10 +234,14 @@ func (p *PathSpec) RelURL(in string, addLanguage bool) string { if prefix != "" { hasPrefix := false // avoid adding language prefix if already present + in2 := in if strings.HasPrefix(in, "/") { - hasPrefix = strings.HasPrefix(in[1:], prefix) + in2 = in[1:] + } + if in2 == prefix { + hasPrefix = true } else { - hasPrefix = strings.HasPrefix(in, prefix) + hasPrefix = strings.HasPrefix(in2, prefix+"/") } if !hasPrefix { diff --git a/helpers/url_test.go b/helpers/url_test.go index 9223ba2cd..6f374f027 100644 --- a/helpers/url_test.go +++ b/helpers/url_test.go @@ -84,6 +84,21 @@ func doTestAbsURL(t *testing.T, defaultInSubDir, addLanguage, multilingual bool, {"http//foo", "http://base/path", "http://base/path/MULTIhttp/foo"}, } + if multilingual && addLanguage && defaultInSubDir { + newTests := []struct { + input string + baseURL string + expected string + }{ + {lang + "test", "http://base/", "http://base/" + lang + "/" + lang + "test"}, + {"/" + lang + "test", "http://base/", "http://base/" + lang + "/" + lang + "test"}, + } + + for _, test := range newTests { + tests = append(tests, test) + } + } + for _, test := range tests { v.Set("baseURL", test.baseURL) v.Set("contentDir", "content") @@ -164,6 +179,22 @@ func doTestRelURL(t *testing.T, defaultInSubDir, addLanguage, multilingual bool, {"//schemaless", "http://base/", false, "//schemaless"}, } + if multilingual && addLanguage && defaultInSubDir { + newTests := []struct { + input string + baseURL string + canonify bool + expected string + }{ + {lang + "test", "http://base/", false, "/" + lang + "/" + lang + "test"}, + {"/" + lang + "test", "http://base/", false, "/" + lang + "/" + lang + "test"}, + } + + for _, test := range newTests { + tests = append(tests, test) + } + } + for i, test := range tests { v.Set("baseURL", test.baseURL) v.Set("canonifyURLs", test.canonify)