diff --git a/api/internal/wrappy/wnode.go b/api/internal/wrappy/wnode.go index 901925d57..a74ef6308 100644 --- a/api/internal/wrappy/wnode.go +++ b/api/internal/wrappy/wnode.go @@ -91,8 +91,8 @@ func (wn *WNode) GetFieldValue(path string) (interface{}, error) { // Return value as slice for SequenceNode kind if yn.Kind == yaml.SequenceNode { var result []interface{} - for _, node := range yn.Content { - result = append(result, node.Value) + if err := yn.Decode(&result); err != nil { + return nil, err } return result, nil } diff --git a/api/internal/wrappy/wnode_test.go b/api/internal/wrappy/wnode_test.go index 45754977e..c3c7c29f1 100644 --- a/api/internal/wrappy/wnode_test.go +++ b/api/internal/wrappy/wnode_test.go @@ -377,6 +377,39 @@ func TestGetFieldValueReturnsSlice(t *testing.T) { } } +func TestGetFieldValueReturnsSliceOfMappings(t *testing.T) { + bytes, err := yaml.Marshal(makeBigMap()) + if err != nil { + t.Fatalf("unexpected yaml.Marshal err: %v", err) + } + rNode, err := kyaml.Parse(string(bytes)) + if err != nil { + t.Fatalf("unexpected yaml.Marshal err: %v", err) + } + wn := FromRNode(rNode) + expected := []interface{}{ + map[string]interface{}{ + "field1": "idx0foo", + "field2": "idx0bar", + }, + map[string]interface{}{ + "field1": "idx1foo", + "field2": "idx1bar", + }, + map[string]interface{}{ + "field1": "idx2foo", + "field2": "idx2bar", + }, + } + actual, err := wn.GetFieldValue("those") + if err != nil { + t.Fatalf("error getting slice: %v", err) + } + if diff := cmp.Diff(expected, actual); diff != "" { + t.Fatalf("actual slice does not deep equal expected slice:\n%v", diff) + } +} + func TestGetFieldValueReturnsString(t *testing.T) { wn := NewWNode() if err := wn.UnmarshalJSON([]byte(deploymentBiggerJson)); err != nil {