diff --git a/store/tests/actionlog_test.go b/store/tests/actionlog_test.go index 7129d1f28..873ed7a6a 100644 --- a/store/tests/actionlog_test.go +++ b/store/tests/actionlog_test.go @@ -2,26 +2,27 @@ package tests import ( "context" + "strconv" + "strings" + "testing" + "time" + "github.com/cortezaproject/corteza-server/pkg/actionlog" - "github.com/cortezaproject/corteza-server/pkg/id" "github.com/cortezaproject/corteza-server/pkg/rand" "github.com/cortezaproject/corteza-server/store" _ "github.com/joho/godotenv/autoload" "github.com/stretchr/testify/require" - "strings" - "testing" - "time" ) func testActionlog(t *testing.T, s store.Actionlogs) { var ( ctx = context.Background() - makeNew = func(dd ...string) *actionlog.Action { + makeNew = func(id uint64, dd ...string) *actionlog.Action { // minimum data set for new user desc := strings.Join(dd, "") return &actionlog.Action{ - ID: id.Next(), + ID: id, Timestamp: *now(), Action: "test-action", Resource: "test-resource", @@ -29,6 +30,20 @@ func testActionlog(t *testing.T, s store.Actionlogs) { } } + stringifySetRange = func(set actionlog.ActionSet) string { + if len(set) == 0 { + return "" + } + + var out = strconv.FormatUint(set[0].ID, 10) + + if len(set) > 1 { + out += ".." + strconv.FormatUint(set[len(set)-1].ID, 10) + } + + return out + } + truncAndFill = func(t *testing.T, l int) (*require.Assertions, actionlog.ActionSet) { req := require.New(t) req.NoError(s.TruncateActionlogs(ctx)) @@ -36,7 +51,7 @@ func testActionlog(t *testing.T, s store.Actionlogs) { set := make([]*actionlog.Action, l) for i := 0; i < l; i++ { - set[i] = makeNew(string(rand.Bytes(10))) + set[i] = makeNew(uint64(i), string(rand.Bytes(10))) } req.NoError(s.CreateActionlog(ctx, set...)) @@ -74,4 +89,89 @@ func testActionlog(t *testing.T, s store.Actionlogs) { }) }) + t.Run("with keyed paging", func(t *testing.T) { + req := require.New(t) + req.NoError(s.TruncateActionlogs(ctx)) + + set := []*actionlog.Action{ + makeNew(1, "01"), + makeNew(2, "02"), + makeNew(3, "03"), + makeNew(4, "04"), + makeNew(5, "05"), + makeNew(6, "06"), + makeNew(7, "07"), + makeNew(8, "08"), + makeNew(9, "09"), + makeNew(10, "10"), + } + + req.NoError(s.CreateActionlog(ctx, set...)) + f := actionlog.Filter{} + + // Fetch first page + f.Limit = 3 + set, f, err := store.SearchActionlogs(ctx, s, f) + req.NoError(err) + req.Len(set, 3) + req.NotNil(f.NextPage) + req.Nil(f.PrevPage) + req.Equal("10..8", stringifySetRange(set)) + + // 2nd page + f.Limit = 6 + f.PageCursor = f.NextPage + set, f, err = store.SearchActionlogs(ctx, s, f) + req.NoError(err) + req.Len(set, 6) + req.NotNil(f.NextPage) + req.NotNil(f.PrevPage) + req.Equal("7..2", stringifySetRange(set)) + + // 3rd, last page (1 item left) + f.Limit = 2 + f.PageCursor = f.NextPage + set, f, err = store.SearchActionlogs(ctx, s, f) + req.NoError(err) + req.Len(set, 1) + req.NotNil(f.NextPage) + req.NotNil(f.PrevPage) + req.Equal("1", stringifySetRange(set)) + + // try and go pass the last page + f.PageCursor = f.NextPage + set, _, err = store.SearchActionlogs(ctx, s, f) + req.NoError(err) + req.Len(set, 0) + + // now, in reverse, last 3 items + f.Limit = 3 + f.PageCursor = f.PrevPage + set, f, err = store.SearchActionlogs(ctx, s, f) + req.NoError(err) + req.Len(set, 3) + req.NotNil(f.NextPage) + req.NotNil(f.PrevPage) + req.Equal("3..1", stringifySetRange(set)) + + // still in reverse, next 6 items + f.Limit = 5 + f.PageCursor = f.PrevPage + set, f, err = store.SearchActionlogs(ctx, s, f) + req.NoError(err) + req.Len(set, 5) + req.NotNil(f.NextPage) + req.NotNil(f.PrevPage) + req.Equal("9..4", stringifySetRange(set)) + + // still in reverse, last 5 items (actually, we'll only get 1) + f.Limit = 5 + f.PageCursor = f.PrevPage + set, f, err = store.SearchActionlogs(ctx, s, f) + req.NoError(err) + req.Len(set, 1) + req.Nil(f.PrevPage) + req.NotNil(f.NextPage) + req.Equal("10", stringifySetRange(set)) + }) } diff --git a/store/tests/users_test.go b/store/tests/users_test.go index ae1136764..0e5b5c60a 100644 --- a/store/tests/users_test.go +++ b/store/tests/users_test.go @@ -261,7 +261,7 @@ func testUsers(t *testing.T, s store.Users) { req.NotNil(f.PrevPage) req.Equal("07..09", stringifySetRange(set)) - // still in reverse, next 6 items + // still in reverse, next 5 items f.Limit = 5 f.PageCursor = f.PrevPage set, f, err = store.SearchUsers(ctx, s, f)