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
This commit is contained in:
Robert Basic 2016-04-01 20:17:16 +02:00 committed by Bjørn Erik Pedersen
parent c6c2c689d6
commit 7d5c9fbf44
2 changed files with 36 additions and 1 deletions

View file

@ -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()

View file

@ -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)
}
}