github.com/terraform-modules-krish/terratest@v0.29.0/modules/terraform/workspace_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/assert" 8 ) 9 10 func TestWorkspaceNew(t *testing.T) { 11 t.Parallel() 12 13 testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-workspace", t.Name()) 14 if err != nil { 15 t.Fatal(err) 16 } 17 18 options := &Options{ 19 TerraformDir: testFolder, 20 } 21 22 out := WorkspaceSelectOrNew(t, options, "terratest") 23 24 assert.Equal(t, "terratest", out) 25 } 26 27 func TestWorkspaceIllegalName(t *testing.T) { 28 t.Parallel() 29 30 testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-workspace", t.Name()) 31 if err != nil { 32 t.Fatal(err) 33 } 34 35 options := &Options{ 36 TerraformDir: testFolder, 37 } 38 39 out, err := WorkspaceSelectOrNewE(t, options, "###@@@&&&") 40 41 assert.Error(t, err) 42 assert.Equal(t, "", out, "%q should be an empty string", out) 43 } 44 45 func TestWorkspaceSelect(t *testing.T) { 46 t.Parallel() 47 48 testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-workspace", t.Name()) 49 if err != nil { 50 t.Fatal(err) 51 } 52 53 options := &Options{ 54 TerraformDir: testFolder, 55 } 56 57 out := WorkspaceSelectOrNew(t, options, "terratest") 58 assert.Equal(t, "terratest", out) 59 60 out = WorkspaceSelectOrNew(t, options, "default") 61 assert.Equal(t, "default", out) 62 } 63 64 func TestWorkspaceApply(t *testing.T) { 65 t.Parallel() 66 67 testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-workspace", t.Name()) 68 if err != nil { 69 t.Fatal(err) 70 } 71 72 options := &Options{ 73 TerraformDir: testFolder, 74 } 75 76 WorkspaceSelectOrNew(t, options, "Terratest") 77 out := InitAndApply(t, options) 78 79 assert.Contains(t, out, "Hello, Terratest") 80 } 81 82 func TestIsExistingWorkspace(t *testing.T) { 83 t.Parallel() 84 85 testCases := []struct { 86 out string 87 name string 88 expected bool 89 }{ 90 {" default\n* foo\n", "default", true}, 91 {"* default\n foo\n", "default", true}, 92 {" foo\n* default\n", "default", true}, 93 {"* foo\n default\n", "default", true}, 94 {" foo\n* bar\n", "default", false}, 95 {"* foo\n bar\n", "default", false}, 96 {" default\n* foobar\n", "foo", false}, 97 {"* default\n foobar\n", "foo", false}, 98 {" default\n* foo\n", "foobar", false}, 99 {"* default\n foo\n", "foobar", false}, 100 {"* default\n foo\n", "foo", true}, 101 } 102 103 for _, testCase := range testCases { 104 actual := isExistingWorkspace(testCase.out, testCase.name) 105 assert.Equal(t, testCase.expected, actual, "Out: %q, Name: %q", testCase.out, testCase.name) 106 } 107 } 108 109 func TestNameMatchesWorkspace(t *testing.T) { 110 t.Parallel() 111 112 testCases := []struct { 113 name string 114 workspace string 115 expected bool 116 }{ 117 {"default", " default", true}, 118 {"default", "* default", true}, 119 {"default", "", false}, 120 {"foo", " foobar", false}, 121 {"foo", "* foobar", false}, 122 {"foobar", " foo", false}, 123 {"foobar", "* foo", false}, 124 {"foo", " foo", true}, 125 {"foo", "* foo", true}, 126 } 127 128 for _, testCase := range testCases { 129 actual := nameMatchesWorkspace(testCase.name, testCase.workspace) 130 assert.Equal(t, testCase.expected, actual, "Name: %q, Workspace: %q", testCase.name, testCase.workspace) 131 } 132 }