github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/actor/v3action/environment_variable_test.go (about) 1 package v3action_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 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(fakeCloudControllerClient, nil, nil, 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 79 It("makes the API call to get the app environment variables and returns all warnings", func() { 80 Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1)) 81 Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf( 82 ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}}, 83 ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}}, 84 )) 85 86 Expect(fakeCloudControllerClient.GetApplicationEnvironmentVariablesCallCount()).To(Equal(1)) 87 Expect(fakeCloudControllerClient.GetApplicationEnvironmentVariablesArgsForCall(0)).To(Equal("some-app-guid")) 88 Expect(fetchedEnvVariables).To(Equal(EnvironmentVariableGroups{ 89 SystemProvided: map[string]interface{}{"system-var": "system-val"}, 90 ApplicationProvided: map[string]interface{}{"app-var": "app-val"}, 91 UserProvided: map[string]interface{}{"user-var": "user-val"}, 92 RunningGroup: map[string]interface{}{"running-var": "running-val"}, 93 StagingGroup: map[string]interface{}{"staging-var": "staging-val"}, 94 })) 95 Expect(executeErr).ToNot(HaveOccurred()) 96 Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings")) 97 }) 98 }) 99 }) 100 }) 101 102 Describe("SetEnvironmentVariableByApplicationNameAndSpace", func() { 103 var ( 104 actor *Actor 105 fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient 106 appName string 107 spaceGUID string 108 envPair EnvironmentVariablePair 109 executeErr error 110 warnings Warnings 111 ) 112 113 BeforeEach(func() { 114 fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient) 115 actor = NewActor(fakeCloudControllerClient, nil, nil, nil) 116 appName = "some-app" 117 spaceGUID = "space-guid" 118 envPair = EnvironmentVariablePair{Key: "my-var", Value: "my-val"} 119 }) 120 121 JustBeforeEach(func() { 122 warnings, executeErr = actor.SetEnvironmentVariableByApplicationNameAndSpace(appName, spaceGUID, envPair) 123 }) 124 125 Context("when finding the app fails", func() { 126 BeforeEach(func() { 127 fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error")) 128 }) 129 130 It("returns an error", func() { 131 Expect(executeErr).To(MatchError("get-application-error")) 132 Expect(warnings).To(ConsistOf("get-application-warning")) 133 }) 134 }) 135 136 Context("when finding the app succeeds", func() { 137 BeforeEach(func() { 138 fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil) 139 }) 140 141 Context("when updating the app environment variables fails", func() { 142 BeforeEach(func() { 143 fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns(ccv3.EnvironmentVariables{}, ccv3.Warnings{"some-env-var-warnings"}, errors.New("some-env-var-error")) 144 }) 145 It("returns an error", func() { 146 Expect(executeErr).To(MatchError("some-env-var-error")) 147 Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings")) 148 }) 149 }) 150 151 Context("when updating the app environment variables succeeds", func() { 152 BeforeEach(func() { 153 fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns( 154 ccv3.EnvironmentVariables{ 155 Variables: map[string]types.FilteredString{"my-var": {Value: "my-val", IsSet: true}}, 156 }, 157 ccv3.Warnings{"some-env-var-warnings"}, 158 nil, 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.PatchApplicationUserProvidedEnvironmentVariablesCallCount()).To(Equal(1)) 169 appGUIDArg, envVarsArg := fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesArgsForCall(0) 170 Expect(appGUIDArg).To(Equal("some-app-guid")) 171 Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{ 172 Variables: map[string]types.FilteredString{"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 *v3actionfakes.FakeCloudControllerClient 185 appName string 186 spaceGUID string 187 envVariableName string 188 executeErr error 189 warnings Warnings 190 ) 191 192 BeforeEach(func() { 193 fakeCloudControllerClient = new(v3actionfakes.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 Context("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 Context("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 Context("when getting the app environment variables fails", func() { 221 BeforeEach(func() { 222 fakeCloudControllerClient.GetApplicationEnvironmentVariablesReturns(ccv3.EnvironmentVariableGroups{}, 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 Context("when the variable doesn't exists", func() { 231 BeforeEach(func() { 232 fakeCloudControllerClient.GetApplicationEnvironmentVariablesReturns( 233 ccv3.EnvironmentVariableGroups{}, 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 Context("when the variable exists", func() { 245 BeforeEach(func() { 246 fakeCloudControllerClient.GetApplicationEnvironmentVariablesReturns( 247 ccv3.EnvironmentVariableGroups{ 248 UserProvided: map[string]interface{}{"my-var": "my-val"}, 249 }, 250 ccv3.Warnings{"some-get-env-var-warnings"}, 251 nil, 252 ) 253 }) 254 Context("when updating the app environment variables fails", func() { 255 BeforeEach(func() { 256 fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns(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 Context("when updating the app environment variables succeeds", func() { 265 BeforeEach(func() { 266 fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns( 267 ccv3.EnvironmentVariables{ 268 Variables: map[string]types.FilteredString{"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.PatchApplicationUserProvidedEnvironmentVariablesCallCount()).To(Equal(1)) 282 appGUIDArg, envVarsArg := fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesArgsForCall(0) 283 Expect(appGUIDArg).To(Equal("some-app-guid")) 284 Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{ 285 Variables: map[string]types.FilteredString{"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 })