| package format |
| |
| import ( |
| "fmt" |
| "testing" |
| |
| "github.com/hashicorp/terraform/internal/lang/marks" |
| "github.com/zclconf/go-cty/cty" |
| ) |
| |
| func TestObjectValueIDOrName(t *testing.T) { |
| tests := []struct { |
| obj cty.Value |
| id [2]string |
| name [2]string |
| either [2]string |
| }{ |
| { |
| cty.NullVal(cty.EmptyObject), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.UnknownVal(cty.EmptyObject), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.EmptyObjectVal, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "id": cty.StringVal("foo-123"), |
| }), |
| [...]string{"id", "foo-123"}, |
| [...]string{"", ""}, |
| [...]string{"id", "foo-123"}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "id": cty.StringVal("foo-123"), |
| "name": cty.StringVal("awesome-foo"), |
| }), |
| [...]string{"id", "foo-123"}, |
| [...]string{"name", "awesome-foo"}, |
| [...]string{"id", "foo-123"}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "name": cty.StringVal("awesome-foo"), |
| }), |
| [...]string{"name", "awesome-foo"}, |
| [...]string{"name", "awesome-foo"}, |
| [...]string{"name", "awesome-foo"}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "name": cty.StringVal("awesome-foo").Mark(marks.Sensitive), |
| }), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "name": cty.StringVal("awesome-foo"), |
| "tags": cty.MapVal(map[string]cty.Value{ |
| "Name": cty.StringVal("My Awesome Foo"), |
| }), |
| }), |
| [...]string{"name", "awesome-foo"}, |
| [...]string{"name", "awesome-foo"}, |
| [...]string{"name", "awesome-foo"}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "tags": cty.MapVal(map[string]cty.Value{ |
| "Name": cty.StringVal("My Awesome Foo"), |
| "name": cty.StringVal("awesome-foo"), |
| }), |
| }), |
| [...]string{"", ""}, |
| [...]string{"tags.name", "awesome-foo"}, |
| [...]string{"tags.name", "awesome-foo"}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "tags": cty.MapVal(map[string]cty.Value{ |
| "Name": cty.StringVal("My Awesome Foo"), |
| }), |
| }), |
| [...]string{"", ""}, |
| [...]string{"tags.Name", "My Awesome Foo"}, |
| [...]string{"tags.Name", "My Awesome Foo"}, |
| }, |
| |
| // The following are degenerate cases, included to make sure we don't |
| // crash when we encounter them. If you're here fixing a reported panic |
| // in this formatter, this is the place to add a new test case. |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "id": cty.True, |
| }), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "id": cty.NullVal(cty.String), |
| }), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "id": cty.UnknownVal(cty.String), |
| }), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "tags": cty.StringVal("foo"), |
| }), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "tags": cty.NullVal(cty.Map(cty.String)), |
| }), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "tags": cty.UnknownVal(cty.Map(cty.String)), |
| }), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "tags": cty.MapVal(map[string]cty.Value{ |
| "Name": cty.True, |
| }), |
| }), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "tags": cty.MapVal(map[string]cty.Value{ |
| "Name": cty.UnknownVal(cty.String), |
| }), |
| }), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "tags": cty.MapVal(map[string]cty.Value{ |
| "Name": cty.UnknownVal(cty.String).Mark(marks.Sensitive), |
| }), |
| }), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| { |
| cty.ObjectVal(map[string]cty.Value{ |
| "tags": cty.MapVal(map[string]cty.Value{ |
| "Name": cty.NullVal(cty.String), |
| }), |
| }), |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| [...]string{"", ""}, |
| }, |
| } |
| |
| for _, test := range tests { |
| t.Run(fmt.Sprintf("%#v", test.obj), func(t *testing.T) { |
| obj := test.obj |
| gotIDKey, gotIDVal := ObjectValueID(obj) |
| gotNameKey, gotNameVal := ObjectValueName(obj) |
| gotEitherKey, gotEitherVal := ObjectValueIDOrName(obj) |
| |
| if got, want := [...]string{gotIDKey, gotIDVal}, test.id; got != want { |
| t.Errorf("wrong ObjectValueID result\ngot: %#v\nwant: %#v", got, want) |
| } |
| if got, want := [...]string{gotNameKey, gotNameVal}, test.name; got != want { |
| t.Errorf("wrong ObjectValueName result\ngot: %#v\nwant: %#v", got, want) |
| } |
| if got, want := [...]string{gotEitherKey, gotEitherVal}, test.either; got != want { |
| t.Errorf("wrong ObjectValueIDOrName result\ngot: %#v\nwant: %#v", got, want) |
| } |
| }) |
| } |
| } |