github.com/terraform-modules-krish/terratest@v0.29.0/modules/terraform/plan_test.go (about)

     1  package terraform
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/terraform-modules-krish/terratest/modules/files"
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestInitAndPlanWithError(t *testing.T) {
    11  	t.Parallel()
    12  
    13  	testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-with-plan-error", t.Name())
    14  	require.NoError(t, err)
    15  
    16  	options := &Options{
    17  		TerraformDir: testFolder,
    18  	}
    19  
    20  	_, err = InitAndPlanE(t, options)
    21  	require.Error(t, err)
    22  }
    23  
    24  func TestInitAndPlanWithNoError(t *testing.T) {
    25  	t.Parallel()
    26  
    27  	testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-no-error", t.Name())
    28  	require.NoError(t, err)
    29  
    30  	options := &Options{
    31  		TerraformDir: testFolder,
    32  	}
    33  
    34  	out, err := InitAndPlanE(t, options)
    35  	require.NoError(t, err)
    36  	require.Contains(t, out, "No changes. Infrastructure is up-to-date.")
    37  }
    38  
    39  func TestPlanWithExitCodeWithNoChanges(t *testing.T) {
    40  	t.Parallel()
    41  	testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-no-error", t.Name())
    42  	require.NoError(t, err)
    43  
    44  	options := &Options{
    45  		TerraformDir: testFolder,
    46  	}
    47  	exitCode := InitAndPlanWithExitCode(t, options)
    48  	require.Equal(t, DefaultSuccessExitCode, exitCode)
    49  }
    50  
    51  func TestPlanWithExitCodeWithChanges(t *testing.T) {
    52  	t.Parallel()
    53  	testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-basic-configuration", t.Name())
    54  	require.NoError(t, err)
    55  
    56  	options := &Options{
    57  		TerraformDir: testFolder,
    58  		Vars: map[string]interface{}{
    59  			"cnt": 1,
    60  		},
    61  	}
    62  	exitCode := InitAndPlanWithExitCode(t, options)
    63  	require.Equal(t, TerraformPlanChangesPresentExitCode, exitCode)
    64  }
    65  
    66  func TestPlanWithExitCodeWithFailure(t *testing.T) {
    67  	t.Parallel()
    68  
    69  	testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-with-plan-error", t.Name())
    70  	require.NoError(t, err)
    71  
    72  	options := &Options{
    73  		TerraformDir: testFolder,
    74  	}
    75  
    76  	exitCode, getExitCodeErr := InitAndPlanWithExitCodeE(t, options)
    77  	require.NoError(t, getExitCodeErr)
    78  	require.Equal(t, exitCode, 1)
    79  }
    80  
    81  func TestTgPlanAllNoError(t *testing.T) {
    82  	t.Parallel()
    83  
    84  	testFolder, err := files.CopyTerragruntFolderToTemp("../../test/fixtures/terragrunt/terragrunt-multi-plan", t.Name())
    85  	require.NoError(t, err)
    86  
    87  	options := &Options{
    88  		TerraformDir:    testFolder,
    89  		TerraformBinary: "terragrunt",
    90  	}
    91  
    92  	getExitCode, errExitCode := TgPlanAllExitCodeE(t, options)
    93  	// GetExitCodeForRunCommandError was unable to determine the exit code correctly
    94  	if errExitCode != nil {
    95  		t.Fatal(errExitCode)
    96  	}
    97  
    98  	// Since PlanAllExitCodeTgE returns error codes, we want to compare against 1
    99  	require.Equal(t, DefaultSuccessExitCode, getExitCode)
   100  }
   101  
   102  func TestTgPlanAllWithError(t *testing.T) {
   103  	t.Parallel()
   104  
   105  	testFolder, err := files.CopyTerragruntFolderToTemp("../../test/fixtures/terragrunt/terragrunt-with-plan-error", t.Name())
   106  	require.NoError(t, err)
   107  
   108  	options := &Options{
   109  		TerraformDir:    testFolder,
   110  		TerraformBinary: "terragrunt",
   111  	}
   112  
   113  	getExitCode, errExitCode := TgPlanAllExitCodeE(t, options)
   114  	// GetExitCodeForRunCommandError was unable to determine the exit code correctly
   115  	require.NoError(t, errExitCode)
   116  
   117  	require.Equal(t, DefaultErrorExitCode, getExitCode)
   118  }