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