ref: a6d22bcf7dd96a8dd30e7ce27cb88b45f85c2407
dir: /hugolib/pagination_test.go/
package hugolib
import (
"fmt"
"github.com/spf13/hugo/source"
"github.com/spf13/viper"
"github.com/stretchr/testify/assert"
"path/filepath"
"testing"
)
func TestSplitPages(t *testing.T) {
pages := createTestPages(21)
chunks := splitPages(pages, 5)
assert.Equal(t, 5, len(chunks))
for i := 0; i < 4; i++ {
assert.Equal(t, 5, len(chunks[i]))
}
lastChunk := chunks[4]
assert.Equal(t, 1, len(lastChunk))
}
func TestPaginator(t *testing.T) {
pages := createTestPages(21)
urlFactory := func(page int) string {
return fmt.Sprintf("page/%d/", page)
}
paginator := newPaginator(pages, 5, urlFactory)
paginatorPages := paginator.Pagers()
assert.Equal(t, 5, len(paginatorPages))
assert.Equal(t, 21, paginator.TotalNumberOfElements())
assert.Equal(t, 5, paginator.PageSize())
assert.Equal(t, 5, paginator.TotalPages())
first := paginatorPages[0]
assert.Equal(t, "page/1/", first.Url())
assert.Equal(t, first, first.First())
assert.Equal(t, true, first.HasNext())
assert.Equal(t, false, first.HasPrev())
assert.Equal(t, 5, first.NumberOfElements())
assert.Equal(t, 1, first.PageNumber())
third := paginatorPages[2]
assert.Equal(t, true, third.HasNext())
assert.Equal(t, true, third.HasPrev())
last := paginatorPages[4]
assert.Equal(t, "page/5/", last.Url())
assert.Equal(t, last, last.Last())
assert.Equal(t, false, last.HasNext())
assert.Equal(t, true, last.HasPrev())
assert.Equal(t, 1, last.NumberOfElements())
assert.Equal(t, 5, last.PageNumber())
}
func TestPaginationUrlFactory(t *testing.T) {
viper.Set("PaginatePath", "zoo")
unicode := newPaginationUrlFactory("новости проекта")
fooBar := newPaginationUrlFactory("foo", "bar")
assert.Equal(t, "/%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0/", unicode(1))
assert.Equal(t, "/foo/bar/", fooBar(1))
assert.Equal(t, "/%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0/zoo/4/", unicode(4))
assert.Equal(t, "/foo/bar/zoo/12345/", fooBar(12345))
}
func createTestPages(num int) Pages {
pages := make(Pages, num)
for i := 0; i < num; i++ {
pages[i] = &Page{
Node: Node{
UrlPath: UrlPath{
Section: "z",
Url: fmt.Sprintf("http://base/x/y/p%d.html", num),
},
Site: &SiteInfo{
BaseUrl: "http://base/",
},
},
Source: Source{File: *source.NewFile(filepath.FromSlash(fmt.Sprintf("/x/y/p%d.md", num)))},
}
}
return pages
}