Fix RelURL and AbsURL when path starts with language
authorivan-meridianbanc-com <ivan@meridianbanc.com>
Wed, 2 Dec 2020 11:47:01 +0000 (13:47 +0200)
committerGitHub <noreply@github.com>
Wed, 2 Dec 2020 11:47:01 +0000 (12:47 +0100)
helpers/url.go
helpers/url_test.go

index 6dbdea299e341982725c5bbf19c49270ca80c3cd..1e88def9e5bb6596e8ad6885c325a7cd70926b6c 100644 (file)
@@ -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 {
index 9223ba2cd16549cfd95b905c43eb70a381145819..6f374f02779c60c260acc0fdb40829d733d77e37 100644 (file)
@@ -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)