github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/actor/v7action/organization_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 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 ) 14 15 var _ = Describe("Organization Actions", func() { 16 var ( 17 actor *Actor 18 fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient 19 ) 20 21 BeforeEach(func() { 22 fakeCloudControllerClient = new(v7actionfakes.FakeCloudControllerClient) 23 actor = NewActor(fakeCloudControllerClient, nil, nil, nil, nil) 24 }) 25 26 Describe("GetOrganizations", func() { 27 var ( 28 ccv3Organizations []ccv3.Organization 29 organizations []Organization 30 31 organization1Name string 32 organization1GUID string 33 34 organization2Name string 35 organization2GUID string 36 37 organization3Name string 38 organization3GUID string 39 40 warnings Warnings 41 executeErr error 42 ) 43 44 BeforeEach(func() { 45 ccv3Organizations = []ccv3.Organization{ 46 {Name: organization1Name, GUID: organization1GUID}, 47 {Name: organization2Name, GUID: organization2GUID}, 48 {Name: organization3Name, GUID: organization3GUID}, 49 } 50 }) 51 52 When("the API layer call is successful", func() { 53 54 BeforeEach(func() { 55 fakeCloudControllerClient.GetOrganizationsReturns( 56 ccv3Organizations, 57 ccv3.Warnings{"some-organizations-warning"}, 58 nil, 59 ) 60 }) 61 62 JustBeforeEach(func() { 63 organizations, warnings, executeErr = actor.GetOrganizations("") 64 }) 65 66 It("does not error", func() { 67 Expect(executeErr).ToNot(HaveOccurred()) 68 }) 69 70 It("does not pass through the label selector", func() { 71 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 72 expectedQuery := []ccv3.Query{ 73 {Key: ccv3.OrderBy, Values: []string{ccv3.NameOrder}}, 74 } 75 actualQuery := fakeCloudControllerClient.GetOrganizationsArgsForCall(0) 76 Expect(actualQuery).To(Equal(expectedQuery)) 77 }) 78 79 It("returns back the organizations and warnings", func() { 80 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 81 82 Expect(organizations).To(ConsistOf( 83 Organization{Name: organization1Name, GUID: organization1GUID}, 84 Organization{Name: organization2Name, GUID: organization2GUID}, 85 Organization{Name: organization3Name, GUID: organization3GUID}, 86 )) 87 Expect(warnings).To(ConsistOf("some-organizations-warning")) 88 }) 89 }) 90 91 When("a label selector is provided", func() { 92 JustBeforeEach(func() { 93 organizations, warnings, executeErr = actor.GetOrganizations("some-label-selector") 94 }) 95 96 It("passes the label selector through", func() { 97 Expect(executeErr).ToNot(HaveOccurred()) 98 99 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 100 101 expectedQuery := []ccv3.Query{ 102 {Key: ccv3.OrderBy, Values: []string{ccv3.NameOrder}}, 103 {Key: ccv3.LabelSelectorFilter, Values: []string{"some-label-selector"}}, 104 } 105 actualQuery := fakeCloudControllerClient.GetOrganizationsArgsForCall(0) 106 Expect(actualQuery).To(Equal(expectedQuery)) 107 }) 108 109 }) 110 111 When("when the API layer call returns an error", func() { 112 BeforeEach(func() { 113 fakeCloudControllerClient.GetOrganizationsReturns( 114 []ccv3.Organization{}, 115 ccv3.Warnings{"some-organizations-warning"}, 116 errors.New("some-organizations-error"), 117 ) 118 }) 119 120 JustBeforeEach(func() { 121 organizations, warnings, executeErr = actor.GetOrganizations("") 122 }) 123 124 It("returns the error and prints warnings", func() { 125 Expect(executeErr).To(MatchError("some-organizations-error")) 126 Expect(warnings).To(ConsistOf("some-organizations-warning")) 127 Expect(organizations).To(ConsistOf([]Organization{})) 128 129 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 130 }) 131 132 }) 133 }) 134 135 Describe("GetOrganizationByGUID", func() { 136 When("the org exists", func() { 137 BeforeEach(func() { 138 fakeCloudControllerClient.GetOrganizationReturns( 139 ccv3.Organization{ 140 Name: "some-org-name", 141 GUID: "some-org-guid", 142 }, 143 ccv3.Warnings{"some-warning"}, 144 nil, 145 ) 146 }) 147 148 It("returns the organization and warnings", func() { 149 org, warnings, err := actor.GetOrganizationByGUID("some-org-guid") 150 Expect(err).ToNot(HaveOccurred()) 151 Expect(org).To(Equal(Organization{ 152 Name: "some-org-name", 153 GUID: "some-org-guid", 154 })) 155 Expect(warnings).To(ConsistOf("some-warning")) 156 157 Expect(fakeCloudControllerClient.GetOrganizationCallCount()).To(Equal(1)) 158 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(0)).To(Equal( 159 "some-org-guid", 160 )) 161 }) 162 }) 163 164 When("the cloud controller client returns an error", func() { 165 var expectedError error 166 167 BeforeEach(func() { 168 expectedError = errors.New("I am a CloudControllerClient Error") 169 fakeCloudControllerClient.GetOrganizationReturns( 170 ccv3.Organization{}, 171 ccv3.Warnings{"some-warning"}, 172 expectedError) 173 }) 174 175 It("returns the warnings and the error", func() { 176 _, warnings, err := actor.GetOrganizationByGUID("some-org-guid") 177 Expect(warnings).To(ConsistOf("some-warning")) 178 Expect(err).To(MatchError(expectedError)) 179 }) 180 }) 181 }) 182 183 Describe("GetOrganizationByName", func() { 184 When("the org exists", func() { 185 BeforeEach(func() { 186 fakeCloudControllerClient.GetOrganizationsReturns( 187 []ccv3.Organization{ 188 { 189 Name: "some-org-name", 190 GUID: "some-org-guid", 191 }, 192 }, 193 ccv3.Warnings{"some-warning"}, 194 nil, 195 ) 196 }) 197 198 It("returns the organization and warnings", func() { 199 org, warnings, err := actor.GetOrganizationByName("some-org-name") 200 Expect(err).ToNot(HaveOccurred()) 201 Expect(org).To(Equal(Organization{ 202 Name: "some-org-name", 203 GUID: "some-org-guid", 204 })) 205 Expect(warnings).To(ConsistOf("some-warning")) 206 207 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 208 Expect(fakeCloudControllerClient.GetOrganizationsArgsForCall(0)).To(ConsistOf( 209 ccv3.Query{Key: ccv3.NameFilter, Values: []string{"some-org-name"}}, 210 )) 211 }) 212 }) 213 214 When("the cloud controller client returns an error", func() { 215 var expectedError error 216 217 BeforeEach(func() { 218 expectedError = errors.New("I am a CloudControllerClient Error") 219 fakeCloudControllerClient.GetOrganizationsReturns( 220 []ccv3.Organization{}, 221 ccv3.Warnings{"some-warning"}, 222 expectedError) 223 }) 224 225 It("returns the warnings and the error", func() { 226 _, warnings, err := actor.GetOrganizationByName("some-org-name") 227 Expect(warnings).To(ConsistOf("some-warning")) 228 Expect(err).To(MatchError(expectedError)) 229 }) 230 }) 231 }) 232 233 Describe("GetDefaultDomain", func() { 234 var ( 235 domain Domain 236 warnings Warnings 237 executeErr error 238 239 orgGUID = "org-guid" 240 ) 241 242 JustBeforeEach(func() { 243 domain, warnings, executeErr = actor.GetDefaultDomain(orgGUID) 244 }) 245 246 When("the api call is successful", func() { 247 BeforeEach(func() { 248 fakeCloudControllerClient.GetDefaultDomainReturns( 249 ccv3.Domain{ 250 Name: "some-domain-name", 251 GUID: "some-domain-guid", 252 }, 253 ccv3.Warnings{"some-warning"}, 254 nil, 255 ) 256 }) 257 258 It("returns the domain and warnings", func() { 259 Expect(executeErr).ToNot(HaveOccurred()) 260 Expect(domain).To(Equal(Domain{ 261 Name: "some-domain-name", 262 GUID: "some-domain-guid", 263 })) 264 Expect(warnings).To(ConsistOf("some-warning")) 265 266 Expect(fakeCloudControllerClient.GetDefaultDomainCallCount()).To(Equal(1)) 267 Expect(fakeCloudControllerClient.GetDefaultDomainArgsForCall(0)).To(Equal(orgGUID)) 268 }) 269 }) 270 271 When("the cloud controller client returns an error", func() { 272 var expectedError error 273 274 BeforeEach(func() { 275 expectedError = errors.New("I am a CloudControllerClient Error") 276 fakeCloudControllerClient.GetDefaultDomainReturns( 277 ccv3.Domain{}, 278 ccv3.Warnings{"some-warning"}, 279 expectedError) 280 }) 281 282 It("returns the warnings and the error", func() { 283 Expect(warnings).To(ConsistOf("some-warning")) 284 Expect(executeErr).To(MatchError(expectedError)) 285 }) 286 }) 287 }) 288 289 When("the org does not exist", func() { 290 BeforeEach(func() { 291 fakeCloudControllerClient.GetOrganizationsReturns( 292 []ccv3.Organization{}, 293 ccv3.Warnings{"some-warning"}, 294 nil, 295 ) 296 }) 297 298 It("returns an OrganizationNotFoundError and the warnings", func() { 299 _, warnings, err := actor.GetOrganizationByName("some-org-name") 300 Expect(warnings).To(ConsistOf("some-warning")) 301 Expect(err).To(MatchError(actionerror.OrganizationNotFoundError{Name: "some-org-name"})) 302 }) 303 }) 304 305 Describe("CreateOrganization", func() { 306 var ( 307 org Organization 308 warnings Warnings 309 err error 310 ) 311 312 JustBeforeEach(func() { 313 org, warnings, err = actor.CreateOrganization("some-org-name") 314 }) 315 316 When("the org is created successfully", func() { 317 BeforeEach(func() { 318 fakeCloudControllerClient.CreateOrganizationReturns( 319 ccv3.Organization{Name: "some-org-name", GUID: "some-org-guid"}, 320 ccv3.Warnings{"warning-1", "warning-2"}, 321 nil, 322 ) 323 }) 324 325 It("returns the org resource", func() { 326 Expect(err).NotTo(HaveOccurred()) 327 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 328 Expect(org).To(Equal(Organization{Name: "some-org-name", GUID: "some-org-guid"})) 329 }) 330 }) 331 332 When("the request fails", func() { 333 BeforeEach(func() { 334 fakeCloudControllerClient.CreateOrganizationReturns( 335 ccv3.Organization{}, 336 ccv3.Warnings{"warning-1", "warning-2"}, 337 errors.New("create-org-failed"), 338 ) 339 }) 340 341 It("returns warnings and the client error", func() { 342 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 343 Expect(err).To(MatchError("create-org-failed")) 344 }) 345 }) 346 }) 347 348 Describe("DeleteOrganization", func() { 349 var ( 350 warnings Warnings 351 err error 352 ) 353 354 JustBeforeEach(func() { 355 warnings, err = actor.DeleteOrganization("some-org") 356 }) 357 358 When("the org is not found", func() { 359 BeforeEach(func() { 360 fakeCloudControllerClient.GetOrganizationsReturns( 361 []ccv3.Organization{}, 362 ccv3.Warnings{ 363 "warning-1", 364 "warning-2", 365 }, 366 nil, 367 ) 368 }) 369 370 It("returns an OrganizationNotFoundError", func() { 371 Expect(err).To(MatchError(actionerror.OrganizationNotFoundError{Name: "some-org"})) 372 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 373 }) 374 }) 375 376 When("the org is found", func() { 377 BeforeEach(func() { 378 fakeCloudControllerClient.GetOrganizationsReturns( 379 []ccv3.Organization{{Name: "some-org", GUID: "some-org-guid"}}, 380 ccv3.Warnings{"warning-1", "warning-2"}, 381 nil, 382 ) 383 }) 384 385 When("the delete returns an error", func() { 386 var expectedErr error 387 388 BeforeEach(func() { 389 expectedErr = errors.New("some delete space error") 390 fakeCloudControllerClient.DeleteOrganizationReturns( 391 ccv3.JobURL(""), 392 ccv3.Warnings{"warning-5", "warning-6"}, 393 expectedErr, 394 ) 395 }) 396 397 It("returns the error", func() { 398 Expect(err).To(Equal(expectedErr)) 399 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-5", "warning-6")) 400 }) 401 }) 402 403 When("the delete returns a job", func() { 404 BeforeEach(func() { 405 fakeCloudControllerClient.DeleteOrganizationReturns( 406 ccv3.JobURL("some-url"), 407 ccv3.Warnings{"warning-5", "warning-6"}, 408 nil, 409 ) 410 }) 411 412 When("polling errors", func() { 413 var expectedErr error 414 415 BeforeEach(func() { 416 expectedErr = errors.New("Never expected, by anyone") 417 fakeCloudControllerClient.PollJobReturns(ccv3.Warnings{"warning-7", "warning-8"}, expectedErr) 418 }) 419 420 It("returns the error", func() { 421 Expect(err).To(Equal(expectedErr)) 422 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-5", "warning-6", "warning-7", "warning-8")) 423 }) 424 }) 425 426 When("the job is successful", func() { 427 BeforeEach(func() { 428 fakeCloudControllerClient.PollJobReturns(ccv3.Warnings{"warning-7", "warning-8"}, nil) 429 }) 430 431 It("returns warnings and no error", func() { 432 Expect(err).ToNot(HaveOccurred()) 433 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-5", "warning-6", "warning-7", "warning-8")) 434 435 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 436 Expect(fakeCloudControllerClient.GetOrganizationsArgsForCall(0)).To(Equal([]ccv3.Query{{ 437 Key: ccv3.NameFilter, 438 Values: []string{"some-org"}, 439 }})) 440 441 Expect(fakeCloudControllerClient.DeleteOrganizationCallCount()).To(Equal(1)) 442 Expect(fakeCloudControllerClient.DeleteOrganizationArgsForCall(0)).To(Equal("some-org-guid")) 443 444 Expect(fakeCloudControllerClient.PollJobCallCount()).To(Equal(1)) 445 Expect(fakeCloudControllerClient.PollJobArgsForCall(0)).To(Equal(ccv3.JobURL("some-url"))) 446 }) 447 }) 448 }) 449 }) 450 }) 451 452 Describe("RenameOrganization", func() { 453 var ( 454 oldOrgName = "old-and-stale-org-name" 455 newOrgName = "fresh-and-new-org-name" 456 457 org Organization 458 warnings Warnings 459 executeErr error 460 ) 461 462 JustBeforeEach(func() { 463 org, warnings, executeErr = actor.RenameOrganization( 464 oldOrgName, 465 newOrgName, 466 ) 467 }) 468 469 It("delegate to the actor to get the org", func() { 470 // assert on the underlying client call because we dont have a fake actor 471 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 472 }) 473 474 When("getting the org fails", func() { 475 BeforeEach(func() { 476 fakeCloudControllerClient.GetOrganizationsReturns( 477 nil, 478 ccv3.Warnings{"get-org-warning"}, 479 errors.New("get-org-error"), 480 ) 481 }) 482 483 It("returns the error and warnings", func() { 484 Expect(executeErr).To(MatchError("get-org-error")) 485 Expect(warnings).To(ConsistOf("get-org-warning")) 486 }) 487 }) 488 489 When("getting the org succeeds", func() { 490 BeforeEach(func() { 491 fakeCloudControllerClient.GetOrganizationsReturns( 492 []ccv3.Organization{{Name: oldOrgName, GUID: "org-guid"}}, 493 ccv3.Warnings{"get-org-warning"}, 494 nil, 495 ) 496 }) 497 498 It("delegates to the client to update the org", func() { 499 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 500 Expect(fakeCloudControllerClient.UpdateOrganizationCallCount()).To(Equal(1)) 501 Expect(fakeCloudControllerClient.UpdateOrganizationArgsForCall(0)).To(Equal(ccv3.Organization{ 502 GUID: "org-guid", 503 Name: newOrgName, 504 })) 505 }) 506 507 When("updating the org fails", func() { 508 BeforeEach(func() { 509 fakeCloudControllerClient.UpdateOrganizationReturns( 510 ccv3.Organization{}, 511 ccv3.Warnings{"update-org-warning"}, 512 errors.New("update-org-error"), 513 ) 514 }) 515 516 It("returns an error and all warnings", func() { 517 Expect(executeErr).To(MatchError("update-org-error")) 518 Expect(warnings).To(ConsistOf("get-org-warning", "update-org-warning")) 519 }) 520 521 }) 522 523 When("updating the org succeeds", func() { 524 BeforeEach(func() { 525 fakeCloudControllerClient.UpdateOrganizationReturns( 526 ccv3.Organization{Name: newOrgName, GUID: "org-guid"}, 527 ccv3.Warnings{"update-org-warning"}, 528 nil, 529 ) 530 }) 531 532 It("returns warnings and no error", func() { 533 Expect(executeErr).ToNot(HaveOccurred()) 534 Expect(warnings).To(ConsistOf("get-org-warning", "update-org-warning")) 535 Expect(org).To(Equal(Organization{Name: newOrgName, GUID: "org-guid"})) 536 }) 537 }) 538 }) 539 }) 540 })