Skip to content

Commit 7bb8e84

Browse files
committed
Add nested too
1 parent 7dca9f8 commit 7bb8e84

2 files changed

Lines changed: 37 additions & 3 deletions

File tree

internal/fields/validate.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@ import (
2222
"github.com/cbroglie/mustache"
2323
"gopkg.in/yaml.v3"
2424

25+
"github.com/elastic/package-spec/v2/code/go/pkg/specerrors"
26+
2527
"github.com/elastic/elastic-package/internal/common"
2628
"github.com/elastic/elastic-package/internal/logger"
2729
"github.com/elastic/elastic-package/internal/multierror"
2830
"github.com/elastic/elastic-package/internal/packages"
2931
"github.com/elastic/elastic-package/internal/packages/buildmanifest"
30-
"github.com/elastic/package-spec/v2/code/go/pkg/specerrors"
3132
)
3233

3334
// EPF - Elastic Package Fields [validation]
@@ -790,7 +791,7 @@ func (v *Validator) parseSingleElementValue(key string, definition FieldDefiniti
790791
return fmt.Errorf("the IP %q is not one of the allowed test IPs (see: https://github.com/elastic/elastic-package/blob/main/internal/fields/_static/allowed_geo_ips.txt)", valStr)
791792
}
792793
// Groups should only contain nested fields, not single values.
793-
case "group":
794+
case "group", "nested":
794795
switch val := val.(type) {
795796
case map[string]interface{}:
796797
// This is probably an element from an array of objects,
@@ -799,7 +800,12 @@ func (v *Validator) parseSingleElementValue(key string, definition FieldDefiniti
799800
break
800801
}
801802
errs := v.validateMapElement(key, common.MapStr(val), doc)
802-
errs = append(errs, arrayOfObjectsErr)
803+
if definition.Type == "group" {
804+
errs = append(errs, arrayOfObjectsErr)
805+
}
806+
if len(errs) == 0 {
807+
return nil
808+
}
803809
return errs
804810
default:
805811
return fmt.Errorf("field %q is a group of fields, it cannot store values", key)

internal/fields/validate_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,34 @@ func Test_parseElementValue(t *testing.T) {
652652
}
653653
},
654654
},
655+
// elements in nested objects
656+
{
657+
key: "nested",
658+
value: []interface{}{
659+
map[string]interface{}{
660+
"id": "somehost-id",
661+
"hostname": "somehost",
662+
},
663+
},
664+
definition: FieldDefinition{
665+
Name: "nested",
666+
Type: "nested",
667+
Fields: []FieldDefinition{
668+
{
669+
Name: "id",
670+
Type: "keyword",
671+
},
672+
},
673+
},
674+
specVersion: *semver3_0_0,
675+
fail: true,
676+
assertError: func(t *testing.T, err error) {
677+
errs := err.(multierror.Error)
678+
if assert.Len(t, errs, 1) {
679+
assert.Contains(t, errs[0].Error(), `"nested.hostname" is undefined`)
680+
}
681+
},
682+
},
655683
} {
656684

657685
t.Run(test.key, func(t *testing.T) {

0 commit comments

Comments
 (0)