github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/actor/v7action/environment_variable_test.go (about) 1 package v7action_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 . "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/actor/v7action/v7actionfakes" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 ) 13 14 var _ = Describe("Environment Variable Actions", func() { 15 Describe("GetEnvironmentVariablesByApplicationNameAndSpace", func() { 16 var ( 17 actor *Actor 18 fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient 19 appName string 20 spaceGUID string 21 fetchedEnvVariables EnvironmentVariableGroups 22 executeErr error 23 warnings Warnings 24 ) 25 26 BeforeEach(func() { 27 fakeCloudControllerClient = new(v7actionfakes.FakeCloudControllerClient) 28 actor = NewActor(fakeCloudControllerClient, nil, nil, nil) 29 appName = "some-app" 30 spaceGUID = "space-guid" 31 }) 32 33 JustBeforeEach(func() { 34 fetchedEnvVariables, warnings, executeErr = actor.GetEnvironmentVariablesByApplicationNameAndSpace(appName, spaceGUID) 35 }) 36 37 When("finding the app fails", func() { 38 BeforeEach(func() { 39 fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error")) 40 }) 41 42 It("returns an error", func() { 43 Expect(executeErr).To(MatchError("get-application-error")) 44 Expect(warnings).To(ConsistOf("get-application-warning")) 45 }) 46 }) 47 48 When("finding the app succeeds", func() { 49 BeforeEach(func() { 50 fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil) 51 }) 52 53 When("getting the app environment variables fails", func() { 54 BeforeEach(func() { 55 fakeCloudControllerClient.GetApplicationEnvironmentReturns(ccv3.Environment{}, ccv3.Warnings{"some-env-var-warnings"}, errors.New("some-env-var-error")) 56 }) 57 It("returns an error", func() { 58 Expect(executeErr).To(MatchError("some-env-var-error")) 59 Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings")) 60 }) 61 }) 62 63 When("getting the app environment variables succeeds", func() { 64 BeforeEach(func() { 65 fakeCloudControllerClient.GetApplicationEnvironmentReturns( 66 ccv3.Environment{ 67 System: map[string]interface{}{"system-var": "system-val"}, 68 Application: map[string]interface{}{"app-var": "app-val"}, 69 EnvironmentVariables: map[string]interface{}{"user-var": "user-val"}, 70 Running: map[string]interface{}{"running-var": "running-val"}, 71 Staging: map[string]interface{}{"staging-var": "staging-val"}, 72 }, 73 ccv3.Warnings{"some-env-var-warnings"}, 74 nil, 75 ) 76 }) 77 78 It("makes the API call to get the app environment variables and returns all warnings", func() { 79 Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1)) 80 Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf( 81 ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}}, 82 ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}}, 83 )) 84 85 Expect(fakeCloudControllerClient.GetApplicationEnvironmentCallCount()).To(Equal(1)) 86 Expect(fakeCloudControllerClient.GetApplicationEnvironmentArgsForCall(0)).To(Equal("some-app-guid")) 87 Expect(fetchedEnvVariables).To(Equal(EnvironmentVariableGroups{ 88 System: map[string]interface{}{"system-var": "system-val"}, 89 Application: map[string]interface{}{"app-var": "app-val"}, 90 EnvironmentVariables: map[string]interface{}{"user-var": "user-val"}, 91 Running: map[string]interface{}{"running-var": "running-val"}, 92 Staging: map[string]interface{}{"staging-var": "staging-val"}, 93 })) 94 Expect(executeErr).ToNot(HaveOccurred()) 95 Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings")) 96 }) 97 }) 98 }) 99 }) 100 101 Describe("SetEnvironmentVariableByApplicationNameAndSpace", func() { 102 var ( 103 actor *Actor 104 fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient 105 appName string 106 spaceGUID string 107 envPair EnvironmentVariablePair 108 executeErr error 109 warnings Warnings 110 ) 111 112 BeforeEach(func() { 113 fakeCloudControllerClient = new(v7actionfakes.FakeCloudControllerClient) 114 actor = NewActor(fakeCloudControllerClient, nil, nil, nil) 115 appName = "some-app" 116 spaceGUID = "space-guid" 117 envPair = EnvironmentVariablePair{Key: "my-var", Value: "my-val"} 118 }) 119 120 JustBeforeEach(func() { 121 warnings, executeErr = actor.SetEnvironmentVariableByApplicationNameAndSpace(appName, spaceGUID, envPair) 122 }) 123 124 When("finding the app fails", func() { 125 BeforeEach(func() { 126 fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error")) 127 }) 128 129 It("returns an error", func() { 130 Expect(executeErr).To(MatchError("get-application-error")) 131 Expect(warnings).To(ConsistOf("get-application-warning")) 132 }) 133 }) 134 135 When("finding the app succeeds", func() { 136 BeforeEach(func() { 137 fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil) 138 }) 139 140 When("updating the app environment variables fails", func() { 141 BeforeEach(func() { 142 fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(ccv3.EnvironmentVariables{}, ccv3.Warnings{"some-env-var-warnings"}, errors.New("some-env-var-error")) 143 }) 144 It("returns an error", func() { 145 Expect(executeErr).To(MatchError("some-env-var-error")) 146 Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings")) 147 }) 148 }) 149 150 When("updating the app environment variables succeeds", func() { 151 BeforeEach(func() { 152 fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns( 153 ccv3.EnvironmentVariables{ 154 "my-var": {Value: "my-val", IsSet: true}, 155 }, 156 ccv3.Warnings{"some-env-var-warnings"}, 157 nil, 158 ) 159 }) 160 161 It("makes the API call to update the app environment variables and returns all warnings", func() { 162 Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1)) 163 Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf( 164 ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}}, 165 ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}}, 166 )) 167 168 Expect(fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesCallCount()).To(Equal(1)) 169 appGUIDArg, envVarsArg := fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesArgsForCall(0) 170 Expect(appGUIDArg).To(Equal("some-app-guid")) 171 Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{ 172 "my-var": {Value: "my-val", IsSet: true}, 173 })) 174 Expect(executeErr).ToNot(HaveOccurred()) 175 Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings")) 176 }) 177 }) 178 }) 179 }) 180 181 Describe("UnsetEnvironmentVariableByApplicationNameAndSpace", func() { 182 var ( 183 actor *Actor 184 fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient 185 appName string 186 spaceGUID string 187 envVariableName string 188 executeErr error 189 warnings Warnings 190 ) 191 192 BeforeEach(func() { 193 fakeCloudControllerClient = new(v7actionfakes.FakeCloudControllerClient) 194 actor = NewActor(fakeCloudControllerClient, nil, nil, nil) 195 appName = "some-app" 196 spaceGUID = "space-guid" 197 envVariableName = "my-var" 198 }) 199 200 JustBeforeEach(func() { 201 warnings, executeErr = actor.UnsetEnvironmentVariableByApplicationNameAndSpace(appName, spaceGUID, envVariableName) 202 }) 203 204 When("finding the app fails", func() { 205 BeforeEach(func() { 206 fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error")) 207 }) 208 209 It("returns an error", func() { 210 Expect(executeErr).To(MatchError("get-application-error")) 211 Expect(warnings).To(ConsistOf("get-application-warning")) 212 }) 213 }) 214 215 When("finding the app succeeds", func() { 216 BeforeEach(func() { 217 fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil) 218 }) 219 220 When("getting the app environment variables fails", func() { 221 BeforeEach(func() { 222 fakeCloudControllerClient.GetApplicationEnvironmentReturns(ccv3.Environment{}, ccv3.Warnings{"some-get-env-var-warnings"}, errors.New("some-env-var-error")) 223 }) 224 It("returns an error", func() { 225 Expect(executeErr).To(MatchError("some-env-var-error")) 226 Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings")) 227 }) 228 }) 229 230 When("the variable doesn't exists", func() { 231 BeforeEach(func() { 232 fakeCloudControllerClient.GetApplicationEnvironmentReturns( 233 ccv3.Environment{}, 234 ccv3.Warnings{"some-get-env-var-warnings"}, 235 nil, 236 ) 237 }) 238 It("returns an EnvironmentVariableNotSetError", func() { 239 Expect(executeErr).To(MatchError(actionerror.EnvironmentVariableNotSetError{EnvironmentVariableName: "my-var"})) 240 Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings")) 241 }) 242 }) 243 244 When("the variable exists", func() { 245 BeforeEach(func() { 246 fakeCloudControllerClient.GetApplicationEnvironmentReturns( 247 ccv3.Environment{ 248 EnvironmentVariables: map[string]interface{}{"my-var": "my-val"}, 249 }, 250 ccv3.Warnings{"some-get-env-var-warnings"}, 251 nil, 252 ) 253 }) 254 When("updating the app environment variables fails", func() { 255 BeforeEach(func() { 256 fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(ccv3.EnvironmentVariables{}, ccv3.Warnings{"some-patch-env-var-warnings"}, errors.New("some-env-var-error")) 257 }) 258 It("returns an error", func() { 259 Expect(executeErr).To(MatchError("some-env-var-error")) 260 Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings", "some-patch-env-var-warnings")) 261 }) 262 }) 263 264 When("updating the app environment variables succeeds", func() { 265 BeforeEach(func() { 266 fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns( 267 ccv3.EnvironmentVariables{ 268 "my-var": {Value: "my-val", IsSet: true}, 269 }, 270 ccv3.Warnings{"some-patch-env-var-warnings"}, 271 nil, 272 ) 273 }) 274 It("makes the API call to update the app environment variables and returns all warnings", func() { 275 Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1)) 276 Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf( 277 ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}}, 278 ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}}, 279 )) 280 281 Expect(fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesCallCount()).To(Equal(1)) 282 appGUIDArg, envVarsArg := fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesArgsForCall(0) 283 Expect(appGUIDArg).To(Equal("some-app-guid")) 284 Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{ 285 "my-var": {Value: "", IsSet: false}, 286 })) 287 288 Expect(executeErr).ToNot(HaveOccurred()) 289 Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings", "some-patch-env-var-warnings")) 290 }) 291 }) 292 }) 293 }) 294 }) 295 })