github.com/ablease/cli@v6.37.1-0.20180613014814-3adbb7d7fb19+incompatible/actor/v2action/organization_test.go (about) 1 package v2action_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 . "code.cloudfoundry.org/cli/actor/v2action" 8 "code.cloudfoundry.org/cli/actor/v2action/v2actionfakes" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 10 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" 11 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant" 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 ) 15 16 var _ = Describe("Org Actions", func() { 17 var ( 18 actor *Actor 19 fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient 20 ) 21 22 BeforeEach(func() { 23 fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient) 24 actor = NewActor(fakeCloudControllerClient, nil, nil) 25 }) 26 27 Describe("GetOrganization", func() { 28 var ( 29 org Organization 30 warnings Warnings 31 err error 32 ) 33 34 JustBeforeEach(func() { 35 org, warnings, err = actor.GetOrganization("some-org-guid") 36 }) 37 38 Context("when the org exists", func() { 39 BeforeEach(func() { 40 fakeCloudControllerClient.GetOrganizationReturns( 41 ccv2.Organization{ 42 GUID: "some-org-guid", 43 Name: "some-org", 44 QuotaDefinitionGUID: "some-quota-definition-guid", 45 }, 46 ccv2.Warnings{"warning-1", "warning-2"}, 47 nil) 48 }) 49 50 It("returns the org and all warnings", func() { 51 Expect(err).ToNot(HaveOccurred()) 52 53 Expect(org.GUID).To(Equal("some-org-guid")) 54 Expect(org.Name).To(Equal("some-org")) 55 Expect(org.QuotaDefinitionGUID).To(Equal("some-quota-definition-guid")) 56 57 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 58 59 Expect(fakeCloudControllerClient.GetOrganizationCallCount()).To(Equal(1)) 60 guid := fakeCloudControllerClient.GetOrganizationArgsForCall(0) 61 Expect(guid).To(Equal("some-org-guid")) 62 }) 63 }) 64 65 Context("when the org does not exist", func() { 66 BeforeEach(func() { 67 fakeCloudControllerClient.GetOrganizationReturns( 68 ccv2.Organization{}, 69 ccv2.Warnings{"warning-1", "warning-2"}, 70 ccerror.ResourceNotFoundError{}, 71 ) 72 }) 73 74 It("returns warnings and OrganizationNotFoundError", func() { 75 Expect(err).To(MatchError(actionerror.OrganizationNotFoundError{GUID: "some-org-guid"})) 76 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 77 }) 78 }) 79 80 Context("when client returns an error", func() { 81 var expectedErr error 82 83 BeforeEach(func() { 84 expectedErr = errors.New("some get org error") 85 fakeCloudControllerClient.GetOrganizationReturns( 86 ccv2.Organization{}, 87 ccv2.Warnings{"warning-1", "warning-2"}, 88 expectedErr, 89 ) 90 }) 91 92 It("returns warnings and the error", func() { 93 Expect(err).To(MatchError(expectedErr)) 94 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 95 }) 96 }) 97 }) 98 99 Describe("GetOrganizationByName", func() { 100 var ( 101 org Organization 102 warnings Warnings 103 err error 104 ) 105 106 JustBeforeEach(func() { 107 org, warnings, err = actor.GetOrganizationByName("some-org") 108 }) 109 110 Context("when the org exists", func() { 111 BeforeEach(func() { 112 fakeCloudControllerClient.GetOrganizationsReturns( 113 []ccv2.Organization{ 114 {GUID: "some-org-guid"}, 115 }, 116 ccv2.Warnings{"warning-1", "warning-2"}, 117 nil) 118 }) 119 120 It("returns the org and all warnings", func() { 121 Expect(org.GUID).To(Equal("some-org-guid")) 122 Expect(err).ToNot(HaveOccurred()) 123 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 124 125 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 126 filters := fakeCloudControllerClient.GetOrganizationsArgsForCall(0) 127 Expect(filters).To(Equal( 128 []ccv2.Filter{{ 129 Type: constant.NameFilter, 130 Operator: constant.EqualOperator, 131 Values: []string{"some-org"}, 132 }})) 133 }) 134 }) 135 136 Context("when the org does not exist", func() { 137 BeforeEach(func() { 138 fakeCloudControllerClient.GetOrganizationsReturns( 139 []ccv2.Organization{}, 140 nil, 141 nil, 142 ) 143 }) 144 145 It("returns OrganizationNotFoundError", func() { 146 Expect(err).To(MatchError(actionerror.OrganizationNotFoundError{Name: "some-org"})) 147 }) 148 }) 149 150 Context("when multiple orgs exist with the same name", func() { 151 BeforeEach(func() { 152 fakeCloudControllerClient.GetOrganizationsReturns( 153 []ccv2.Organization{ 154 {GUID: "org-1-guid"}, 155 {GUID: "org-2-guid"}, 156 }, 157 nil, 158 nil, 159 ) 160 }) 161 162 It("returns MultipleOrganizationsFoundError", func() { 163 Expect(err).To(MatchError("Organization name 'some-org' matches multiple GUIDs: org-1-guid, org-2-guid")) 164 }) 165 }) 166 167 Context("when an error is encountered", func() { 168 var returnedErr error 169 170 BeforeEach(func() { 171 returnedErr = errors.New("get-orgs-error") 172 fakeCloudControllerClient.GetOrganizationsReturns( 173 []ccv2.Organization{}, 174 ccv2.Warnings{ 175 "warning-1", 176 "warning-2", 177 }, 178 returnedErr, 179 ) 180 }) 181 182 It("returns the error and all warnings", func() { 183 Expect(err).To(MatchError(returnedErr)) 184 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 185 }) 186 }) 187 }) 188 189 Describe("DeleteOrganization", func() { 190 var ( 191 warnings Warnings 192 deleteOrgErr error 193 job ccv2.Job 194 ) 195 196 JustBeforeEach(func() { 197 warnings, deleteOrgErr = actor.DeleteOrganization("some-org") 198 }) 199 200 Context("the organization is deleted successfully", func() { 201 BeforeEach(func() { 202 fakeCloudControllerClient.GetOrganizationsReturns([]ccv2.Organization{ 203 {GUID: "some-org-guid"}, 204 }, ccv2.Warnings{"get-org-warning"}, nil) 205 206 job = ccv2.Job{ 207 GUID: "some-job-guid", 208 Status: constant.JobStatusFinished, 209 } 210 211 fakeCloudControllerClient.DeleteOrganizationJobReturns( 212 job, ccv2.Warnings{"delete-org-warning"}, nil) 213 214 fakeCloudControllerClient.PollJobReturns(ccv2.Warnings{"polling-warnings"}, nil) 215 }) 216 217 It("returns warnings and deletes the org", func() { 218 Expect(warnings).To(ConsistOf("get-org-warning", "delete-org-warning", "polling-warnings")) 219 Expect(deleteOrgErr).ToNot(HaveOccurred()) 220 221 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 222 filters := fakeCloudControllerClient.GetOrganizationsArgsForCall(0) 223 Expect(filters).To(Equal( 224 []ccv2.Filter{{ 225 Type: constant.NameFilter, 226 Operator: constant.EqualOperator, 227 Values: []string{"some-org"}, 228 }})) 229 230 Expect(fakeCloudControllerClient.DeleteOrganizationJobCallCount()).To(Equal(1)) 231 orgGuid := fakeCloudControllerClient.DeleteOrganizationJobArgsForCall(0) 232 Expect(orgGuid).To(Equal("some-org-guid")) 233 234 Expect(fakeCloudControllerClient.PollJobCallCount()).To(Equal(1)) 235 job := fakeCloudControllerClient.PollJobArgsForCall(0) 236 Expect(job.GUID).To(Equal("some-job-guid")) 237 }) 238 }) 239 240 Context("when getting the org returns an error", func() { 241 BeforeEach(func() { 242 fakeCloudControllerClient.GetOrganizationsReturns( 243 []ccv2.Organization{}, 244 ccv2.Warnings{ 245 "get-org-warning", 246 }, 247 nil, 248 ) 249 }) 250 251 It("returns an error and all warnings", func() { 252 Expect(warnings).To(ConsistOf("get-org-warning")) 253 Expect(deleteOrgErr).To(MatchError(actionerror.OrganizationNotFoundError{ 254 Name: "some-org", 255 })) 256 }) 257 }) 258 259 Context("when the delete returns an error", func() { 260 var returnedErr error 261 262 BeforeEach(func() { 263 returnedErr = errors.New("delete-org-error") 264 265 fakeCloudControllerClient.GetOrganizationsReturns( 266 []ccv2.Organization{{GUID: "org-1-guid"}}, 267 ccv2.Warnings{ 268 "get-org-warning", 269 }, 270 nil, 271 ) 272 273 fakeCloudControllerClient.DeleteOrganizationJobReturns( 274 ccv2.Job{}, 275 ccv2.Warnings{"delete-org-warning"}, 276 returnedErr) 277 }) 278 279 It("returns the error and all warnings", func() { 280 Expect(deleteOrgErr).To(MatchError(returnedErr)) 281 Expect(warnings).To(ConsistOf("get-org-warning", "delete-org-warning")) 282 }) 283 }) 284 285 Context("when the job polling has an error", func() { 286 var expectedErr error 287 BeforeEach(func() { 288 fakeCloudControllerClient.GetOrganizationsReturns([]ccv2.Organization{ 289 {GUID: "some-org-guid"}, 290 }, ccv2.Warnings{"get-org-warning"}, nil) 291 292 fakeCloudControllerClient.DeleteOrganizationJobReturns( 293 ccv2.Job{}, ccv2.Warnings{"delete-org-warning"}, nil) 294 295 expectedErr = errors.New("Never expected, by anyone") 296 fakeCloudControllerClient.PollJobReturns(ccv2.Warnings{"polling-warnings"}, expectedErr) 297 }) 298 299 It("returns the error from job polling", func() { 300 Expect(warnings).To(ConsistOf("get-org-warning", "delete-org-warning", "polling-warnings")) 301 Expect(deleteOrgErr).To(MatchError(expectedErr)) 302 }) 303 }) 304 }) 305 306 Describe("GetOrganizations", func() { 307 var ( 308 orgs []Organization 309 warnings Warnings 310 err error 311 ) 312 313 JustBeforeEach(func() { 314 orgs, warnings, err = actor.GetOrganizations() 315 }) 316 317 Context("when there are multiple organizations", func() { 318 BeforeEach(func() { 319 fakeCloudControllerClient.GetOrganizationsReturns( 320 []ccv2.Organization{ 321 { 322 Name: "some-org-1", 323 }, 324 { 325 Name: "some-org-2", 326 }, 327 }, 328 ccv2.Warnings{"warning-1", "warning-2"}, 329 nil) 330 }) 331 332 It("returns the org and all warnings", func() { 333 Expect(err).ToNot(HaveOccurred()) 334 335 Expect(orgs).To(HaveLen(2)) 336 Expect(orgs[0].Name).To(Equal("some-org-1")) 337 Expect(orgs[1].Name).To(Equal("some-org-2")) 338 339 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 340 341 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 342 queriesArg := fakeCloudControllerClient.GetOrganizationsArgsForCall(0) 343 Expect(queriesArg).To(BeNil()) 344 }) 345 }) 346 347 Context("when there are no orgs", func() { 348 BeforeEach(func() { 349 fakeCloudControllerClient.GetOrganizationsReturns( 350 []ccv2.Organization{}, 351 ccv2.Warnings{"warning-1", "warning-2"}, 352 nil, 353 ) 354 }) 355 356 It("returns warnings and an empty list of orgs", func() { 357 Expect(err).ToNot(HaveOccurred()) 358 359 Expect(orgs).To(HaveLen(0)) 360 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 361 }) 362 }) 363 364 Context("when client returns an error", func() { 365 var expectedErr error 366 367 BeforeEach(func() { 368 expectedErr = errors.New("some get org error") 369 fakeCloudControllerClient.GetOrganizationsReturns( 370 []ccv2.Organization{}, 371 ccv2.Warnings{"warning-1", "warning-2"}, 372 expectedErr, 373 ) 374 }) 375 376 It("returns warnings and the error", func() { 377 Expect(err).To(MatchError(expectedErr)) 378 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 379 }) 380 }) 381 }) 382 })