summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiam Cervante <liam.cervante@hashicorp.com>2022-11-04 14:41:42 +0100
committerLiam Cervante <liam.cervante@hashicorp.com>2022-11-04 14:41:42 +0100
commit233ef620b0a8db817855263a0d0834cffa34f3fa (patch)
tree65c4eb3c618d1ee571bbc48f511a335526e1ab24
parentc7cfb6afb235cc2be4b9ba58ebd0b265a9305111 (diff)
add test cases that verify behaviour from the forums
-rw-r--r--ext/typeexpr/defaults_test.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/ext/typeexpr/defaults_test.go b/ext/typeexpr/defaults_test.go
index 7ca6161..d8b583e 100644
--- a/ext/typeexpr/defaults_test.go
+++ b/ext/typeexpr/defaults_test.go
@@ -539,6 +539,7 @@ func TestDefaults_Apply(t *testing.T) {
},
value: cty.ObjectVal(map[string]cty.Value{
"required": cty.StringVal("required"),
+ // optional_object is explicitly set to null for this test case.
"optional_object": cty.NullVal(cty.Object(map[string]cty.Type{
"nested_required": cty.String,
"nested_optional": cty.String,
@@ -581,6 +582,7 @@ func TestDefaults_Apply(t *testing.T) {
},
value: cty.ObjectVal(map[string]cty.Value{
"required": cty.StringVal("required"),
+ // optional_object is missing but not null for this test case.
}),
want: cty.ObjectVal(map[string]cty.Value{
"required": cty.StringVal("required"),
@@ -590,6 +592,63 @@ func TestDefaults_Apply(t *testing.T) {
}),
}),
},
+ // https://discuss.hashicorp.com/t/request-for-feedback-optional-object-type-attributes-with-defaults-in-v1-3-alpha/40550/6?u=alisdair
+ "all child and nested values are optional with defaults": {
+ defaults: &Defaults{
+ Type: cty.ObjectWithOptionalAttrs(map[string]cty.Type{
+ "settings": cty.ObjectWithOptionalAttrs(map[string]cty.Type{
+ "setting_one": cty.String,
+ "setting_two": cty.Number,
+ }, []string{"setting_one", "setting_two"}),
+ }, []string{"settings"}),
+ DefaultValues: map[string]cty.Value{
+ "settings": cty.EmptyObjectVal,
+ },
+ Children: map[string]*Defaults{
+ "settings": {
+ Type: cty.ObjectWithOptionalAttrs(map[string]cty.Type{
+ "setting_one": cty.String,
+ "setting_two": cty.String,
+ }, []string{"setting_one", "setting_two"}),
+ DefaultValues: map[string]cty.Value{
+ "setting_one": cty.StringVal(""),
+ "setting_two": cty.NumberIntVal(0),
+ },
+ },
+ },
+ },
+ value: cty.EmptyObjectVal,
+ want: cty.ObjectVal(map[string]cty.Value{
+ "settings": cty.ObjectVal(map[string]cty.Value{
+ "setting_one": cty.StringVal(""),
+ "setting_two": cty.NumberIntVal(0),
+ }),
+ }),
+ },
+ "all nested values are optional with defaults, but direct child has no default": {
+ defaults: &Defaults{
+ Type: cty.ObjectWithOptionalAttrs(map[string]cty.Type{
+ "settings": cty.ObjectWithOptionalAttrs(map[string]cty.Type{
+ "setting_one": cty.String,
+ "setting_two": cty.Number,
+ }, []string{"setting_one", "setting_two"}),
+ }, []string{"settings"}),
+ Children: map[string]*Defaults{
+ "settings": {
+ Type: cty.ObjectWithOptionalAttrs(map[string]cty.Type{
+ "setting_one": cty.String,
+ "setting_two": cty.String,
+ }, []string{"setting_one", "setting_two"}),
+ DefaultValues: map[string]cty.Value{
+ "setting_one": cty.StringVal(""),
+ "setting_two": cty.NumberIntVal(0),
+ },
+ },
+ },
+ },
+ value: cty.EmptyObjectVal,
+ want: cty.EmptyObjectVal,
+ },
}
for name, tc := range testCases {