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