Skip to content

Commit 0d16a02

Browse files
Add field mapping in sort too
Signed-off-by: Peter Broadhurst <peter.broadhurst@kaleido.io>
1 parent d3f3b75 commit 0d16a02

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

pkg/ffapi/restfilter_json.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,19 @@ func (jq *QueryJSON) BuildFilter(ctx context.Context, qf QueryFactory, options .
178178
if jq.Limit != nil {
179179
fb = fb.Limit(*jq.Limit)
180180
}
181-
for _, s := range jq.Sort {
182-
fb = fb.Sort(s)
181+
if len(jq.Sort) > 0 {
182+
rv := buildResolveCtx(ctx, &jq.FilterJSON, options...)
183+
for _, field := range jq.Sort {
184+
field, isDesc := strings.CutPrefix(field, "-")
185+
field, err := validateFilterField(ctx, fb, field, rv)
186+
if err != nil {
187+
return nil, err
188+
}
189+
if isDesc {
190+
field = "-" + field
191+
}
192+
fb = fb.Sort(field)
193+
}
183194
}
184195
return (&jq.FilterJSON).BuildSubFilter(ctx, fb, options...)
185196
}

pkg/ffapi/restfilter_json_test.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"testing"
2525

2626
"github.com/stretchr/testify/assert"
27+
"github.com/stretchr/testify/require"
2728
)
2829

2930
func TestBuildQueryJSONNestedAndOr(t *testing.T) {
@@ -167,6 +168,7 @@ func TestBuildQuerySingleNestedWithResolverOk(t *testing.T) {
167168

168169
var qf QueryJSON
169170
err := json.Unmarshal([]byte(`{
171+
"sort": ["-created"],
170172
"or": [
171173
{
172174
"equal": [
@@ -199,7 +201,7 @@ func TestBuildQuerySingleNestedWithResolverOk(t *testing.T) {
199201
fi, err := filter.Finalize()
200202
assert.NoError(t, err)
201203

202-
assert.Equal(t, "tag.resolved == 'b'", fi.String())
204+
assert.Equal(t, "tag.resolved == 'b' sort=-created.resolved", fi.String())
203205
}
204206

205207
func TestBuildQuerySingleNestedWithResolverError(t *testing.T) {
@@ -228,6 +230,21 @@ func TestBuildQuerySingleNestedWithResolverError(t *testing.T) {
228230
assert.Regexp(t, "pop", err)
229231
}
230232

233+
func TestBuildQuerySingleNestedWithFieldResolverError(t *testing.T) {
234+
235+
var qf QueryJSON
236+
err := json.Unmarshal([]byte(`{
237+
"sort": ["wrong"]
238+
}`), &qf)
239+
assert.NoError(t, err)
240+
241+
_, err = qf.BuildFilter(context.Background(), TestQueryFactory, FieldResolver(func(ctx context.Context, fieldName string) (resolvedFieldName string, err error) {
242+
require.Equal(t, "wrong", fieldName)
243+
return "", fmt.Errorf("pop")
244+
}))
245+
assert.Regexp(t, "pop", err)
246+
}
247+
231248
func TestBuildQueryJSONEqual(t *testing.T) {
232249

233250
var qf QueryJSON

0 commit comments

Comments
 (0)