github.com/hazelops/ize@v1.1.12-0.20230915191306-97d7c0e48f11/internal/commands/aws_profile_test.go (about) 1 package commands 2 3 import ( 4 _ "github.com/golang/mock/mockgen/model" 5 "github.com/hazelops/ize/internal/config" 6 "github.com/spf13/pflag" 7 "github.com/spf13/viper" 8 "os" 9 "path/filepath" 10 "reflect" 11 "strings" 12 "testing" 13 ) 14 15 func TestAWSProfile(t *testing.T) { 16 tests := []struct { 17 name string 18 args []string 19 wantErr bool 20 wantAWSCredentials string 21 env map[string]string 22 }{ 23 { 24 name: "success (only env)", 25 args: []string{"gen", "aws-profile"}, 26 env: map[string]string{"AWS_ACCESS_KEY_ID": "test", "AWS_SECRET_ACCESS_KEY": "test", "AWS_REGION": "us-east-1", "AWS_PROFILE": "test"}, 27 wantAWSCredentials: "[test]\naws_access_key_id = test\naws_secret_access_key = test\nregion = us-east-1\n\n", 28 wantErr: false, 29 }, 30 { 31 name: "success (only flags)", 32 args: []string{"-r=us-east-2", "-p=test", "gen", "aws-profile"}, 33 env: map[string]string{"AWS_ACCESS_KEY_ID": "test", "AWS_SECRET_ACCESS_KEY": "test"}, 34 wantAWSCredentials: "[test]\naws_access_key_id = test\naws_secret_access_key = test\nregion = us-east-2\n\n", 35 wantErr: false, 36 }, 37 { 38 name: "success (flags and env)", 39 args: []string{"-r=us-west-2", "gen", "aws-profile"}, 40 env: map[string]string{"AWS_ACCESS_KEY_ID": "test", "AWS_SECRET_ACCESS_KEY": "test", "AWS_PROFILE": "testnut"}, 41 wantAWSCredentials: "[testnut]\naws_access_key_id = test\naws_secret_access_key = test\nregion = us-west-2\n\n", 42 wantErr: false, 43 }, 44 { 45 name: "failed (missing aws creds)", 46 args: []string{"gen", "aws-profile"}, 47 env: map[string]string{"ENV": "test", "AWS_PROFILE": "test"}, 48 wantErr: true, 49 }, 50 } 51 for _, tt := range tests { 52 t.Run(tt.name, func(t *testing.T) { 53 viper.Reset() 54 // Set env 55 for k, v := range tt.env { 56 os.Setenv(k, v) 57 } 58 59 temp, err := os.MkdirTemp("", "test") 60 if err != nil { 61 t.Error(err) 62 return 63 } 64 err = os.Chdir(temp) 65 if err != nil { 66 t.Error(err) 67 return 68 } 69 err = os.MkdirAll(filepath.Join(temp, ".ize", "env", "test"), 0777) 70 if err != nil { 71 t.Error(err) 72 return 73 } 74 75 os.Setenv("HOME", temp) 76 77 cfg := new(config.Project) 78 cmd := newRootCmd(cfg) 79 80 cmd.SetArgs(tt.args) 81 cmd.PersistentFlags().ParseErrorsWhitelist.UnknownFlags = true 82 err = cmd.PersistentFlags().Parse(tt.args) 83 if err != nil { 84 t.Error(err) 85 return 86 } 87 88 cmd.PersistentFlags().VisitAll(func(f *pflag.Flag) { 89 if len(f.Value.String()) != 0 { 90 _ = viper.BindPFlag(strings.ReplaceAll(f.Name, "-", "_"), cmd.PersistentFlags().Lookup(f.Name)) 91 } 92 }) 93 94 config.InitConfig() 95 96 err = cmd.Execute() 97 if (err != nil) != tt.wantErr { 98 t.Errorf("ize gen tfenv error = %v, wantErr %v", err, tt.wantErr) 99 return 100 } 101 102 file, err := os.ReadFile(filepath.Join(temp, ".aws", "credentials")) 103 if err != nil { 104 t.Error(err) 105 return 106 } 107 108 if !reflect.DeepEqual(string(file), tt.wantAWSCredentials) { 109 t.Errorf("aws credentials = %v, want %v", string(file), tt.wantAWSCredentials) 110 } 111 112 // Unset env 113 for k, _ := range tt.env { 114 os.Unsetenv(k) 115 } 116 }) 117 } 118 }