mirror of https://github.com/databricks/cli.git
92 lines
1.9 KiB
Go
92 lines
1.9 KiB
Go
package merge
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/databricks/cli/libs/dyn"
|
|
assert "github.com/databricks/cli/libs/dyn/dynassert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestElementByKey(t *testing.T) {
|
|
vin := dyn.V([]dyn.Value{
|
|
dyn.V(map[string]dyn.Value{
|
|
"key": dyn.V("foo"),
|
|
"value": dyn.V(42),
|
|
}),
|
|
dyn.V(map[string]dyn.Value{
|
|
"key": dyn.V("bar"),
|
|
"value": dyn.V(43),
|
|
}),
|
|
dyn.V(map[string]dyn.Value{
|
|
// Use upper case key to test that the resulting element has its
|
|
// key field assigned to the output of the key function.
|
|
// The key function in this test returns the lower case version of the key.
|
|
"key": dyn.V("FOO"),
|
|
"value": dyn.V(44),
|
|
}),
|
|
})
|
|
|
|
keyFunc := func(v dyn.Value) string {
|
|
return strings.ToLower(v.MustString())
|
|
}
|
|
|
|
vout, err := dyn.MapByPath(vin, dyn.EmptyPath, ElementsByKey("key", keyFunc))
|
|
require.NoError(t, err)
|
|
assert.Len(t, vout.MustSequence(), 2)
|
|
assert.Equal(t,
|
|
vout.Index(0).AsAny(),
|
|
map[string]any{
|
|
"key": "foo",
|
|
"value": 44,
|
|
},
|
|
)
|
|
assert.Equal(t,
|
|
vout.Index(1).AsAny(),
|
|
map[string]any{
|
|
"key": "bar",
|
|
"value": 43,
|
|
},
|
|
)
|
|
}
|
|
|
|
func TestElementByKeyWithOverride(t *testing.T) {
|
|
vin := dyn.V([]dyn.Value{
|
|
dyn.V(map[string]dyn.Value{
|
|
"key": dyn.V("foo"),
|
|
"value": dyn.V(42),
|
|
}),
|
|
dyn.V(map[string]dyn.Value{
|
|
"key": dyn.V("bar"),
|
|
"value": dyn.V(43),
|
|
}),
|
|
dyn.V(map[string]dyn.Value{
|
|
"key": dyn.V("foo"),
|
|
"othervalue": dyn.V(44),
|
|
}),
|
|
})
|
|
|
|
keyFunc := func(v dyn.Value) string {
|
|
return strings.ToLower(v.MustString())
|
|
}
|
|
|
|
vout, err := dyn.MapByPath(vin, dyn.EmptyPath, ElementsByKeyWithOverride("key", keyFunc))
|
|
require.NoError(t, err)
|
|
assert.Len(t, vout.MustSequence(), 2)
|
|
assert.Equal(t,
|
|
vout.Index(0).AsAny(),
|
|
map[string]any{
|
|
"key": "foo",
|
|
"othervalue": 44,
|
|
},
|
|
)
|
|
assert.Equal(t,
|
|
vout.Index(1).AsAny(),
|
|
map[string]any{
|
|
"key": "bar",
|
|
"value": 43,
|
|
},
|
|
)
|
|
}
|