From f59a6072cf775cc31d8ce705e97a842857427b0c Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Thu, 1 Mar 2018 14:22:08 -0700 Subject: [PATCH] Default empty strings --- parse/builder/builder.go | 6 ++++- parse/builder/builder_test.go | 44 +++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 parse/builder/builder_test.go diff --git a/parse/builder/builder.go b/parse/builder/builder.go index 8f31ffdc..ad1c806f 100644 --- a/parse/builder/builder.go +++ b/parse/builder/builder.go @@ -88,7 +88,11 @@ func (b *Builder) copyInputs(schema *types.Schema, input map[string]interface{}, } } } - result[fieldName] = value + + // Don't copy empty strings + if !(value == "" && field.Type == "string") { + result[fieldName] = value + } if op.IsList() && field.Type == "date" && value != "" { ts, err := convert.ToTimestamp(value) diff --git a/parse/builder/builder_test.go b/parse/builder/builder_test.go new file mode 100644 index 00000000..a985a0fd --- /dev/null +++ b/parse/builder/builder_test.go @@ -0,0 +1,44 @@ +package builder + +import ( + "testing" + + "github.com/rancher/norman/types" + "github.com/stretchr/testify/assert" +) + +func TestEmptyStringWithDefault(t *testing.T) { + schema := &types.Schema{ + ResourceFields: map[string]types.Field{ + "foo": { + Default: "foo", + Type: "string", + Create: true, + }, + }, + } + schemas := types.NewSchemas() + schemas.AddSchema(*schema) + + builder := NewBuilder(&types.APIContext{}) + + // Test if no field we set to "foo" + result, err := builder.Construct(schema, nil, Create) + if err != nil { + t.Fatal(err) + } + value, ok := result["foo"] + assert.True(t, ok) + assert.Equal(t, "foo", value) + + // Test if field is "" we set to "foo" + result, err = builder.Construct(schema, map[string]interface{}{ + "foo": "", + }, Create) + if err != nil { + t.Fatal(err) + } + value, ok = result["foo"] + assert.True(t, ok) + assert.Equal(t, "foo", value) +}