feat(clientcache): Implement sorting in targets repository (#6346)

pull/6383/head
Emilia Grant 3 months ago committed by Sepehr
parent 2e9623d462
commit 4c49331753

@ -373,8 +373,18 @@ func (r *Repository) searchTargets(ctx context.Context, condition string, search
searchArgs = append(searchArgs, opts.withUserId)
}
dbOpts := []db.Option{db.WithLimit(opts.withMaxResultSetSize + 1)}
if opts.withSortBy != "" {
sd := opts.withSortDirection
if sd != Ascending && sd != Descending {
sd = Ascending
}
orderClause := fmt.Sprintf("%s %s", opts.withSortBy, sd)
dbOpts = append(dbOpts, db.WithOrder(orderClause))
}
var cachedTargets []*Target
if err := r.rw.SearchWhere(ctx, &cachedTargets, condition, searchArgs, db.WithLimit(opts.withMaxResultSetSize+1)); err != nil {
if err := r.rw.SearchWhere(ctx, &cachedTargets, condition, searchArgs, dbOpts...); err != nil {
return nil, errors.Wrap(ctx, err, op)
}

@ -358,6 +358,27 @@ func TestRepository_ListTargets(t *testing.T) {
assert.Len(t, l.Targets, len(ts))
assert.ElementsMatch(t, l.Targets, ts)
})
t.Run("withSortBy sorts targets", func(t *testing.T) {
l, err := r.ListTargets(ctx, kt1.AuthTokenId, WithSort(SortByName, Descending, []SortBy{SortByName}))
assert.NoError(t, err)
assert.Equal(t, ts[2].Name, l.Targets[0].Name)
assert.Equal(t, ts[1].Name, l.Targets[1].Name)
assert.Equal(t, ts[0].Name, l.Targets[2].Name)
})
t.Run("withSortBy bad SortBy errors", func(t *testing.T) {
_, err := r.ListTargets(ctx, kt1.AuthTokenId, WithSort(SortByCreatedTime, Descending, []SortBy{SortByName}))
assert.Error(t, err)
})
t.Run("withSortBy bad SortDirection defaults to Ascending", func(t *testing.T) {
l, err := r.ListTargets(ctx, kt1.AuthTokenId, WithSort(SortByName, "Something else", []SortBy{SortByName}))
assert.NoError(t, err)
assert.Equal(t, ts[0].Name, l.Targets[0].Name)
assert.Equal(t, ts[1].Name, l.Targets[1].Name)
assert.Equal(t, ts[2].Name, l.Targets[2].Name)
})
}
func TestRepository_ListTargetsLimiting(t *testing.T) {
@ -525,6 +546,25 @@ func TestRepository_QueryTargets(t *testing.T) {
assert.Len(t, l.Targets, 2)
assert.ElementsMatch(t, l.Targets, ts[0:2])
})
t.Run("withSortBy sorts targets", func(t *testing.T) {
l, err := r.QueryTargets(ctx, kt1.AuthTokenId, query, WithSort(SortByName, Descending, []SortBy{SortByName}))
assert.NoError(t, err)
assert.Equal(t, ts[1].Name, l.Targets[0].Name)
assert.Equal(t, ts[0].Name, l.Targets[1].Name)
})
t.Run("withSortBy bad SortBy errors", func(t *testing.T) {
_, err := r.QueryTargets(ctx, kt1.AuthTokenId, query, WithSort(SortByCreatedTime, Descending, []SortBy{SortByName}))
assert.Error(t, err)
})
t.Run("withSortBy bad SortDirection defaults to Ascending", func(t *testing.T) {
l, err := r.QueryTargets(ctx, kt1.AuthTokenId, query, WithSort(SortByName, "Something else", []SortBy{SortByName}))
assert.NoError(t, err)
assert.Equal(t, ts[0].Name, l.Targets[0].Name)
assert.Equal(t, ts[1].Name, l.Targets[1].Name)
})
}
func TestRepository_QueryTargetsLimiting(t *testing.T) {

Loading…
Cancel
Save