mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2025-12-06 15:22:47 +01:00
98 lines
2.0 KiB
Go
98 lines
2.0 KiB
Go
package database
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestPaginate_AllPages(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
calls := 0
|
|
err := Paginate(t.Context(), func(_ context.Context, _, _ int64) (bool, error) {
|
|
calls++
|
|
if calls < 3 {
|
|
return true, nil
|
|
}
|
|
|
|
return false, nil
|
|
})
|
|
require.NoError(t, err, "expected no error")
|
|
assert.Equal(t, 3, calls, "expected 3 calls")
|
|
}
|
|
|
|
func TestPaginate_EarlyStop(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
calls := 0
|
|
err := Paginate(t.Context(), func(_ context.Context, _, _ int64) (bool, error) {
|
|
calls++
|
|
|
|
return false, nil
|
|
})
|
|
require.NoError(t, err, "expected no error")
|
|
assert.Equal(t, 1, calls, "expected 1 call")
|
|
}
|
|
|
|
func TestPaginate_Error(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
errTest := errors.New("fail")
|
|
err := Paginate(t.Context(), func(_ context.Context, _, _ int64) (bool, error) {
|
|
return false, errTest
|
|
})
|
|
assert.ErrorIs(t, err, errTest, "expected error")
|
|
}
|
|
|
|
func TestPaginate_NoRows(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
err := Paginate(t.Context(), func(_ context.Context, _, _ int64) (bool, error) {
|
|
return false, sql.ErrNoRows
|
|
})
|
|
require.NoError(t, err, "expected no error")
|
|
}
|
|
|
|
func TestPaginateItems(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
calls := 0
|
|
f := func(_ context.Context, offset, _ int64) ([]int, error) {
|
|
calls++
|
|
|
|
if offset >= 100 {
|
|
return nil, sql.ErrNoRows
|
|
}
|
|
|
|
return []int{1}, nil
|
|
}
|
|
items, err := PaginateItems(t.Context(), f)
|
|
require.NoError(t, err, "expected no error")
|
|
assert.Equal(t, []int{1}, items, "expected items to match")
|
|
assert.Equal(t, 2, calls, "expected 2 calls")
|
|
}
|
|
|
|
func TestPaginateItemsLarge(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
calls := 0
|
|
f := func(_ context.Context, offset, _ int64) ([]int, error) {
|
|
calls++
|
|
|
|
if offset >= 200 {
|
|
return nil, sql.ErrNoRows
|
|
}
|
|
|
|
return []int{1}, nil
|
|
}
|
|
items, err := PaginateItems(t.Context(), f)
|
|
require.NoError(t, err, "expected no error")
|
|
assert.Equal(t, []int{1, 1}, items, "expected items to match")
|
|
assert.Equal(t, 3, calls, "expected 3 calls")
|
|
}
|