96 lines
2.2 KiB
Go
96 lines
2.2 KiB
Go
package repository
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/user-management-system/internal/pkg/pagination"
|
|
)
|
|
|
|
func TestPaginationResultFromTotal(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
total int64
|
|
params pagination.PaginationParams
|
|
wantPages int
|
|
wantTotal int64
|
|
wantPage int
|
|
wantPageSize int
|
|
}{
|
|
{
|
|
name: "exact division",
|
|
total: 100,
|
|
params: pagination.PaginationParams{Page: 1, PageSize: 20},
|
|
wantPages: 5,
|
|
wantTotal: 100,
|
|
wantPage: 1,
|
|
wantPageSize: 20,
|
|
},
|
|
{
|
|
name: "with remainder",
|
|
total: 105,
|
|
params: pagination.PaginationParams{Page: 1, PageSize: 20},
|
|
wantPages: 6,
|
|
wantTotal: 105,
|
|
wantPage: 1,
|
|
wantPageSize: 20,
|
|
},
|
|
{
|
|
name: "zero total",
|
|
total: 0,
|
|
params: pagination.PaginationParams{Page: 1, PageSize: 20},
|
|
wantPages: 0,
|
|
wantTotal: 0,
|
|
wantPage: 1,
|
|
wantPageSize: 20,
|
|
},
|
|
{
|
|
name: "single page",
|
|
total: 5,
|
|
params: pagination.PaginationParams{Page: 1, PageSize: 20},
|
|
wantPages: 1,
|
|
wantTotal: 5,
|
|
wantPage: 1,
|
|
wantPageSize: 20,
|
|
},
|
|
{
|
|
name: "page 2",
|
|
total: 50,
|
|
params: pagination.PaginationParams{Page: 2, PageSize: 20},
|
|
wantPages: 3,
|
|
wantTotal: 50,
|
|
wantPage: 2,
|
|
wantPageSize: 20,
|
|
},
|
|
{
|
|
name: "small page size",
|
|
total: 10,
|
|
params: pagination.PaginationParams{Page: 1, PageSize: 3},
|
|
wantPages: 4,
|
|
wantTotal: 10,
|
|
wantPage: 1,
|
|
wantPageSize: 3,
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
result := paginationResultFromTotal(tc.total, tc.params)
|
|
if result == nil {
|
|
t.Fatal("expected non-nil result")
|
|
}
|
|
if result.Total != tc.wantTotal {
|
|
t.Errorf("expected total %d, got %d", tc.wantTotal, result.Total)
|
|
}
|
|
if result.Page != tc.wantPage {
|
|
t.Errorf("expected page %d, got %d", tc.wantPage, result.Page)
|
|
}
|
|
if result.PageSize != tc.wantPageSize {
|
|
t.Errorf("expected page_size %d, got %d", tc.wantPageSize, result.PageSize)
|
|
}
|
|
if result.Pages != tc.wantPages {
|
|
t.Errorf("expected pages %d, got %d", tc.wantPages, result.Pages)
|
|
}
|
|
})
|
|
}
|
|
}
|