diff --git a/.github/workflows/commit-lint.yml b/.github/workflows/commit-lint.yml index 87f41bf..44b9e8c 100644 --- a/.github/workflows/commit-lint.yml +++ b/.github/workflows/commit-lint.yml @@ -16,6 +16,8 @@ on: - develop - feature/** - release/** + - test/** + - bugfix/** jobs: lint-commits: diff --git a/.gitignore b/.gitignore index 26e46a7..fa0d738 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ /.idea +/vendor +/coverage.txt # Binaries for programs and plugins *.exe *.exe~ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ca4a860 --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +.PHONY: install tests + +install: + go mod tidy && go mod vendor + +tests: + go test -v ./tests \ No newline at end of file diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..6fe5e65 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,8 @@ +coverage: + status: + project: + default: + target: 90% + patch: + default: + target: 90% \ No newline at end of file diff --git a/paginator.go b/paginator.go index 205631a..9b9071c 100644 --- a/paginator.go +++ b/paginator.go @@ -28,30 +28,30 @@ func NewPaginator() *Paginator { } } -func (p *Paginator) setPage(page int) *Paginator { +func (p *Paginator) SetPage(page int) *Paginator { p.page = page return p } -func (p *Paginator) getPage() int { +func (p *Paginator) GetPage() int { return p.page } -func (p *Paginator) getFirstPage() int { +func (p *Paginator) GetFirstPage() int { return p.base } -func (p *Paginator) getLastPage() *int { - if p.getItemCount() == nil { +func (p *Paginator) GetLastPage() *int { + if p.GetItemCount() == nil { return nil } - lastPage := p.base + getLastPage(p) - 1 + lastPage := p.base + GetLastPage(p) - 1 return &lastPage } -func (p *Paginator) getFirstItemOnPage() int { - if *p.getItemCount() != 0 { +func (p *Paginator) GetFirstItemOnPage() int { + if *p.GetItemCount() != 0 { i := p.offset + 1 return i } @@ -59,61 +59,61 @@ func (p *Paginator) getFirstItemOnPage() int { return 0 } -func (p *Paginator) getLastItemOnPage() int { +func (p *Paginator) GetLastItemOnPage() int { return p.offset + p.length } -func (p *Paginator) setBase(base int) *Paginator { +func (p *Paginator) SetBase(base int) *Paginator { p.base = base return p } -func (p *Paginator) getBase() int { +func (p *Paginator) GetBase() int { return p.base } -func (p *Paginator) getPageIndex() int { +func (p *Paginator) GetPageIndex() int { index := math.Max(0, float64(p.page-p.base)) - if p.getItemCount() == nil { + if p.GetItemCount() == nil { return int(index) } - return int(math.Min(index, math.Max(0, float64(*p.getPageCount()-1)))) + return int(math.Min(index, math.Max(0, float64(*p.GetPageCount()-1)))) } -func (p *Paginator) isFirst() bool { - return p.getPageIndex() == 0 +func (p *Paginator) IsFirst() bool { + return p.GetPageIndex() == 0 } -func (p *Paginator) isLast() bool { - if p.getItemCount() == nil { +func (p *Paginator) IsLast() bool { + if p.GetItemCount() == nil { return false } - return p.getPageIndex() >= *p.getPageCount()-1 + return p.GetPageIndex() >= *p.GetPageCount()-1 } -func (p *Paginator) getPageCount() *int { - if p.getItemCount() == nil { +func (p *Paginator) GetPageCount() *int { + if p.GetItemCount() == nil { return nil } - count := getLastPage(p) + count := GetLastPage(p) return &count } -func (p *Paginator) setItemsPerPage(itemsPerPage int) *Paginator { +func (p *Paginator) SetItemsPerPage(itemsPerPage int) *Paginator { p.itemsPerPage = max(1, itemsPerPage) return p } -func (p *Paginator) getItemsPerPage() int { +func (p *Paginator) GetItemsPerPage() int { return p.itemsPerPage } -func (p *Paginator) setItemCount(itemCount int) *Paginator { +func (p *Paginator) SetItemCount(itemCount int) *Paginator { if itemCount < 0 { itemCount = 0 } @@ -122,32 +122,32 @@ func (p *Paginator) setItemCount(itemCount int) *Paginator { return p } -func (p *Paginator) getItemCount() *int { +func (p *Paginator) GetItemCount() *int { return p.itemCount } -func (p *Paginator) getOffset() int { - return p.getPageIndex() * p.getItemsPerPage() +func (p *Paginator) GetOffset() int { + return p.GetPageIndex() * p.GetItemsPerPage() } -func (p *Paginator) getCountdownOffset() *int { - if p.getItemCount() == nil { +func (p *Paginator) GetCountdownOffset() *int { + if p.GetItemCount() == nil { return nil } - val := max(0, *p.getItemCount()-(p.getPageIndex()-1)*p.getItemsPerPage()) + val := max(0, *p.GetItemCount()-(p.GetPageIndex()-1)*p.GetItemsPerPage()) return &val } -func (p *Paginator) getLength() int { +func (p *Paginator) GetLength() int { - if p.getItemCount() == nil { - return p.getItemsPerPage() + if p.GetItemCount() == nil { + return p.GetItemsPerPage() } - val := min(p.getItemsPerPage(), *p.getItemCount()-p.getPageIndex()*p.getItemsPerPage()) + val := min(p.GetItemsPerPage(), *p.GetItemCount()-p.GetPageIndex()*p.GetItemsPerPage()) return val } -func getLastPage(paginator *Paginator) int { - return int(math.Ceil(float64(*paginator.getItemCount()) / float64(paginator.itemsPerPage))) +func GetLastPage(paginator *Paginator) int { + return int(math.Ceil(float64(*paginator.GetItemCount()) / float64(paginator.itemsPerPage))) } diff --git a/paginator_test.go b/paginator_test.go deleted file mode 100644 index 27e93b0..0000000 --- a/paginator_test.go +++ /dev/null @@ -1,141 +0,0 @@ -package paginator - -import ( - "github.com/stretchr/testify/assert" - "testing" -) - -func test1(t *testing.T) { - paginator := NewPaginator() - paginator.setItemCount(7) - paginator.itemsPerPage = 6 - paginator.base = 0 - paginator.page = 3 - assert.Same(t, 1, paginator.page) - assert.Same(t, 2, paginator.pageCount) - assert.Same(t, 0, paginator.firstPage) - assert.Same(t, 1, paginator.lastPage) - assert.Same(t, 7, paginator.firstItemOnPage) - assert.Same(t, 7, paginator.lastItemOnPage) - assert.Same(t, 6, paginator.offset) - assert.Same(t, 0, paginator.countdownOffset) - assert.Same(t, 1, paginator.length) -} - -func test2(t *testing.T) { - paginator := NewPaginator() - paginator.setItemCount(7) - paginator.itemsPerPage = 6 - paginator.base = 0 - paginator.page = -1 - - assert.Same(t, 0, paginator.page) - assert.Same(t, 1, paginator.firstItemOnPage) - assert.Same(t, 6, paginator.lastItemOnPage) - assert.Same(t, 0, paginator.offset) - assert.Same(t, 1, paginator.countdownOffset) - assert.Same(t, 6, paginator.length) -} - -func test3(t *testing.T) { - paginator := NewPaginator() - paginator.setItemCount(7) - paginator.itemsPerPage = 7 - paginator.base = 0 - paginator.page = -1 - - assert.Same(t, 0, paginator.page) - assert.Same(t, 1, paginator.pageCount) - assert.Same(t, 0, paginator.firstPage) - assert.Same(t, 0, paginator.lastPage) - assert.Same(t, 1, paginator.firstItemOnPage) - assert.Same(t, 7, paginator.lastItemOnPage) - assert.Same(t, 0, paginator.offset) - assert.Same(t, 0, paginator.countdownOffset) - assert.Same(t, 7, paginator.length) -} - -func test4(t *testing.T) { - paginator := NewPaginator() - paginator.setItemCount(-1) - paginator.itemsPerPage = 7 - paginator.base = 0 - paginator.page = -1 - - assert.Same(t, 0, paginator.page) - assert.Same(t, 0, paginator.pageCount) - assert.Same(t, 0, paginator.firstPage) - assert.Same(t, 0, paginator.lastPage) - assert.Same(t, 0, paginator.firstItemOnPage) - assert.Same(t, 0, paginator.lastItemOnPage) - assert.Same(t, 0, paginator.offset) - assert.Same(t, 0, paginator.countdownOffset) - assert.Same(t, 0, paginator.length) -} - -func test5(t *testing.T) { - paginator := NewPaginator() - paginator.setItemCount(7) - paginator.itemsPerPage = 6 - paginator.base = 1 - paginator.page = 3 - - assert.Same(t, 2, paginator.page) - assert.Same(t, 2, paginator.pageCount) - assert.Same(t, 1, paginator.firstPage) - assert.Same(t, 2, paginator.lastPage) - assert.Same(t, 7, paginator.firstItemOnPage) - assert.Same(t, 7, paginator.lastItemOnPage) - assert.Same(t, 6, paginator.offset) - assert.Same(t, 0, paginator.countdownOffset) - assert.Same(t, 1, paginator.length) -} - -func test6(t *testing.T) { - paginator := NewPaginator() - - // ItemCount: 0 - paginator.setItemCount(0) - assert.True(t, paginator.isFirst()) - assert.True(t, paginator.isLast()) - assert.Same(t, 0, paginator.firstItemOnPage) - assert.Same(t, 0, paginator.lastItemOnPage) - - // ItemCount: 1 - paginator.setItemCount(1) - assert.True(t, paginator.isFirst()) - assert.True(t, paginator.isLast()) - assert.Same(t, 1, paginator.firstItemOnPage) - assert.Same(t, 1, paginator.lastItemOnPage) - - // ItemCount: 2 - paginator.setItemCount(2) - assert.True(t, paginator.isFirst()) - assert.False(t, paginator.isLast()) - assert.Same(t, 1, paginator.firstItemOnPage) - assert.Same(t, 1, paginator.lastItemOnPage) - - // Page 2 - paginator.setPage(2) - assert.False(t, paginator.isFirst()) - assert.True(t, paginator.isLast()) - assert.Same(t, 2, paginator.firstItemOnPage) - assert.Same(t, 2, paginator.lastItemOnPage) -} - -func test7(t *testing.T) { - paginator := NewPaginator() - paginator.itemsPerPage = 6 - paginator.base = 0 - paginator.page = 3 - - assert.Same(t, 3, paginator.page) - assert.Nil(t, paginator.pageCount) - assert.Same(t, 0, paginator.firstPage) - assert.Nil(t, paginator.lastPage) - assert.Same(t, 19, paginator.firstItemOnPage) - assert.Same(t, 24, paginator.lastItemOnPage) - assert.Same(t, 18, paginator.offset) - assert.Nil(t, paginator.countdownOffset) - assert.Same(t, 6, paginator.length) -} diff --git a/tests/paginator_test.go b/tests/paginator_test.go new file mode 100644 index 0000000..20bc48c --- /dev/null +++ b/tests/paginator_test.go @@ -0,0 +1,142 @@ +package tests + +import ( + paginator2 "github.com/gouef/paginator" + "github.com/stretchr/testify/assert" + "testing" +) + +func test1(t *testing.T) { + paginator := paginator2.NewPaginator() + paginator.SetItemCount(7) + paginator.SetItemsPerPage(6) + paginator.SetBase(0) + paginator.SetPage(3) + assert.Same(t, 1, paginator.GetPage()) + assert.Same(t, 2, paginator.GetPageCount()) + assert.Same(t, 0, paginator.GetFirstPage()) + assert.Same(t, 1, paginator.GetLastPage()) + assert.Same(t, 7, paginator.GetFirstItemOnPage()) + assert.Same(t, 7, paginator.GetLastItemOnPage()) + assert.Same(t, 6, paginator.GetOffset()) + assert.Same(t, 0, paginator.GetCountdownOffset()) + assert.Same(t, 1, paginator.GetLength()) +} + +func test2(t *testing.T) { + paginator := paginator2.NewPaginator() + paginator.SetItemCount(7) + paginator.SetItemsPerPage(6) + paginator.SetBase(0) + paginator.SetPage(-1) + + assert.Same(t, 0, paginator.GetPage()) + assert.Same(t, 1, paginator.GetFirstItemOnPage()) + assert.Same(t, 6, paginator.GetLastItemOnPage()) + assert.Same(t, 0, paginator.GetOffset()) + assert.Same(t, 1, paginator.GetCountdownOffset()) + assert.Same(t, 6, paginator.GetLength()) +} + +func test3(t *testing.T) { + paginator := paginator2.NewPaginator() + paginator.SetItemCount(7) + paginator.SetItemsPerPage(7) + paginator.SetBase(0) + paginator.SetPage(-1) + + assert.Same(t, 0, paginator.GetPage()) + assert.Same(t, 1, paginator.GetPageCount()) + assert.Same(t, 0, paginator.GetFirstPage()) + assert.Same(t, 0, paginator.GetLastPage()) + assert.Same(t, 1, paginator.GetFirstItemOnPage()) + assert.Same(t, 7, paginator.GetLastItemOnPage()) + assert.Same(t, 0, paginator.GetOffset()) + assert.Same(t, 0, paginator.GetCountdownOffset()) + assert.Same(t, 7, paginator.GetLength()) +} + +func test4(t *testing.T) { + paginator := paginator2.NewPaginator() + paginator.SetItemCount(-1) + paginator.SetItemsPerPage(7) + paginator.SetBase(0) + paginator.SetPage(-1) + + assert.Same(t, 0, paginator.GetPage()) + assert.Same(t, 0, paginator.GetPageCount()) + assert.Same(t, 0, paginator.GetFirstPage()) + assert.Same(t, 0, paginator.GetLastPage()) + assert.Same(t, 0, paginator.GetFirstItemOnPage()) + assert.Same(t, 0, paginator.GetLastItemOnPage()) + assert.Same(t, 0, paginator.GetOffset()) + assert.Same(t, 0, paginator.GetCountdownOffset()) + assert.Same(t, 0, paginator.GetLength()) +} + +func test5(t *testing.T) { + paginator := paginator2.NewPaginator() + paginator.SetItemCount(7) + paginator.SetItemsPerPage(6) + paginator.SetBase(1) + paginator.SetPage(3) + + assert.Same(t, 2, paginator.GetPage()) + assert.Same(t, 2, paginator.GetPageCount()) + assert.Same(t, 1, paginator.GetFirstPage()) + assert.Same(t, 2, paginator.GetLastPage()) + assert.Same(t, 7, paginator.GetFirstItemOnPage()) + assert.Same(t, 7, paginator.GetLastItemOnPage()) + assert.Same(t, 6, paginator.GetOffset()) + assert.Same(t, 0, paginator.GetCountdownOffset()) + assert.Same(t, 1, paginator.GetLength()) +} + +func test6(t *testing.T) { + paginator := paginator2.NewPaginator() + + // ItemCount: 0 + paginator.SetItemCount(0) + assert.True(t, paginator.IsFirst()) + assert.True(t, paginator.IsLast()) + assert.Same(t, 0, paginator.GetFirstItemOnPage()) + assert.Same(t, 0, paginator.GetLastItemOnPage()) + + // ItemCount: 1 + paginator.SetItemCount(1) + assert.True(t, paginator.IsFirst()) + assert.True(t, paginator.IsLast()) + assert.Same(t, 1, paginator.GetFirstItemOnPage()) + assert.Same(t, 1, paginator.GetLastItemOnPage()) + + // ItemCount: 2 + paginator.SetItemCount(2) + assert.True(t, paginator.IsFirst()) + assert.False(t, paginator.IsLast()) + assert.Same(t, 1, paginator.GetFirstItemOnPage()) + assert.Same(t, 1, paginator.GetLastItemOnPage()) + + // Page 2 + paginator.SetPage(2) + assert.False(t, paginator.IsFirst()) + assert.True(t, paginator.IsLast()) + assert.Same(t, 2, paginator.GetFirstItemOnPage()) + assert.Same(t, 2, paginator.GetLastItemOnPage()) +} + +func test7(t *testing.T) { + paginator := paginator2.NewPaginator() + paginator.SetItemsPerPage(6) + paginator.SetBase(0) + paginator.SetPage(3) + + assert.Same(t, 3, paginator.GetPage()) + assert.Nil(t, paginator.GetPageCount()) + assert.Same(t, 0, paginator.GetFirstPage()) + assert.Nil(t, paginator.GetLastPage()) + assert.Same(t, 19, paginator.GetFirstItemOnPage()) + assert.Same(t, 24, paginator.GetLastItemOnPage()) + assert.Same(t, 18, paginator.GetOffset()) + assert.Nil(t, paginator.GetCountdownOffset()) + assert.Same(t, 6, paginator.GetLength()) +}