github.com/spirius/terraform@v0.10.0-beta2.0.20170714185654-87b2c0cf8fea/command/format/plan_test.go (about)

     1  package format
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/terraform"
     8  	"github.com/mitchellh/colorstring"
     9  )
    10  
    11  // Test that a root level data source gets a special plan output on create
    12  func TestPlan_destroyDeposed(t *testing.T) {
    13  	plan := &terraform.Plan{
    14  		Diff: &terraform.Diff{
    15  			Modules: []*terraform.ModuleDiff{
    16  				&terraform.ModuleDiff{
    17  					Path: []string{"root"},
    18  					Resources: map[string]*terraform.InstanceDiff{
    19  						"aws_instance.foo": &terraform.InstanceDiff{
    20  							DestroyDeposed: true,
    21  						},
    22  					},
    23  				},
    24  			},
    25  		},
    26  	}
    27  	opts := &PlanOpts{
    28  		Plan: plan,
    29  		Color: &colorstring.Colorize{
    30  			Colors:  colorstring.DefaultColors,
    31  			Disable: true,
    32  		},
    33  		ModuleDepth: 1,
    34  	}
    35  
    36  	actual := Plan(opts)
    37  
    38  	expected := strings.TrimSpace(`
    39  - aws_instance.foo (deposed)
    40  	`)
    41  	if actual != expected {
    42  		t.Fatalf("expected:\n\n%s\n\ngot:\n\n%s", expected, actual)
    43  	}
    44  }
    45  
    46  // Test that computed fields with an interpolation string get displayed
    47  func TestPlan_displayInterpolations(t *testing.T) {
    48  	plan := &terraform.Plan{
    49  		Diff: &terraform.Diff{
    50  			Modules: []*terraform.ModuleDiff{
    51  				&terraform.ModuleDiff{
    52  					Path: []string{"root"},
    53  					Resources: map[string]*terraform.InstanceDiff{
    54  						"aws_instance.foo": &terraform.InstanceDiff{
    55  							Attributes: map[string]*terraform.ResourceAttrDiff{
    56  								"computed_field": &terraform.ResourceAttrDiff{
    57  									New:         "${aws_instance.other.id}",
    58  									NewComputed: true,
    59  								},
    60  							},
    61  						},
    62  					},
    63  				},
    64  			},
    65  		},
    66  	}
    67  	opts := &PlanOpts{
    68  		Plan: plan,
    69  		Color: &colorstring.Colorize{
    70  			Colors:  colorstring.DefaultColors,
    71  			Disable: true,
    72  		},
    73  		ModuleDepth: 1,
    74  	}
    75  
    76  	out := Plan(opts)
    77  	lines := strings.Split(out, "\n")
    78  	if len(lines) != 2 {
    79  		t.Fatal("expected 2 lines of output, got:\n", out)
    80  	}
    81  
    82  	actual := strings.TrimSpace(lines[1])
    83  	expected := `computed_field: "" => "${aws_instance.other.id}"`
    84  
    85  	if actual != expected {
    86  		t.Fatalf("expected:\n\n%s\n\ngot:\n\n%s", expected, actual)
    87  	}
    88  }
    89  
    90  // Test that a root level data source gets a special plan output on create
    91  func TestPlan_rootDataSource(t *testing.T) {
    92  	plan := &terraform.Plan{
    93  		Diff: &terraform.Diff{
    94  			Modules: []*terraform.ModuleDiff{
    95  				&terraform.ModuleDiff{
    96  					Path: []string{"root"},
    97  					Resources: map[string]*terraform.InstanceDiff{
    98  						"data.type.name": &terraform.InstanceDiff{
    99  							Attributes: map[string]*terraform.ResourceAttrDiff{
   100  								"A": &terraform.ResourceAttrDiff{
   101  									New:         "B",
   102  									RequiresNew: true,
   103  								},
   104  							},
   105  						},
   106  					},
   107  				},
   108  			},
   109  		},
   110  	}
   111  	opts := &PlanOpts{
   112  		Plan: plan,
   113  		Color: &colorstring.Colorize{
   114  			Colors:  colorstring.DefaultColors,
   115  			Disable: true,
   116  		},
   117  		ModuleDepth: 1,
   118  	}
   119  
   120  	actual := Plan(opts)
   121  
   122  	expected := strings.TrimSpace(`
   123   <= data.type.name
   124        A: "B"
   125  	`)
   126  	if actual != expected {
   127  		t.Fatalf("expected:\n\n%s\n\ngot:\n\n%s", expected, actual)
   128  	}
   129  }
   130  
   131  // Test that data sources nested in modules get the same plan output
   132  func TestPlan_nestedDataSource(t *testing.T) {
   133  	plan := &terraform.Plan{
   134  		Diff: &terraform.Diff{
   135  			Modules: []*terraform.ModuleDiff{
   136  				&terraform.ModuleDiff{
   137  					Path: []string{"root", "nested"},
   138  					Resources: map[string]*terraform.InstanceDiff{
   139  						"data.type.name": &terraform.InstanceDiff{
   140  							Attributes: map[string]*terraform.ResourceAttrDiff{
   141  								"A": &terraform.ResourceAttrDiff{
   142  									New:         "B",
   143  									RequiresNew: true,
   144  								},
   145  							},
   146  						},
   147  					},
   148  				},
   149  			},
   150  		},
   151  	}
   152  	opts := &PlanOpts{
   153  		Plan: plan,
   154  		Color: &colorstring.Colorize{
   155  			Colors:  colorstring.DefaultColors,
   156  			Disable: true,
   157  		},
   158  		ModuleDepth: 2,
   159  	}
   160  
   161  	actual := Plan(opts)
   162  
   163  	expected := strings.TrimSpace(`
   164   <= module.nested.data.type.name
   165        A: "B"
   166  	`)
   167  	if actual != expected {
   168  		t.Fatalf("expected:\n\n%s\n\ngot:\n\n%s", expected, actual)
   169  	}
   170  }