github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/settings/settings_test.go (about) 1 package settings 2 3 import ( 4 "fmt" 5 "net/url" 6 "os" 7 "path/filepath" 8 "strings" 9 "testing" 10 11 "github.com/drycc/workflow-cli/version" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 const sFile string = `{"username":"t","ssl_verify":false,"controller":"http://foo.bar","token":"a"}` 16 17 func createTempProfile(contents string) (string, error) { 18 name, err := os.MkdirTemp("", "client") 19 20 if err != nil { 21 return "", err 22 } 23 24 file := filepath.Join(name, "test.json") 25 26 return file, os.WriteFile(file, []byte(contents), 0775) 27 } 28 29 type comparison struct { 30 key interface{} 31 expected interface{} 32 } 33 34 func TestLoadSave(t *testing.T) { 35 t.Parallel() 36 // Load profile from file and confirm it is correctly parsed. 37 file, err := createTempProfile(sFile) 38 if err != nil { 39 t.Fatal(err) 40 } 41 42 s, err := Load(file) 43 44 if err != nil { 45 t.Fatal(err) 46 } 47 48 tests := []comparison{ 49 { 50 key: false, 51 expected: s.Client.VerifySSL, 52 }, 53 { 54 key: "a", 55 expected: s.Client.Token, 56 }, 57 { 58 key: "t", 59 expected: s.Username, 60 }, 61 { 62 key: "http://foo.bar", 63 expected: s.Client.ControllerURL.String(), 64 }, 65 { 66 key: 100, 67 expected: s.Limit, 68 }, 69 { 70 key: "Drycc Client " + version.Version, 71 expected: s.Client.UserAgent, 72 }, 73 } 74 75 if err := checkComparisons(tests); err != nil { 76 t.Error(err) 77 } 78 79 // Modify profile and confirm it is correctly saved 80 s.Client.VerifySSL = true 81 s.Client.Token = "b" 82 s.Username = "c" 83 s.Limit = 10 84 85 u, err := url.Parse("http://drycc.test") 86 87 if err != nil { 88 t.Fatal(err) 89 } 90 91 s.Client.ControllerURL = u 92 93 // Create a tempdir and set as HOME. 94 dir, err := os.MkdirTemp("", "drycchome") 95 if err != nil { 96 t.Fatal(err) 97 } 98 defer os.RemoveAll(dir) 99 SetHome(dir) 100 101 if _, err = s.Save(file); err != nil { 102 t.Fatal(err) 103 } 104 105 s, err = Load(file) 106 107 if err != nil { 108 t.Fatal(err) 109 } 110 111 tests = []comparison{ 112 { 113 key: true, 114 expected: s.Client.VerifySSL, 115 }, 116 { 117 key: "b", 118 expected: s.Client.Token, 119 }, 120 { 121 key: "c", 122 expected: s.Username, 123 }, 124 { 125 key: "http://drycc.test", 126 expected: s.Client.ControllerURL.String(), 127 }, 128 { 129 key: 10, 130 expected: s.Limit, 131 }, 132 { 133 key: "Drycc Client " + version.Version, 134 expected: s.Client.UserAgent, 135 }, 136 } 137 138 if err := checkComparisons(tests); err != nil { 139 t.Error(err) 140 } 141 } 142 143 func checkComparisons(tests []comparison) error { 144 for _, check := range tests { 145 if check.key != check.expected { 146 return fmt.Errorf("Expected %v, Got %v", check.key, check.expected) 147 } 148 } 149 150 return nil 151 } 152 153 func TestDeleteSettings(t *testing.T) { 154 t.Parallel() 155 156 file, err := createTempProfile("") 157 if err != nil { 158 t.Fatal(err) 159 } 160 161 if err := Delete(file); err != nil { 162 t.Fatal(err) 163 } 164 165 if _, err := os.Stat(file); err == nil { 166 t.Errorf("File %s exists, supposed to have been deleted.", file) 167 } 168 169 // Test the deleting an nonexistent settings file isn't an error. 170 if err := Delete(file); err != nil { 171 t.Fatal(err) 172 } 173 } 174 175 func TestNotLoggedIn(t *testing.T) { 176 t.Parallel() 177 178 name, err := os.MkdirTemp("", "client") 179 180 if err != nil { 181 t.Fatal(err) 182 } 183 184 _, err = Load(filepath.Join(name, "test.json")) 185 assert.NotEqual(t, err, nil, "error load") 186 if !strings.Contains(err.Error(), "client configuration file not found") { 187 t.Error("expected configuration error, Got:", err.Error()) 188 } 189 }