shithub: hugo

Download patch

ref: a9a93d082d8640684b7fd0076c64ea808ea7f762
parent: b09a40333f382cc1034d2eda856230258ab6b8cc
author: Bjørn Erik Pedersen <[email protected]>
date: Wed Nov 28 07:28:24 EST 2018

hugolib: Fall back to title in ByLinkTitle sort

Fixes #4953

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -18,6 +18,7 @@
 	"context"
 	"errors"
 	"fmt"
+	"math/rand"
 	"reflect"
 
 	"github.com/gohugoio/hugo/common/maps"
@@ -515,6 +516,14 @@
 
 func (ps Pages) String() string {
 	return fmt.Sprintf("Pages(%d)", len(ps))
+}
+
+// Used in tests.
+func (ps Pages) shuffle() {
+	for i := range ps {
+		j := rand.Intn(i + 1)
+		ps[i], ps[j] = ps[j], ps[i]
+	}
 }
 
 func (ps Pages) findPagePosByFilename(filename string) int {
--- a/hugolib/pageSort.go
+++ b/hugolib/pageSort.go
@@ -155,7 +155,7 @@
 	const key = "pageSort.ByLinkTitle"
 
 	linkTitle := func(p1, p2 *Page) bool {
-		return p1.linkTitle < p2.linkTitle
+		return p1.LinkTitle() < p2.LinkTitle()
 	}
 
 	pages, _ := spc.get(key, pageBy(linkTitle).Sort, p)
--- a/hugolib/pageSort_test.go
+++ b/hugolib/pageSort_test.go
@@ -20,6 +20,7 @@
 	"time"
 
 	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
 )
 
 func TestDefaultSort(t *testing.T) {
@@ -56,6 +57,37 @@
 	assert.Equal(t, "al", p[0].LinkTitle())
 	assert.Equal(t, "bl", p[1].LinkTitle())
 	assert.Equal(t, "cl", p[2].LinkTitle())
+}
+
+// https://github.com/gohugoio/hugo/issues/4953
+func TestSortByLinkTitle(t *testing.T) {
+	t.Parallel()
+	assert := require.New(t)
+	s := newTestSite(t)
+	pages := createSortTestPages(s, 6)
+
+	for i, p := range pages {
+		if i < 5 {
+			p.title = fmt.Sprintf("title%d", i)
+		}
+
+		if i > 2 {
+			p.linkTitle = fmt.Sprintf("linkTitle%d", i)
+		}
+	}
+
+	pages.shuffle()
+
+	bylt := pages.ByLinkTitle()
+
+	for i, p := range bylt {
+		msg := fmt.Sprintf("test: %d", i)
+		if i < 3 {
+			assert.Equal(fmt.Sprintf("linkTitle%d", i+3), p.LinkTitle(), msg)
+		} else {
+			assert.Equal(fmt.Sprintf("title%d", i-3), p.LinkTitle(), msg)
+		}
+	}
 }
 
 func TestSortByN(t *testing.T) {