github.com/cloudfoundry/cli@v7.1.0+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/resources" 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 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 When("finding the app succeeds", func() { 50 BeforeEach(func() { 51 fakeCloudControllerClient.GetApplicationsReturns([]resources.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil) 52 }) 53 54 When("getting the app environment variables fails", func() { 55 BeforeEach(func() { 56 fakeCloudControllerClient.GetApplicationEnvironmentReturns(ccv3.Environment{}, 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 When("getting the app environment variables succeeds", func() { 65 BeforeEach(func() { 66 fakeCloudControllerClient.GetApplicationEnvironmentReturns( 67 ccv3.Environment{ 68 System: map[string]interface{}{"system-var": "system-val"}, 69 Application: map[string]interface{}{"app-var": "app-val"}, 70 EnvironmentVariables: map[string]interface{}{"user-var": "user-val"}, 71 Running: map[string]interface{}{"running-var": "running-val"}, 72 Staging: 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.GetApplicationEnvironmentCallCount()).To(Equal(1)) 87 Expect(fakeCloudControllerClient.GetApplicationEnvironmentArgsForCall(0)).To(Equal("some-app-guid")) 88 Expect(fetchedEnvVariables).To(Equal(EnvironmentVariableGroups{ 89 System: map[string]interface{}{"system-var": "system-val"}, 90 Application: map[string]interface{}{"app-var": "app-val"}, 91 EnvironmentVariables: map[string]interface{}{"user-var": "user-val"}, 92 Running: map[string]interface{}{"running-var": "running-val"}, 93 Staging: 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 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 When("finding the app succeeds", func() { 137 BeforeEach(func() { 138 fakeCloudControllerClient.GetApplicationsReturns([]resources.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil) 139 }) 140 141 When("updating the app environment variables fails", func() { 142 BeforeEach(func() { 143 fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(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 When("updating the app environment variables succeeds", func() { 152 BeforeEach(func() { 153 fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns( 154 ccv3.EnvironmentVariables{ 155 "my-var": {Value: "my-val", IsSet: true}, 156 }, 157 ccv3.Warnings{"some-env-var-warnings"}, 158 nil, 159 ) 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 Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf( 165 ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}}, 166 ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}}, 167 )) 168 169 Expect(fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesCallCount()).To(Equal(1)) 170 appGUIDArg, envVarsArg := fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesArgsForCall(0) 171 Expect(appGUIDArg).To(Equal("some-app-guid")) 172 Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{ 173 "my-var": {Value: "my-val", IsSet: true}, 174 })) 175 Expect(executeErr).ToNot(HaveOccurred()) 176 Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings")) 177 }) 178 }) 179 }) 180 }) 181 182 Describe("UnsetEnvironmentVariableByApplicationNameAndSpace", func() { 183 var ( 184 actor *Actor 185 fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient 186 appName string 187 spaceGUID string 188 envVariableName string 189 executeErr error 190 warnings Warnings 191 ) 192 193 BeforeEach(func() { 194 fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient) 195 actor = NewActor(fakeCloudControllerClient, nil, nil, nil) 196 appName = "some-app" 197 spaceGUID = "space-guid" 198 envVariableName = "my-var" 199 }) 200 201 JustBeforeEach(func() { 202 warnings, executeErr = actor.UnsetEnvironmentVariableByApplicationNameAndSpace(appName, spaceGUID, envVariableName) 203 }) 204 205 When("finding the app fails", func() { 206 BeforeEach(func() { 207 fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error")) 208 }) 209 210 It("returns an error", func() { 211 Expect(executeErr).To(MatchError("get-application-error")) 212 Expect(warnings).To(ConsistOf("get-application-warning")) 213 }) 214 }) 215 216 When("finding the app succeeds", func() { 217 BeforeEach(func() { 218 fakeCloudControllerClient.GetApplicationsReturns([]resources.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil) 219 }) 220 221 When("getting the app environment variables fails", func() { 222 BeforeEach(func() { 223 fakeCloudControllerClient.GetApplicationEnvironmentReturns(ccv3.Environment{}, ccv3.Warnings{"some-get-env-var-warnings"}, errors.New("some-env-var-error")) 224 }) 225 It("returns an error", func() { 226 Expect(executeErr).To(MatchError("some-env-var-error")) 227 Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings")) 228 }) 229 }) 230 231 When("the variable doesn't exists", func() { 232 BeforeEach(func() { 233 fakeCloudControllerClient.GetApplicationEnvironmentReturns( 234 ccv3.Environment{}, 235 ccv3.Warnings{"some-get-env-var-warnings"}, 236 nil, 237 ) 238 }) 239 It("returns an EnvironmentVariableNotSetError", func() { 240 Expect(executeErr).To(MatchError(actionerror.EnvironmentVariableNotSetError{EnvironmentVariableName: "my-var"})) 241 Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings")) 242 }) 243 }) 244 245 When("the variable exists", func() { 246 BeforeEach(func() { 247 fakeCloudControllerClient.GetApplicationEnvironmentReturns( 248 ccv3.Environment{ 249 EnvironmentVariables: map[string]interface{}{"my-var": "my-val"}, 250 }, 251 ccv3.Warnings{"some-get-env-var-warnings"}, 252 nil, 253 ) 254 }) 255 When("updating the app environment variables fails", func() { 256 BeforeEach(func() { 257 fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(ccv3.EnvironmentVariables{}, ccv3.Warnings{"some-patch-env-var-warnings"}, errors.New("some-env-var-error")) 258 }) 259 It("returns an error", func() { 260 Expect(executeErr).To(MatchError("some-env-var-error")) 261 Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings", "some-patch-env-var-warnings")) 262 }) 263 }) 264 265 When("updating the app environment variables succeeds", func() { 266 BeforeEach(func() { 267 fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns( 268 ccv3.EnvironmentVariables{ 269 "my-var": {Value: "my-val", IsSet: true}, 270 }, 271 ccv3.Warnings{"some-patch-env-var-warnings"}, 272 nil, 273 ) 274 }) 275 It("makes the API call to update the app environment variables and returns all warnings", func() { 276 Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1)) 277 Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf( 278 ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}}, 279 ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}}, 280 )) 281 282 Expect(fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesCallCount()).To(Equal(1)) 283 appGUIDArg, envVarsArg := fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesArgsForCall(0) 284 Expect(appGUIDArg).To(Equal("some-app-guid")) 285 Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{ 286 "my-var": {Value: "", IsSet: false}, 287 })) 288 289 Expect(executeErr).ToNot(HaveOccurred()) 290 Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings", "some-patch-env-var-warnings")) 291 }) 292 }) 293 }) 294 }) 295 }) 296 })