package pagination import ( "testing" ) func TestDefaultPagination(t *testing.T) { p := DefaultPagination() if p.Page != 1 { t.Errorf("expected default page 1, got %d", p.Page) } if p.PageSize != 20 { t.Errorf("expected default page_size 20, got %d", p.PageSize) } } func TestPaginationParams_Offset(t *testing.T) { tests := []struct { name string page int pageSize int wantOffset int }{ {"page 1", 1, 20, 0}, {"page 2", 2, 20, 20}, {"page 5", 5, 20, 80}, {"zero page", 0, 20, 0}, {"negative page", -1, 20, 0}, {"page 1 size 10", 1, 10, 0}, {"page 3 size 10", 3, 10, 20}, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { p := PaginationParams{Page: tc.page, PageSize: tc.pageSize} if got := p.Offset(); got != tc.wantOffset { t.Errorf("expected offset %d, got %d", tc.wantOffset, got) } }) } } func TestPaginationParams_Limit(t *testing.T) { tests := []struct { name string pageSize int want int }{ {"default", 20, 20}, {"size 10", 10, 10}, {"size 50", 50, 50}, {"size 100", 100, 100}, {"max cap", 101, 100}, {"zero size", 0, 20}, {"negative size", -1, 20}, {"size 1", 1, 1}, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { p := PaginationParams{PageSize: tc.pageSize} if got := p.Limit(); got != tc.want { t.Errorf("expected limit %d, got %d", tc.want, got) } }) } } func TestPaginationParams_OffsetAndLimit(t *testing.T) { p := PaginationParams{Page: 3, PageSize: 15} if got := p.Offset(); got != 30 { t.Errorf("expected offset 30, got %d", got) } if got := p.Limit(); got != 15 { t.Errorf("expected limit 15, got %d", got) } }