github.com/hartzell/terraform@v0.8.6-0.20180503104400-0cc9e050ecd4/helper/customdiff/compose_test.go (about)

     1  package customdiff
     2  
     3  import (
     4  	"errors"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/hashicorp/terraform/helper/schema"
     9  )
    10  
    11  func TestAll(t *testing.T) {
    12  	var aCalled, bCalled, cCalled bool
    13  
    14  	provider := testProvider(
    15  		map[string]*schema.Schema{},
    16  		All(
    17  			func(d *schema.ResourceDiff, meta interface{}) error {
    18  				aCalled = true
    19  				return errors.New("A bad")
    20  			},
    21  			func(d *schema.ResourceDiff, meta interface{}) error {
    22  				bCalled = true
    23  				return nil
    24  			},
    25  			func(d *schema.ResourceDiff, meta interface{}) error {
    26  				cCalled = true
    27  				return errors.New("C bad")
    28  			},
    29  		),
    30  	)
    31  
    32  	_, err := testDiff(
    33  		provider,
    34  		map[string]string{
    35  			"foo": "bar",
    36  		},
    37  		map[string]string{
    38  			"foo": "baz",
    39  		},
    40  	)
    41  
    42  	if err == nil {
    43  		t.Fatal("Diff succeeded; want error")
    44  	}
    45  	if s, sub := err.Error(), "* A bad"; !strings.Contains(s, sub) {
    46  		t.Errorf("Missing substring %q in error message %q", sub, s)
    47  	}
    48  	if s, sub := err.Error(), "* C bad"; !strings.Contains(s, sub) {
    49  		t.Errorf("Missing substring %q in error message %q", sub, s)
    50  	}
    51  
    52  	if !aCalled {
    53  		t.Error("customize callback A was not called")
    54  	}
    55  	if !bCalled {
    56  		t.Error("customize callback B was not called")
    57  	}
    58  	if !cCalled {
    59  		t.Error("customize callback C was not called")
    60  	}
    61  }
    62  
    63  func TestSequence(t *testing.T) {
    64  	var aCalled, bCalled, cCalled bool
    65  
    66  	provider := testProvider(
    67  		map[string]*schema.Schema{},
    68  		Sequence(
    69  			func(d *schema.ResourceDiff, meta interface{}) error {
    70  				aCalled = true
    71  				return nil
    72  			},
    73  			func(d *schema.ResourceDiff, meta interface{}) error {
    74  				bCalled = true
    75  				return errors.New("B bad")
    76  			},
    77  			func(d *schema.ResourceDiff, meta interface{}) error {
    78  				cCalled = true
    79  				return errors.New("C bad")
    80  			},
    81  		),
    82  	)
    83  
    84  	_, err := testDiff(
    85  		provider,
    86  		map[string]string{
    87  			"foo": "bar",
    88  		},
    89  		map[string]string{
    90  			"foo": "baz",
    91  		},
    92  	)
    93  
    94  	if err == nil {
    95  		t.Fatal("Diff succeeded; want error")
    96  	}
    97  	if got, want := err.Error(), "B bad"; got != want {
    98  		t.Errorf("Wrong error message %q; want %q", got, want)
    99  	}
   100  
   101  	if !aCalled {
   102  		t.Error("customize callback A was not called")
   103  	}
   104  	if !bCalled {
   105  		t.Error("customize callback B was not called")
   106  	}
   107  	if cCalled {
   108  		t.Error("customize callback C was called (should not have been)")
   109  	}
   110  }