pomerium/pkg/protoutil/fieldmasktree_test.go
Kenneth Jenkins 2cc82ed706
protoutil: add OverwriteMasked method (#4651)
Add a method to copy selected fields from one proto message to another
(of the same type), using a FieldMask. This is intended for use in a new
databroker Patch method.
2023-10-31 09:16:54 -07:00

55 lines
1.2 KiB
Go

package protoutil
import (
"testing"
"github.com/stretchr/testify/assert"
"google.golang.org/protobuf/types/known/fieldmaskpb"
)
func TestFieldMaskTree(t *testing.T) {
t.Run("empty", func(t *testing.T) {
tr := newFieldMaskTree(&fieldmaskpb.FieldMask{})
assert.Equal(t, fieldMaskTree(nil), tr)
})
t.Run("basic", func(t *testing.T) {
tr := newFieldMaskTree(&fieldmaskpb.FieldMask{
Paths: []string{"foo", "bar", "baz"},
})
assert.Equal(t, fieldMaskTree{
"foo": {},
"bar": {},
"baz": {},
}, tr)
})
t.Run("nested", func(t *testing.T) {
tr := newFieldMaskTree(&fieldmaskpb.FieldMask{
Paths: []string{"foo.bar.baz", "foo.bar.xyz", "foo.quux"},
})
assert.Equal(t, fieldMaskTree{
"foo": {
"bar": {
"baz": {},
"xyz": {},
},
"quux": {},
},
}, tr)
})
t.Run("overlapping fields 1", func(t *testing.T) {
tr := newFieldMaskTree(&fieldmaskpb.FieldMask{
Paths: []string{"foo", "foo.bar"},
})
assert.Equal(t, fieldMaskTree{
"foo": {},
}, tr)
})
t.Run("overlapping fields 2", func(t *testing.T) {
tr := newFieldMaskTree(&fieldmaskpb.FieldMask{
Paths: []string{"foo.bar", "foo"},
})
assert.Equal(t, fieldMaskTree{
"foo": {},
}, tr)
})
}