From: Robert Basic <robertbasic.com@gmail.com>
Date: Fri, 1 Apr 2016 18:17:16 +0000 (+0200)
Subject: Make ByCount sort consistently
X-Git-Tag: v0.16~137
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=7d5c9fbf44ad9f2fd5baed405f79f2b132dd9178;p=brevno-suite%2Fhugo

Make ByCount sort consistently

When two or more taxonomies have the same number of pages,
sort them by name to have consistent ByCount sorting of
taxonomies.

Fixes #1930
---

diff --git a/hugolib/taxonomy.go b/hugolib/taxonomy.go
index 1ba8f6d0..ffe586ff 100644
--- a/hugolib/taxonomy.go
+++ b/hugolib/taxonomy.go
@@ -96,9 +96,16 @@ func (i Taxonomy) Alphabetical() OrderedTaxonomy {
 }
 
 // ByCount returns an ordered taxonomy sorted by # of pages per key.
+// If taxonomies have the same # of pages, sort them alphabetical
 func (i Taxonomy) ByCount() OrderedTaxonomy {
 	count := func(i1, i2 *OrderedTaxonomyEntry) bool {
-		return len(i1.WeightedPages) > len(i2.WeightedPages)
+		li1 := len(i1.WeightedPages)
+		li2 := len(i2.WeightedPages)
+
+		if li1 == li2 {
+			return i1.Name < i2.Name
+		}
+		return li1 > li2
 	}
 
 	ia := i.TaxonomyArray()
diff --git a/hugolib/taxonomy_test.go b/hugolib/taxonomy_test.go
index 005be33b..ab9df108 100644
--- a/hugolib/taxonomy_test.go
+++ b/hugolib/taxonomy_test.go
@@ -16,6 +16,8 @@ package hugolib
 import (
 	"strings"
 	"testing"
+
+	"github.com/spf13/viper"
 )
 
 func TestSitePossibleTaxonomies(t *testing.T) {
@@ -29,3 +31,29 @@ func TestSitePossibleTaxonomies(t *testing.T) {
 		}
 	}
 }
+
+func TestByCountOrderOfTaxonomies(t *testing.T) {
+	viper.Reset()
+	defer viper.Reset()
+
+	taxonomies := make(map[string]string)
+
+	taxonomies["tag"] = "tags"
+	taxonomies["category"] = "categories"
+
+	viper.Set("taxonomies", taxonomies)
+
+	site := new(Site)
+	page, _ := NewPageFrom(strings.NewReader(pageYamlWithTaxonomiesA), "path/to/page")
+	site.Pages = append(site.Pages, page)
+	site.assembleTaxonomies()
+
+	st := make([]string, 0)
+	for _, t := range site.Taxonomies["tags"].ByCount() {
+		st = append(st, t.Name)
+	}
+
+	if !compareStringSlice(st, []string{"a", "b", "c"}) {
+		t.Fatalf("ordered taxonomies do not match [a, b, c].  Got: %s", st)
+	}
+}