github.com/terraform-linters/tflint@v0.51.2-0.20240520175844-3750771571b6/terraform/meta_test.go (about)

     1  package terraform
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"testing"
     7  )
     8  
     9  func TestWorkspace(t *testing.T) {
    10  	currentDir, err := os.Getwd()
    11  	if err != nil {
    12  		t.Fatal(err)
    13  	}
    14  
    15  	tests := []struct {
    16  		name string
    17  		dir  string
    18  		env  map[string]string
    19  		want string
    20  	}{
    21  		{
    22  			name: "default",
    23  			want: "default",
    24  		},
    25  		{
    26  			name: "TF_WORKSPACE",
    27  			env:  map[string]string{"TF_WORKSPACE": "dev"},
    28  			want: "dev",
    29  		},
    30  		{
    31  			name: "env file",
    32  			dir:  filepath.Join(currentDir, "test-fixtures", "workspace"),
    33  			want: "staging",
    34  		},
    35  		{
    36  			name: "TF_DATA_DIR",
    37  			dir:  filepath.Join(currentDir, "test-fixtures", "workspace"),
    38  			env:  map[string]string{"TF_DATA_DIR": ".terraform_production"},
    39  			want: "production",
    40  		},
    41  	}
    42  
    43  	for _, test := range tests {
    44  		t.Run(test.name, func(t *testing.T) {
    45  			if test.dir != "" {
    46  				if err := os.Chdir(test.dir); err != nil {
    47  					t.Fatal(err)
    48  				}
    49  				defer func() {
    50  					if err := os.Chdir(currentDir); err != nil {
    51  						t.Fatal(err)
    52  					}
    53  				}()
    54  			}
    55  
    56  			for k, v := range test.env {
    57  				t.Setenv(k, v)
    58  			}
    59  
    60  			got := Workspace()
    61  			if test.want != got {
    62  				t.Errorf("want: %s, got: %s", test.want, got)
    63  			}
    64  		})
    65  	}
    66  }