-
Notifications
You must be signed in to change notification settings - Fork 0
/
extract_test.go
47 lines (43 loc) · 1.17 KB
/
extract_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package equl
import (
"github.com/stretchr/testify/assert"
"strings"
"testing"
)
func TestExtract(t *testing.T) {
obj := object{
Base: 1,
Slice: []string{"a", "b"},
Parent: parent{Name: "parent-name", Child: "parent-child"},
Grandparent: grandparent{Parent: parent{Name: "grand-parent-name", Child: "grand-parent-child"}},
}
objMap := map[string]interface{}{
"Base": 1,
"Slice": []string{"a", "b"},
"Parent": map[string]interface{}{
"Name": "parent-name",
"Child": "parent-child",
},
"Grandparent": map[string]interface{}{
"Parent": map[string]interface{}{
"Name": "grand-parent-name",
"Child": "grand-parent-child",
},
},
}
filterFunc := func(key string) bool {
return key != ".Base" && !strings.Contains(key, ".Grandparent") // skip base and grandparent
}
expected := map[string]interface{}{
".Parent.Child": "parent-child",
".Parent.Name": "parent-name",
".Slice.0": "a",
".Slice.1": "b",
}
actualObj, err := extract(obj, filterFunc)
assert.Nil(t, err)
assert.Equal(t, expected, actualObj)
actualMap, err := extract(objMap, filterFunc)
assert.Nil(t, err)
assert.Equal(t, expected, actualMap)
}