mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-29 10:21:01 -06:00
349 lines
7.0 KiB
Go
349 lines
7.0 KiB
Go
|
package customdiff
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/hashicorp/terraform/helper/schema"
|
||
|
)
|
||
|
|
||
|
func TestIf(t *testing.T) {
|
||
|
t.Run("true", func(t *testing.T) {
|
||
|
var condCalled, customCalled bool
|
||
|
var gotOld, gotNew string
|
||
|
|
||
|
provider := testProvider(
|
||
|
map[string]*schema.Schema{
|
||
|
"foo": {
|
||
|
Type: schema.TypeString,
|
||
|
Optional: true,
|
||
|
},
|
||
|
},
|
||
|
If(
|
||
|
func(d *schema.ResourceDiff, meta interface{}) bool {
|
||
|
condCalled = true
|
||
|
old, new := d.GetChange("foo")
|
||
|
gotOld = old.(string)
|
||
|
gotNew = new.(string)
|
||
|
return true
|
||
|
},
|
||
|
func(d *schema.ResourceDiff, meta interface{}) error {
|
||
|
customCalled = true
|
||
|
return errors.New("bad")
|
||
|
},
|
||
|
),
|
||
|
)
|
||
|
|
||
|
_, err := testDiff(
|
||
|
provider,
|
||
|
map[string]string{
|
||
|
"foo": "bar",
|
||
|
},
|
||
|
map[string]string{
|
||
|
"foo": "baz",
|
||
|
},
|
||
|
)
|
||
|
|
||
|
if err == nil {
|
||
|
t.Fatal("Diff succeeded; want error")
|
||
|
}
|
||
|
if got, want := err.Error(), "bad"; got != want {
|
||
|
t.Fatalf("wrong error message %q; want %q", got, want)
|
||
|
}
|
||
|
|
||
|
if !condCalled {
|
||
|
t.Error("condition callback was not called")
|
||
|
} else {
|
||
|
if got, want := gotOld, "bar"; got != want {
|
||
|
t.Errorf("wrong old value %q; want %q", got, want)
|
||
|
}
|
||
|
if got, want := gotNew, "baz"; got != want {
|
||
|
t.Errorf("wrong new value %q; want %q", got, want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if !customCalled {
|
||
|
t.Error("customize callback was not called")
|
||
|
}
|
||
|
})
|
||
|
t.Run("false", func(t *testing.T) {
|
||
|
var condCalled, customCalled bool
|
||
|
var gotOld, gotNew string
|
||
|
|
||
|
provider := testProvider(
|
||
|
map[string]*schema.Schema{
|
||
|
"foo": {
|
||
|
Type: schema.TypeString,
|
||
|
Optional: true,
|
||
|
},
|
||
|
},
|
||
|
If(
|
||
|
func(d *schema.ResourceDiff, meta interface{}) bool {
|
||
|
condCalled = true
|
||
|
old, new := d.GetChange("foo")
|
||
|
gotOld = old.(string)
|
||
|
gotNew = new.(string)
|
||
|
return false
|
||
|
},
|
||
|
func(d *schema.ResourceDiff, meta interface{}) error {
|
||
|
customCalled = true
|
||
|
return errors.New("bad")
|
||
|
},
|
||
|
),
|
||
|
)
|
||
|
|
||
|
_, err := testDiff(
|
||
|
provider,
|
||
|
map[string]string{
|
||
|
"foo": "bar",
|
||
|
},
|
||
|
map[string]string{
|
||
|
"foo": "baz",
|
||
|
},
|
||
|
)
|
||
|
|
||
|
if err != nil {
|
||
|
t.Fatalf("Diff error %q; want success", err.Error())
|
||
|
}
|
||
|
|
||
|
if !condCalled {
|
||
|
t.Error("condition callback was not called")
|
||
|
} else {
|
||
|
if got, want := gotOld, "bar"; got != want {
|
||
|
t.Errorf("wrong old value %q; want %q", got, want)
|
||
|
}
|
||
|
if got, want := gotNew, "baz"; got != want {
|
||
|
t.Errorf("wrong new value %q; want %q", got, want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if customCalled {
|
||
|
t.Error("customize callback was called (should not have been)")
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestIfValueChange(t *testing.T) {
|
||
|
t.Run("true", func(t *testing.T) {
|
||
|
var condCalled, customCalled bool
|
||
|
var gotOld, gotNew string
|
||
|
|
||
|
provider := testProvider(
|
||
|
map[string]*schema.Schema{
|
||
|
"foo": {
|
||
|
Type: schema.TypeString,
|
||
|
Optional: true,
|
||
|
},
|
||
|
},
|
||
|
IfValueChange(
|
||
|
"foo",
|
||
|
func(old, new, meta interface{}) bool {
|
||
|
condCalled = true
|
||
|
gotOld = old.(string)
|
||
|
gotNew = new.(string)
|
||
|
return true
|
||
|
},
|
||
|
func(d *schema.ResourceDiff, meta interface{}) error {
|
||
|
customCalled = true
|
||
|
return errors.New("bad")
|
||
|
},
|
||
|
),
|
||
|
)
|
||
|
|
||
|
_, err := testDiff(
|
||
|
provider,
|
||
|
map[string]string{
|
||
|
"foo": "bar",
|
||
|
},
|
||
|
map[string]string{
|
||
|
"foo": "baz",
|
||
|
},
|
||
|
)
|
||
|
|
||
|
if err == nil {
|
||
|
t.Fatal("Diff succeeded; want error")
|
||
|
}
|
||
|
if got, want := err.Error(), "bad"; got != want {
|
||
|
t.Fatalf("wrong error message %q; want %q", got, want)
|
||
|
}
|
||
|
|
||
|
if !condCalled {
|
||
|
t.Error("condition callback was not called")
|
||
|
} else {
|
||
|
if got, want := gotOld, "bar"; got != want {
|
||
|
t.Errorf("wrong old value %q; want %q", got, want)
|
||
|
}
|
||
|
if got, want := gotNew, "baz"; got != want {
|
||
|
t.Errorf("wrong new value %q; want %q", got, want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if !customCalled {
|
||
|
t.Error("customize callback was not called")
|
||
|
}
|
||
|
})
|
||
|
t.Run("false", func(t *testing.T) {
|
||
|
var condCalled, customCalled bool
|
||
|
var gotOld, gotNew string
|
||
|
|
||
|
provider := testProvider(
|
||
|
map[string]*schema.Schema{
|
||
|
"foo": {
|
||
|
Type: schema.TypeString,
|
||
|
Optional: true,
|
||
|
},
|
||
|
},
|
||
|
IfValueChange(
|
||
|
"foo",
|
||
|
func(old, new, meta interface{}) bool {
|
||
|
condCalled = true
|
||
|
gotOld = old.(string)
|
||
|
gotNew = new.(string)
|
||
|
return false
|
||
|
},
|
||
|
func(d *schema.ResourceDiff, meta interface{}) error {
|
||
|
customCalled = true
|
||
|
return errors.New("bad")
|
||
|
},
|
||
|
),
|
||
|
)
|
||
|
|
||
|
_, err := testDiff(
|
||
|
provider,
|
||
|
map[string]string{
|
||
|
"foo": "bar",
|
||
|
},
|
||
|
map[string]string{
|
||
|
"foo": "baz",
|
||
|
},
|
||
|
)
|
||
|
|
||
|
if err != nil {
|
||
|
t.Fatalf("Diff error %q; want success", err.Error())
|
||
|
}
|
||
|
|
||
|
if !condCalled {
|
||
|
t.Error("condition callback was not called")
|
||
|
} else {
|
||
|
if got, want := gotOld, "bar"; got != want {
|
||
|
t.Errorf("wrong old value %q; want %q", got, want)
|
||
|
}
|
||
|
if got, want := gotNew, "baz"; got != want {
|
||
|
t.Errorf("wrong new value %q; want %q", got, want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if customCalled {
|
||
|
t.Error("customize callback was called (should not have been)")
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestIfValue(t *testing.T) {
|
||
|
t.Run("true", func(t *testing.T) {
|
||
|
var condCalled, customCalled bool
|
||
|
var gotValue string
|
||
|
|
||
|
provider := testProvider(
|
||
|
map[string]*schema.Schema{
|
||
|
"foo": {
|
||
|
Type: schema.TypeString,
|
||
|
Optional: true,
|
||
|
},
|
||
|
},
|
||
|
IfValue(
|
||
|
"foo",
|
||
|
func(value, meta interface{}) bool {
|
||
|
condCalled = true
|
||
|
gotValue = value.(string)
|
||
|
return true
|
||
|
},
|
||
|
func(d *schema.ResourceDiff, meta interface{}) error {
|
||
|
customCalled = true
|
||
|
return errors.New("bad")
|
||
|
},
|
||
|
),
|
||
|
)
|
||
|
|
||
|
_, err := testDiff(
|
||
|
provider,
|
||
|
map[string]string{
|
||
|
"foo": "bar",
|
||
|
},
|
||
|
map[string]string{
|
||
|
"foo": "baz",
|
||
|
},
|
||
|
)
|
||
|
|
||
|
if err == nil {
|
||
|
t.Fatal("Diff succeeded; want error")
|
||
|
}
|
||
|
if got, want := err.Error(), "bad"; got != want {
|
||
|
t.Fatalf("wrong error message %q; want %q", got, want)
|
||
|
}
|
||
|
|
||
|
if !condCalled {
|
||
|
t.Error("condition callback was not called")
|
||
|
} else {
|
||
|
if got, want := gotValue, "baz"; got != want {
|
||
|
t.Errorf("wrong value %q; want %q", got, want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if !customCalled {
|
||
|
t.Error("customize callback was not called")
|
||
|
}
|
||
|
})
|
||
|
t.Run("false", func(t *testing.T) {
|
||
|
var condCalled, customCalled bool
|
||
|
var gotValue string
|
||
|
|
||
|
provider := testProvider(
|
||
|
map[string]*schema.Schema{
|
||
|
"foo": {
|
||
|
Type: schema.TypeString,
|
||
|
Optional: true,
|
||
|
},
|
||
|
},
|
||
|
IfValue(
|
||
|
"foo",
|
||
|
func(value, meta interface{}) bool {
|
||
|
condCalled = true
|
||
|
gotValue = value.(string)
|
||
|
return false
|
||
|
},
|
||
|
func(d *schema.ResourceDiff, meta interface{}) error {
|
||
|
customCalled = true
|
||
|
return errors.New("bad")
|
||
|
},
|
||
|
),
|
||
|
)
|
||
|
|
||
|
_, err := testDiff(
|
||
|
provider,
|
||
|
map[string]string{
|
||
|
"foo": "bar",
|
||
|
},
|
||
|
map[string]string{
|
||
|
"foo": "baz",
|
||
|
},
|
||
|
)
|
||
|
|
||
|
if err != nil {
|
||
|
t.Fatalf("Diff error %q; want success", err.Error())
|
||
|
}
|
||
|
|
||
|
if !condCalled {
|
||
|
t.Error("condition callback was not called")
|
||
|
} else {
|
||
|
if got, want := gotValue, "baz"; got != want {
|
||
|
t.Errorf("wrong value %q; want %q", got, want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if customCalled {
|
||
|
t.Error("customize callback was called (should not have been)")
|
||
|
}
|
||
|
})
|
||
|
}
|