github.com/loafoe/cli@v7.1.0+incompatible/actor/v2v3action/service_instance_test.go (about) 1 package v2v3action_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/v2v3action" 9 "code.cloudfoundry.org/cli/actor/v2v3action/v2v3actionfakes" 10 "code.cloudfoundry.org/cli/actor/v3action" 11 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" 12 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant" 13 "code.cloudfoundry.org/cli/resources" 14 15 . "github.com/onsi/ginkgo" 16 . "github.com/onsi/gomega" 17 ) 18 19 var _ = Describe("Service Instance Actions", func() { 20 var ( 21 actor *Actor 22 fakeV2Actor *v2v3actionfakes.FakeV2Actor 23 fakeV3Actor *v2v3actionfakes.FakeV3Actor 24 ) 25 26 BeforeEach(func() { 27 fakeV2Actor = new(v2v3actionfakes.FakeV2Actor) 28 fakeV3Actor = new(v2v3actionfakes.FakeV3Actor) 29 actor = NewActor(fakeV2Actor, fakeV3Actor) 30 }) 31 32 Describe("ShareServiceInstanceToSpaceNameByNameAndSpaceAndOrganization", func() { 33 var ( 34 shareToSpaceName string 35 serviceInstanceName string 36 sourceSpaceGUID string 37 shareToOrgGUID string 38 39 warnings Warnings 40 shareErr error 41 ) 42 43 BeforeEach(func() { 44 shareToSpaceName = "some-space-name" 45 serviceInstanceName = "some-service-instance" 46 sourceSpaceGUID = "some-source-space-guid" 47 shareToOrgGUID = "some-org-guid" 48 }) 49 50 JustBeforeEach(func() { 51 warnings, shareErr = actor.ShareServiceInstanceToSpaceNameByNameAndSpaceAndOrganization(shareToSpaceName, serviceInstanceName, sourceSpaceGUID, shareToOrgGUID) 52 }) 53 54 When("no errors occur getting the service instance", func() { 55 When("no errors occur getting the space we are sharing to", func() { 56 When("the service instance is a managed service instance", func() { 57 BeforeEach(func() { 58 fakeV2Actor.GetServiceInstanceByNameAndSpaceReturns( 59 v2action.ServiceInstance{ 60 GUID: "some-service-instance-guid", 61 ServiceGUID: "some-service-guid", 62 Type: constant.ManagedService, 63 }, 64 v2action.Warnings{"get-service-instance-warning"}, 65 nil) 66 67 fakeV2Actor.GetSpaceByOrganizationAndNameReturns( 68 v2action.Space{ 69 GUID: "not-shared-space-guid", 70 }, 71 v2action.Warnings{"get-space-warning"}, 72 nil) 73 }) 74 75 When("no errors occur getting the service", func() { 76 BeforeEach(func() { 77 fakeV2Actor.GetServiceReturns( 78 v2action.Service{ 79 Extra: ccv2.ServiceExtra{ 80 Shareable: true, 81 }, 82 }, 83 v2action.Warnings{"get-service-warning"}, 84 nil) 85 }) 86 87 When("no errors occur getting feature flags", func() { 88 BeforeEach(func() { 89 fakeV2Actor.GetFeatureFlagsReturns( 90 []v2action.FeatureFlag{ 91 { 92 Name: "some-feature-flag", 93 Enabled: true, 94 }, 95 { 96 Name: "service_instance_sharing", 97 Enabled: true, 98 }, 99 }, 100 v2action.Warnings{"get-feature-flags-warning"}, 101 nil) 102 }) 103 104 When("no errors occur getting the spaces the service instance is shared to", func() { 105 BeforeEach(func() { 106 fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceReturns( 107 []v2action.ServiceInstanceSharedTo{ 108 {SpaceGUID: "already-shared-space-guid-1"}, 109 {SpaceGUID: "already-shared-space-guid-2"}, 110 }, 111 v2action.Warnings{"get-service-instance-shared-tos-warning"}, 112 nil) 113 }) 114 115 When("the service instance is NOT already shared with this space", func() { 116 When("no errors occur sharing the service instance to this space", func() { 117 BeforeEach(func() { 118 fakeV3Actor.ShareServiceInstanceToSpacesReturns( 119 resources.RelationshipList{ 120 GUIDs: []string{"some-space-guid"}, 121 }, 122 v3action.Warnings{"share-service-instance-warning"}, 123 nil) 124 }) 125 126 It("shares the service instance to this space and returns all warnings", func() { 127 Expect(shareErr).ToNot(HaveOccurred()) 128 Expect(warnings).To(ConsistOf( 129 "get-service-instance-warning", 130 "get-space-warning", 131 "get-service-warning", 132 "get-feature-flags-warning", 133 "get-service-instance-shared-tos-warning", 134 "share-service-instance-warning")) 135 136 Expect(fakeV2Actor.GetServiceInstanceByNameAndSpaceCallCount()).To(Equal(1)) 137 serviceInstanceNameArg, spaceGUIDArg := fakeV2Actor.GetServiceInstanceByNameAndSpaceArgsForCall(0) 138 Expect(serviceInstanceNameArg).To(Equal(serviceInstanceName)) 139 Expect(spaceGUIDArg).To(Equal(sourceSpaceGUID)) 140 141 Expect(fakeV2Actor.GetServiceCallCount()).To(Equal(1)) 142 Expect(fakeV2Actor.GetServiceArgsForCall(0)).To(Equal("some-service-guid")) 143 144 Expect(fakeV2Actor.GetFeatureFlagsCallCount()).To(Equal(1)) 145 146 Expect(fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceCallCount()).To(Equal(1)) 147 Expect(fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceArgsForCall(0)).To(Equal("some-service-instance-guid")) 148 149 Expect(fakeV2Actor.GetSpaceByOrganizationAndNameCallCount()).To(Equal(1)) 150 orgGUIDArg, spaceNameArg := fakeV2Actor.GetSpaceByOrganizationAndNameArgsForCall(0) 151 Expect(orgGUIDArg).To(Equal(shareToOrgGUID)) 152 Expect(spaceNameArg).To(Equal(shareToSpaceName)) 153 154 Expect(fakeV3Actor.ShareServiceInstanceToSpacesCallCount()).To(Equal(1)) 155 serviceInstanceGUIDArg, spaceGUIDsArg := fakeV3Actor.ShareServiceInstanceToSpacesArgsForCall(0) 156 Expect(serviceInstanceGUIDArg).To(Equal("some-service-instance-guid")) 157 Expect(spaceGUIDsArg).To(Equal([]string{"not-shared-space-guid"})) 158 }) 159 }) 160 161 When("an error occurs sharing the service instance to this space", func() { 162 var expectedErr error 163 164 BeforeEach(func() { 165 expectedErr = errors.New("share service instance error") 166 fakeV3Actor.ShareServiceInstanceToSpacesReturns( 167 resources.RelationshipList{}, 168 v3action.Warnings{"share-service-instance-warning"}, 169 expectedErr) 170 }) 171 172 It("returns the error and all warnings", func() { 173 Expect(shareErr).To(MatchError(expectedErr)) 174 Expect(warnings).To(ConsistOf( 175 "get-service-instance-warning", 176 "get-service-warning", 177 "get-feature-flags-warning", 178 "get-service-instance-shared-tos-warning", 179 "get-space-warning", 180 "share-service-instance-warning")) 181 }) 182 }) 183 }) 184 185 When("the service instance IS already shared with this space", func() { 186 BeforeEach(func() { 187 fakeV2Actor.GetSpaceByOrganizationAndNameReturns( 188 v2action.Space{ 189 GUID: "already-shared-space-guid-2", 190 }, 191 v2action.Warnings{"get-space-warning"}, 192 nil) 193 }) 194 195 It("returns a ServiceInstanceAlreadySharedError and all warnings", func() { 196 Expect(shareErr).To(MatchError(actionerror.ServiceInstanceAlreadySharedError{})) 197 Expect(warnings).To(ConsistOf( 198 "get-service-instance-warning", 199 "get-service-warning", 200 "get-feature-flags-warning", 201 "get-service-instance-shared-tos-warning", 202 "get-space-warning", 203 )) 204 }) 205 }) 206 }) 207 208 When("an error occurs getting the spaces the service instance is shared to", func() { 209 var expectedErr error 210 211 BeforeEach(func() { 212 expectedErr = errors.New("get shared to spaces error") 213 fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceReturns( 214 nil, 215 v2action.Warnings{"get-service-instance-shared-tos-warning"}, 216 expectedErr) 217 }) 218 219 It("returns the error and all warnings", func() { 220 Expect(shareErr).To(MatchError(expectedErr)) 221 Expect(warnings).To(ConsistOf( 222 "get-service-instance-warning", 223 "get-space-warning", 224 "get-service-warning", 225 "get-feature-flags-warning", 226 "get-service-instance-shared-tos-warning")) 227 }) 228 }) 229 }) 230 231 When("an error occurs getting feature flags", func() { 232 var expectedErr error 233 234 BeforeEach(func() { 235 expectedErr = errors.New("get feature flags error") 236 fakeV2Actor.GetFeatureFlagsReturns( 237 nil, 238 v2action.Warnings{"get-feature-flag-warning"}, 239 expectedErr) 240 }) 241 242 It("returns the error and all warnings", func() { 243 Expect(shareErr).To(MatchError(expectedErr)) 244 Expect(warnings).To(ConsistOf( 245 "get-service-instance-warning", 246 "get-space-warning", 247 "get-service-warning", 248 "get-feature-flag-warning")) 249 }) 250 }) 251 }) 252 253 When("an error occurs getting the service", func() { 254 var expectedErr error 255 256 BeforeEach(func() { 257 expectedErr = errors.New("get service error") 258 fakeV2Actor.GetServiceReturns( 259 v2action.Service{}, 260 v2action.Warnings{"get-service-warning"}, 261 expectedErr) 262 }) 263 264 It("returns the error and all warnings", func() { 265 Expect(shareErr).To(MatchError(expectedErr)) 266 Expect(warnings).To(ConsistOf( 267 "get-service-instance-warning", 268 "get-space-warning", 269 "get-service-warning")) 270 }) 271 }) 272 273 When("service sharing is globally disabled, and service sharing is disabled by the service broker", func() { 274 BeforeEach(func() { 275 fakeV2Actor.GetServiceReturns( 276 v2action.Service{ 277 Extra: ccv2.ServiceExtra{ 278 Shareable: false, 279 }, 280 }, 281 v2action.Warnings{"get-service-warning"}, 282 nil) 283 284 fakeV2Actor.GetFeatureFlagsReturns( 285 []v2action.FeatureFlag{ 286 { 287 Name: "some-feature-flag", 288 Enabled: true, 289 }, 290 { 291 Name: "service_instance_sharing", 292 Enabled: false, 293 }, 294 }, 295 v2action.Warnings{"get-feature-flags-warning"}, 296 nil) 297 }) 298 299 It("returns ServiceInstanceNotShareableError and all warnings", func() { 300 Expect(shareErr).To(MatchError(actionerror.ServiceInstanceNotShareableError{ 301 FeatureFlagEnabled: false, 302 ServiceBrokerSharingEnabled: false})) 303 Expect(warnings).To(ConsistOf( 304 "get-service-instance-warning", 305 "get-space-warning", 306 "get-service-warning", 307 "get-feature-flags-warning")) 308 }) 309 }) 310 311 When("service sharing is globally enabled, and service sharing is disabled by the service broker", func() { 312 BeforeEach(func() { 313 fakeV2Actor.GetServiceReturns( 314 v2action.Service{ 315 Extra: ccv2.ServiceExtra{ 316 Shareable: false, 317 }, 318 }, 319 v2action.Warnings{"get-service-warning"}, 320 nil) 321 322 fakeV2Actor.GetFeatureFlagsReturns( 323 []v2action.FeatureFlag{ 324 { 325 Name: "some-feature-flag", 326 Enabled: true, 327 }, 328 { 329 Name: "service_instance_sharing", 330 Enabled: true, 331 }, 332 }, 333 v2action.Warnings{"get-feature-flags-warning"}, 334 nil) 335 }) 336 337 It("returns ServiceInstanceNotShareableError and all warnings", func() { 338 Expect(shareErr).To(MatchError(actionerror.ServiceInstanceNotShareableError{ 339 FeatureFlagEnabled: true, 340 ServiceBrokerSharingEnabled: false})) 341 Expect(warnings).To(ConsistOf( 342 "get-service-instance-warning", 343 "get-space-warning", 344 "get-service-warning", 345 "get-feature-flags-warning")) 346 }) 347 }) 348 349 When("service sharing is globally disabled, and service sharing is enabled by the service broker", func() { 350 BeforeEach(func() { 351 fakeV2Actor.GetServiceReturns( 352 v2action.Service{ 353 Extra: ccv2.ServiceExtra{ 354 Shareable: true, 355 }, 356 }, 357 v2action.Warnings{"get-service-warning"}, 358 nil) 359 360 fakeV2Actor.GetFeatureFlagsReturns( 361 []v2action.FeatureFlag{ 362 { 363 Name: "some-feature-flag", 364 Enabled: true, 365 }, 366 { 367 Name: "service_instance_sharing", 368 Enabled: false, 369 }, 370 }, 371 v2action.Warnings{"get-feature-flags-warning"}, 372 nil) 373 }) 374 375 It("returns ServiceInstanceNotShareableError and all warnings", func() { 376 Expect(shareErr).To(MatchError(actionerror.ServiceInstanceNotShareableError{ 377 FeatureFlagEnabled: false, 378 ServiceBrokerSharingEnabled: true})) 379 Expect(warnings).To(ConsistOf( 380 "get-service-instance-warning", 381 "get-space-warning", 382 "get-service-warning", 383 "get-feature-flags-warning")) 384 }) 385 }) 386 }) 387 388 When("the service instance is not a managed service instance", func() { 389 BeforeEach(func() { 390 fakeV2Actor.GetServiceInstanceByNameAndSpaceReturns( 391 v2action.ServiceInstance{ 392 GUID: "some-service-instance-guid", 393 ServiceGUID: "some-service-guid", 394 Type: constant.UserProvidedService, 395 }, 396 v2action.Warnings{"get-service-instance-warning"}, 397 nil) 398 399 fakeV2Actor.GetSpaceByOrganizationAndNameReturns( 400 v2action.Space{ 401 GUID: "some-space", 402 }, 403 v2action.Warnings{"get-space-warning"}, 404 nil) 405 406 fakeV3Actor.ShareServiceInstanceToSpacesReturns( 407 resources.RelationshipList{}, 408 v3action.Warnings{"share-service-instance-warning"}, 409 errors.New("User-provided services cannot be shared")) 410 }) 411 412 It("always returns the error and warnings", func() { 413 Expect(shareErr).To(MatchError("User-provided services cannot be shared")) 414 Expect(warnings).To(ConsistOf( 415 "get-service-instance-warning", 416 "get-space-warning", 417 "share-service-instance-warning")) 418 419 Expect(fakeV2Actor.GetServiceCallCount()).To(Equal(0)) 420 Expect(fakeV2Actor.GetFeatureFlagsCallCount()).To(Equal(0)) 421 Expect(fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceCallCount()).To(Equal(0)) 422 }) 423 }) 424 }) 425 426 When("an error occurs getting the space we are sharing to", func() { 427 var expectedErr error 428 429 BeforeEach(func() { 430 fakeV2Actor.GetServiceInstanceByNameAndSpaceReturns( 431 v2action.ServiceInstance{}, 432 v2action.Warnings{"get-service-instance-warning"}, 433 nil) 434 435 expectedErr = errors.New("get space error") 436 fakeV2Actor.GetSpaceByOrganizationAndNameReturns( 437 v2action.Space{}, 438 v2action.Warnings{"get-space-warning"}, 439 expectedErr) 440 }) 441 442 It("returns the error and all warnings", func() { 443 Expect(shareErr).To(MatchError(expectedErr)) 444 Expect(warnings).To(ConsistOf( 445 "get-service-instance-warning", 446 "get-space-warning")) 447 }) 448 }) 449 }) 450 451 When("an error occurs getting the service instance", func() { 452 var expectedErr error 453 454 BeforeEach(func() { 455 expectedErr = errors.New("get service instance error") 456 fakeV2Actor.GetServiceInstanceByNameAndSpaceReturns( 457 v2action.ServiceInstance{}, 458 v2action.Warnings{"get-service-instance-warning"}, 459 expectedErr) 460 }) 461 462 It("returns the error and all warnings", func() { 463 Expect(shareErr).To(MatchError(expectedErr)) 464 Expect(warnings).To(ConsistOf("get-service-instance-warning")) 465 }) 466 }) 467 468 When("the service instance does not exist", func() { 469 BeforeEach(func() { 470 fakeV2Actor.GetServiceInstanceByNameAndSpaceReturns( 471 v2action.ServiceInstance{}, 472 v2action.Warnings{"get-service-instance-warning"}, 473 actionerror.ServiceInstanceNotFoundError{}) 474 }) 475 476 It("returns a SharedServiceInstanceNotFoundError and all warnings", func() { 477 Expect(shareErr).To(MatchError(actionerror.SharedServiceInstanceNotFoundError{})) 478 Expect(warnings).To(ConsistOf("get-service-instance-warning")) 479 }) 480 }) 481 }) 482 483 Describe("ShareServiceInstanceToSpaceNameByNameAndSpaceAndOrganizationName", func() { 484 var ( 485 shareToSpaceName string 486 serviceInstanceName string 487 sourceSpaceGUID string 488 shareToOrgName string 489 490 warnings Warnings 491 shareErr error 492 ) 493 494 BeforeEach(func() { 495 shareToSpaceName = "some-space-name" 496 serviceInstanceName = "some-service-instance" 497 sourceSpaceGUID = "some-source-space-guid" 498 shareToOrgName = "some-org-name" 499 }) 500 501 JustBeforeEach(func() { 502 warnings, shareErr = actor.ShareServiceInstanceToSpaceNameByNameAndSpaceAndOrganizationName(shareToSpaceName, serviceInstanceName, sourceSpaceGUID, shareToOrgName) 503 }) 504 505 When("no errors occur getting the org", func() { 506 BeforeEach(func() { 507 fakeV3Actor.GetOrganizationByNameReturns( 508 v3action.Organization{ 509 GUID: "some-org-guid", 510 }, 511 v3action.Warnings{"get-org-warning"}, 512 nil) 513 514 fakeV2Actor.GetServiceInstanceByNameAndSpaceReturns( 515 v2action.ServiceInstance{ 516 GUID: "some-service-instance-guid", 517 ServiceGUID: "some-service-guid", 518 Type: constant.ManagedService, 519 }, 520 v2action.Warnings{"get-service-instance-warning"}, 521 nil) 522 523 fakeV2Actor.GetSpaceByOrganizationAndNameReturns( 524 v2action.Space{ 525 GUID: "not-shared-space-guid", 526 }, 527 v2action.Warnings{"get-space-warning"}, 528 nil) 529 530 fakeV2Actor.GetServiceReturns( 531 v2action.Service{ 532 Extra: ccv2.ServiceExtra{ 533 Shareable: true, 534 }, 535 }, 536 v2action.Warnings{"get-service-warning"}, 537 nil) 538 539 fakeV2Actor.GetFeatureFlagsReturns( 540 []v2action.FeatureFlag{ 541 { 542 Name: "some-feature-flag", 543 Enabled: true, 544 }, 545 { 546 Name: "service_instance_sharing", 547 Enabled: true, 548 }, 549 }, 550 v2action.Warnings{"get-feature-flags-warning"}, 551 nil) 552 553 fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceReturns( 554 []v2action.ServiceInstanceSharedTo{ 555 {SpaceGUID: "already-shared-space-guid-1"}, 556 {SpaceGUID: "already-shared-space-guid-2"}, 557 }, 558 v2action.Warnings{"get-service-instance-shared-tos-warning"}, 559 nil) 560 561 fakeV3Actor.ShareServiceInstanceToSpacesReturns( 562 resources.RelationshipList{ 563 GUIDs: []string{"some-space-guid"}, 564 }, 565 v3action.Warnings{"share-service-instance-warning"}, 566 nil) 567 }) 568 569 It("shares the service instance to this space and returns all warnings", func() { 570 Expect(shareErr).ToNot(HaveOccurred()) 571 Expect(warnings).To(ConsistOf( 572 "get-org-warning", 573 "get-service-instance-warning", 574 "get-space-warning", 575 "get-service-warning", 576 "get-feature-flags-warning", 577 "get-service-instance-shared-tos-warning", 578 "share-service-instance-warning")) 579 580 Expect(fakeV3Actor.GetOrganizationByNameCallCount()).To(Equal(1)) 581 Expect(fakeV3Actor.GetOrganizationByNameArgsForCall(0)).To(Equal(shareToOrgName)) 582 583 Expect(fakeV2Actor.GetServiceInstanceByNameAndSpaceCallCount()).To(Equal(1)) 584 serviceInstanceNameArg, spaceGUIDArg := fakeV2Actor.GetServiceInstanceByNameAndSpaceArgsForCall(0) 585 Expect(serviceInstanceNameArg).To(Equal(serviceInstanceName)) 586 Expect(spaceGUIDArg).To(Equal(sourceSpaceGUID)) 587 588 Expect(fakeV2Actor.GetSpaceByOrganizationAndNameCallCount()).To(Equal(1)) 589 orgGUIDArg, spaceNameArg := fakeV2Actor.GetSpaceByOrganizationAndNameArgsForCall(0) 590 Expect(orgGUIDArg).To(Equal("some-org-guid")) 591 Expect(spaceNameArg).To(Equal(shareToSpaceName)) 592 593 Expect(fakeV2Actor.GetServiceCallCount()).To(Equal(1)) 594 Expect(fakeV2Actor.GetServiceArgsForCall(0)).To(Equal("some-service-guid")) 595 596 Expect(fakeV2Actor.GetFeatureFlagsCallCount()).To(Equal(1)) 597 598 Expect(fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceCallCount()).To(Equal(1)) 599 Expect(fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceArgsForCall(0)).To(Equal("some-service-instance-guid")) 600 601 Expect(fakeV3Actor.ShareServiceInstanceToSpacesCallCount()).To(Equal(1)) 602 serviceInstanceGUIDArg, spaceGUIDsArg := fakeV3Actor.ShareServiceInstanceToSpacesArgsForCall(0) 603 Expect(serviceInstanceGUIDArg).To(Equal("some-service-instance-guid")) 604 Expect(spaceGUIDsArg).To(Equal([]string{"not-shared-space-guid"})) 605 }) 606 }) 607 608 When("an error occurs getting the org", func() { 609 var expectedErr error 610 611 BeforeEach(func() { 612 expectedErr = errors.New("get org error") 613 fakeV3Actor.GetOrganizationByNameReturns( 614 v3action.Organization{}, 615 v3action.Warnings{"get-org-warning"}, 616 expectedErr) 617 }) 618 619 It("returns the error and all warnings", func() { 620 Expect(shareErr).To(MatchError(expectedErr)) 621 Expect(warnings).To(ConsistOf("get-org-warning")) 622 }) 623 }) 624 }) 625 626 Describe("UnshareServiceInstanceFromOrganizationNameAndSpaceNameByNameAndSpace", func() { 627 var ( 628 shareToOrgName string 629 shareToSpaceName string 630 serviceInstanceName string 631 currentlyTargetedSpaceGUID string 632 633 warnings Warnings 634 executeErr error 635 ) 636 637 BeforeEach(func() { 638 shareToOrgName = "shared-to-org" 639 shareToSpaceName = "shared-to-space" 640 serviceInstanceName = "some-service-instance" 641 currentlyTargetedSpaceGUID = "currently-targeted-space-guid" 642 }) 643 644 JustBeforeEach(func() { 645 warnings, executeErr = actor.UnshareServiceInstanceFromOrganizationNameAndSpaceNameByNameAndSpace(shareToOrgName, shareToSpaceName, serviceInstanceName, currentlyTargetedSpaceGUID) 646 }) 647 648 When("no errors occur getting the service instance", func() { 649 BeforeEach(func() { 650 fakeV2Actor.GetServiceInstanceByNameAndSpaceReturns( 651 v2action.ServiceInstance{ 652 GUID: "some-service-instance-guid", 653 }, 654 v2action.Warnings{"get-service-instance-warning"}, 655 nil) 656 }) 657 658 When("no errors occur getting the service instance's shared to spaces", func() { 659 BeforeEach(func() { 660 fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceReturns( 661 []v2action.ServiceInstanceSharedTo{ 662 { 663 SpaceGUID: "some-other-shared-to-space-guid", 664 SpaceName: "some-other-shared-to-space", 665 OrganizationName: "some-other-shared-to-org", 666 }, 667 { 668 SpaceGUID: "shared-to-space-guid", 669 SpaceName: "shared-to-space", 670 OrganizationName: "shared-to-org", 671 }, 672 }, 673 v2action.Warnings{"get-shared-tos-warning"}, 674 nil) 675 }) 676 677 When("no errors occur unsharing the service instance", func() { 678 BeforeEach(func() { 679 fakeV3Actor.UnshareServiceInstanceByServiceInstanceAndSpaceReturns( 680 v3action.Warnings{"unshare-warning"}, 681 nil) 682 }) 683 684 It("returns no errors and returns all warnings", func() { 685 Expect(executeErr).ToNot(HaveOccurred()) 686 Expect(warnings).To(ConsistOf( 687 "get-service-instance-warning", 688 "get-shared-tos-warning", 689 "unshare-warning")) 690 691 Expect(fakeV2Actor.GetServiceInstanceByNameAndSpaceCallCount()).To(Equal(1)) 692 serviceInstanceNameArg, spaceGUIDArg := fakeV2Actor.GetServiceInstanceByNameAndSpaceArgsForCall(0) 693 Expect(serviceInstanceNameArg).To(Equal(serviceInstanceName)) 694 Expect(spaceGUIDArg).To(Equal(currentlyTargetedSpaceGUID)) 695 696 Expect(fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceCallCount()).To(Equal(1)) 697 Expect(fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceArgsForCall(0)).To(Equal("some-service-instance-guid")) 698 699 Expect(fakeV3Actor.UnshareServiceInstanceByServiceInstanceAndSpaceCallCount()).To(Equal(1)) 700 serviceInstanceGUIDArg, spaceGUIDArg := fakeV3Actor.UnshareServiceInstanceByServiceInstanceAndSpaceArgsForCall(0) 701 Expect(serviceInstanceGUIDArg).To(Equal("some-service-instance-guid")) 702 Expect(spaceGUIDArg).To(Equal("shared-to-space-guid")) 703 }) 704 }) 705 706 When("an error occurs unsharing the service instance", func() { 707 var expectedErr error 708 709 BeforeEach(func() { 710 expectedErr = errors.New("unshare error") 711 fakeV3Actor.UnshareServiceInstanceByServiceInstanceAndSpaceReturns( 712 v3action.Warnings{"unshare-warning"}, 713 expectedErr) 714 }) 715 716 It("returns the error and all warnings", func() { 717 Expect(executeErr).To(MatchError(expectedErr)) 718 Expect(warnings).To(ConsistOf( 719 "get-service-instance-warning", 720 "get-shared-tos-warning", 721 "unshare-warning")) 722 }) 723 }) 724 }) 725 726 When("an error occurs getting the service instance's shared to spaces", func() { 727 var expectedErr error 728 729 BeforeEach(func() { 730 expectedErr = errors.New("get shared tos error") 731 fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceReturns( 732 nil, 733 v2action.Warnings{"get-shared-tos-warning"}, 734 expectedErr) 735 }) 736 737 It("returns the error and all warnings", func() { 738 Expect(executeErr).To(MatchError(expectedErr)) 739 Expect(warnings).To(ConsistOf( 740 "get-service-instance-warning", 741 "get-shared-tos-warning")) 742 }) 743 }) 744 745 When("the service instance is not shared to the space we want to unshare with", func() { 746 BeforeEach(func() { 747 fakeV2Actor.GetServiceInstanceSharedTosByServiceInstanceReturns( 748 []v2action.ServiceInstanceSharedTo{ 749 { 750 SpaceGUID: "some-other-shared-to-space-guid", 751 SpaceName: "some-other-shared-to-space", 752 OrganizationName: "some-other-shared-to-org", 753 }, 754 }, 755 v2action.Warnings{"get-shared-tos-warning"}, 756 nil) 757 }) 758 759 It("returns a ServiceInstanceNotSharedToSpaceError and all warnings", func() { 760 Expect(executeErr).To(MatchError(actionerror.ServiceInstanceNotSharedToSpaceError{ 761 ServiceInstanceName: "some-service-instance", 762 })) 763 Expect(warnings).To(ConsistOf( 764 "get-service-instance-warning", 765 "get-shared-tos-warning")) 766 }) 767 }) 768 }) 769 770 When("an error occurs getting the service instance", func() { 771 var expectedErr error 772 773 BeforeEach(func() { 774 expectedErr = errors.New("get service instance error") 775 fakeV2Actor.GetServiceInstanceByNameAndSpaceReturns( 776 v2action.ServiceInstance{}, 777 v2action.Warnings{"get-service-instance-warning"}, 778 expectedErr) 779 }) 780 781 It("returns the error and all warnings", func() { 782 Expect(executeErr).To(MatchError(expectedErr)) 783 Expect(warnings).To(ConsistOf("get-service-instance-warning")) 784 }) 785 }) 786 787 When("the service instance does not exist", func() { 788 BeforeEach(func() { 789 fakeV2Actor.GetServiceInstanceByNameAndSpaceReturns( 790 v2action.ServiceInstance{}, 791 v2action.Warnings{"get-service-instance-warning"}, 792 actionerror.ServiceInstanceNotFoundError{}) 793 }) 794 795 It("returns a SharedServiceInstanceNotFoundError and all warnings", func() { 796 Expect(executeErr).To(MatchError(actionerror.SharedServiceInstanceNotFoundError{})) 797 Expect(warnings).To(ConsistOf("get-service-instance-warning")) 798 }) 799 }) 800 }) 801 })