Added the `First` field on the result set proxy Upgraded UCL to 0.1.0 Co-authored-by: Leon Mika <lmika@lmika.com> Reviewed-on: #2 Co-authored-by: Leon Mika <lmika@lmika.org> Co-committed-by: Leon Mika <lmika@lmika.org>
This commit is contained in:
parent
213a4fc9cc
commit
022cec7393
5 changed files with 66 additions and 12 deletions
|
|
@ -1,8 +1,9 @@
|
|||
package cmdpacks_test
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestModPB_Copy(t *testing.T) {
|
||||
|
|
@ -10,8 +11,8 @@ func TestModPB_Copy(t *testing.T) {
|
|||
svc := newService(t)
|
||||
|
||||
_, err := svc.CommandController.ExecuteAndWait(t.Context(), `
|
||||
$items = @resultset.Items
|
||||
$skItems = $items | map { |i| $i.sk } | lists:uniq
|
||||
items = @resultset.Items
|
||||
skItems = $items | map { |i| $i.sk } | lists:uniq
|
||||
pb:copy ($skItems | strs:join "\n")
|
||||
`)
|
||||
assert.NoError(t, err)
|
||||
|
|
@ -23,8 +24,8 @@ func TestModPB_Copy(t *testing.T) {
|
|||
svc := newService(t)
|
||||
|
||||
_, err := svc.CommandController.ExecuteAndWait(t.Context(), `
|
||||
$items = @resultset.Items
|
||||
$skItems = $items | map { |i| $i.alpha } | filter !nil | lists:uniq
|
||||
items = @resultset.Items
|
||||
skItems = $items | map { |i| $i.alpha } | filter !nil | lists:uniq
|
||||
pb:copy ($skItems | strs:join "\n")
|
||||
`)
|
||||
assert.NoError(t, err)
|
||||
|
|
|
|||
|
|
@ -2,10 +2,11 @@ package cmdpacks_test
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"lmika.dev/cmd/dynamo-browse/internal/common/ui/commandctrl/cmdpacks"
|
||||
"lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/models"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestModRS_New(t *testing.T) {
|
||||
|
|
@ -70,7 +71,7 @@ func TestModRS_Union(t *testing.T) {
|
|||
svc := newService(t, withDefaultLimit(2))
|
||||
|
||||
rsProxy, err := svc.CommandController.ExecuteAndWait(t.Context(), `
|
||||
$mr = rs:union @resultset (rs:next-page @resultset)
|
||||
mr = rs:union @resultset (rs:next-page @resultset)
|
||||
|
||||
assert (eq (len $mr.Items) 3) "expected len == 3"
|
||||
assert (eq $mr.Items.(0).pk "abc") "expected 0.pk"
|
||||
|
|
@ -152,3 +153,41 @@ func TestModRS_Query(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestModRS_First(t *testing.T) {
|
||||
tests := []struct {
|
||||
descr string
|
||||
cmd string
|
||||
}{
|
||||
{
|
||||
descr: "returns the first item in sorted order",
|
||||
cmd: `
|
||||
rs = rs:query 'pk="abc"' -table service-test-data
|
||||
assert (eq $rs.First.pk "abc") "expected First.pk == abc"
|
||||
assert (eq $rs.First.sk "111") "expected First.sk == 111"
|
||||
`,
|
||||
}, {
|
||||
descr: "returns the first item in single item",
|
||||
cmd: `
|
||||
rs = rs:query 'pk="abc" and sk="222"' -table service-test-data
|
||||
assert (eq $rs.First.pk "abc") "expected First.pk == abc"
|
||||
assert (eq $rs.First.sk "222") "expected First.sk == 222"
|
||||
assert (eq $rs.First.beta 1231) "expected First.beta == 1231"
|
||||
`,
|
||||
}, {
|
||||
descr: "returns the first item in empty result",
|
||||
cmd: `
|
||||
rs = rs:query 'pk="zzz"' -table service-test-data
|
||||
assert (eq $rs.First ()) "expected First to be nil"
|
||||
`,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.descr, func(t *testing.T) {
|
||||
svc := newService(t)
|
||||
|
||||
_, err := svc.CommandController.ExecuteAndWait(t.Context(), tt.cmd)
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,11 +2,12 @@ package cmdpacks
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"maps"
|
||||
"strconv"
|
||||
|
||||
"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
|
||||
"github.com/pkg/errors"
|
||||
"lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/models"
|
||||
"maps"
|
||||
"strconv"
|
||||
"ucl.lmika.dev/ucl"
|
||||
)
|
||||
|
||||
|
|
@ -99,6 +100,13 @@ var resultSetProxyFields = &proxyInfo[*models.ResultSet]{
|
|||
"Table": func(t *models.ResultSet) ucl.Object { return newTableProxy(t.TableInfo) },
|
||||
"Items": func(t *models.ResultSet) ucl.Object { return resultSetItemsProxy{t} },
|
||||
"HasNextPage": func(t *models.ResultSet) ucl.Object { return ucl.BoolObject(t.HasNextPage()) },
|
||||
"First": func(t *models.ResultSet) ucl.Object {
|
||||
items := t.Items()
|
||||
if len(items) == 0 {
|
||||
return nil
|
||||
}
|
||||
return itemProxy{resultSet: t, idx: 0, item: items[0]}
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue