package pagination import ( "testing" "github.com/stretchr/testify/require" ) func TestDefaultPagination(t *testing.T) { p := DefaultPagination() require.Equal(t, 1, p.Page) require.Equal(t, 20, p.PageSize) } func TestPaginationParams_Offset(t *testing.T) { tests := []struct { name string page int pageSize int want int }{ {"page_1", 1, 20, 0}, {"page_2", 2, 20, 20}, {"page_10", 10, 20, 180}, {"zero_page", 0, 20, 0}, // < 1 defaults to 1 {"negative_page", -1, 20, 0}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { p := PaginationParams{Page: tt.page, PageSize: tt.pageSize} require.Equal(t, tt.want, p.Offset()) }) } } func TestPaginationParams_Limit(t *testing.T) { tests := []struct { name string pageSize int want int }{ {"default_20", 20, 20}, {"valid_50", 50, 50}, {"max_100", 100, 100}, {"exceed_max_150", 150, 100}, // capped at 100 {"zero_size", 0, 20}, // < 1 defaults to 20 {"negative_size", -5, 20}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { p := PaginationParams{Page: 1, PageSize: tt.pageSize} require.Equal(t, tt.want, p.Limit()) }) } } func TestPaginationResult_Fields(t *testing.T) { result := PaginationResult{ Total: 100, Page: 2, PageSize: 20, Pages: 5, } require.Equal(t, int64(100), result.Total) require.Equal(t, 2, result.Page) require.Equal(t, 20, result.PageSize) require.Equal(t, 5, result.Pages) }