change targets sorted by name to sort case insensitive

pull/6428/head
Emilia Grant 6 days ago
parent f01cd7019b
commit b0a3263f8a
No known key found for this signature in database
GPG Key ID: D9E8C34EA15838F6

@ -379,7 +379,18 @@ func (r *Repository) searchTargets(ctx context.Context, condition string, search
if sd != Ascending && sd != Descending {
sd = Ascending
}
orderClause := fmt.Sprintf("%s %s", opts.withSortBy, sd)
// Sorting by name requires doing case insensitive, then tie-breaking with case sensitive to put names which were
// originally capitalized first. To avoid weird behavior when adding new columns, break sort by name's case
// out separately.
orderClause := ""
switch opts.withSortBy {
case "name":
orderClause = fmt.Sprintf("lower(%s) %s, %s %s", opts.withSortBy, sd, opts.withSortBy, sd)
default:
orderClause = fmt.Sprintf("%s %s", opts.withSortBy, sd)
}
dbOpts = append(dbOpts, db.WithOrder(orderClause))
}

@ -6,6 +6,7 @@ package cache
import (
"context"
"encoding/json"
"fmt"
"strconv"
"sync"
"testing"
@ -340,9 +341,11 @@ func TestRepository_ListTargets(t *testing.T) {
})
ts := []*targets.Target{
target("1"),
target("2"),
target("3"),
target("TARGET 1"),
target("Target 1"),
target("TaRgEt 2"),
target("Target 2"),
target("Target 3"),
}
require.NoError(t, r.refreshTargets(ctx, u1, map[AuthToken]string{{Id: "id"}: "something"},
WithTargetRetrievalFunc(testTargetStaticResourceRetrievalFunc(testStaticResourceRetrievalFunc(t, [][]*targets.Target{ts}, [][]string{nil})))))
@ -362,9 +365,25 @@ func TestRepository_ListTargets(t *testing.T) {
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[4].Name, l.Targets[0].Name)
assert.Equal(t, ts[3].Name, l.Targets[1].Name)
assert.Equal(t, ts[2].Name, l.Targets[2].Name)
assert.Equal(t, ts[1].Name, l.Targets[3].Name)
assert.Equal(t, ts[0].Name, l.Targets[4].Name)
})
t.Run("withSortBy Ascending sorts targets ascending order", func(t *testing.T) {
l, err := r.ListTargets(ctx, kt1.AuthTokenId, WithSort(SortByName, Ascending, []SortBy{SortByName}))
assert.NoError(t, err)
for _, t := range l.Targets {
fmt.Println(t.Name)
}
assert.Equal(t, ts[4].Name, l.Targets[4].Name)
assert.Equal(t, ts[3].Name, l.Targets[3].Name)
assert.Equal(t, ts[2].Name, l.Targets[2].Name)
assert.Equal(t, ts[1].Name, l.Targets[1].Name)
assert.Equal(t, ts[0].Name, l.Targets[2].Name)
assert.Equal(t, ts[0].Name, l.Targets[0].Name)
})
t.Run("withSortBy bad SortBy errors", func(t *testing.T) {

Loading…
Cancel
Save