github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/actor/v2action/service_instance_summary_test.go (about) 1 package v2action_test 2 3 import ( 4 "errors" 5 6 . "code.cloudfoundry.org/cli/actor/v2action" 7 "code.cloudfoundry.org/cli/actor/v2action/v2actionfakes" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" 10 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant" 11 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 ) 15 16 var _ = Describe("Service Instance Summary 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("ServiceInstanceSummary", func() { 28 var summary ServiceInstanceSummary 29 30 Describe("IsShareable", func() { 31 Context("when the 'service_instance_sharing' feature flag is enabled", func() { 32 BeforeEach(func() { 33 summary.ServiceInstanceSharingFeatureFlag = true 34 }) 35 36 Context("when the service broker has enabled sharing", func() { 37 BeforeEach(func() { 38 summary.Service.Extra.Shareable = true 39 }) 40 41 It("returns true", func() { 42 Expect(summary.IsShareable()).To(BeTrue()) 43 }) 44 }) 45 46 Context("when the service broker has not enabled sharing", func() { 47 BeforeEach(func() { 48 summary.Service.Extra.Shareable = false 49 }) 50 51 It("returns true", func() { 52 Expect(summary.IsShareable()).To(BeFalse()) 53 }) 54 }) 55 }) 56 57 Context("when the 'service_instance_sharing' feature flag is not enabled", func() { 58 BeforeEach(func() { 59 summary.ServiceInstanceSharingFeatureFlag = false 60 }) 61 62 Context("when the service broker has enabled sharing", func() { 63 BeforeEach(func() { 64 summary.Service.Extra.Shareable = true 65 }) 66 67 It("returns true", func() { 68 Expect(summary.IsShareable()).To(BeFalse()) 69 }) 70 }) 71 72 Context("when the service broker has not enabled sharing", func() { 73 BeforeEach(func() { 74 summary.Service.Extra.Shareable = false 75 }) 76 77 It("returns true", func() { 78 Expect(summary.IsShareable()).To(BeFalse()) 79 }) 80 }) 81 }) 82 }) 83 }) 84 85 Describe("GetServiceInstanceSummaryByNameAndSpace", func() { 86 var ( 87 summary ServiceInstanceSummary 88 summaryWarnings Warnings 89 summaryErr error 90 ) 91 92 JustBeforeEach(func() { 93 summary, summaryWarnings, summaryErr = actor.GetServiceInstanceSummaryByNameAndSpace("some-service-instance", "some-space-guid") 94 }) 95 96 Context("when an error is encountered getting the service instance", func() { 97 var expectedErr error 98 99 BeforeEach(func() { 100 expectedErr = errors.New("get space service instance error") 101 fakeCloudControllerClient.GetSpaceServiceInstancesReturns( 102 []ccv2.ServiceInstance{}, 103 ccv2.Warnings{"get-space-service-instance-warning"}, 104 expectedErr) 105 }) 106 107 It("returns the error and all warnings", func() { 108 Expect(summaryErr).To(MatchError(expectedErr)) 109 Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning")) 110 111 Expect(fakeCloudControllerClient.GetSpaceServiceInstancesCallCount()).To(Equal(1)) 112 spaceGUIDArg, getUserProvidedServicesArg, queriesArg := fakeCloudControllerClient.GetSpaceServiceInstancesArgsForCall(0) 113 Expect(spaceGUIDArg).To(Equal("some-space-guid")) 114 Expect(getUserProvidedServicesArg).To(BeTrue()) 115 Expect(queriesArg).To(HaveLen(1)) 116 Expect(queriesArg[0]).To(Equal(ccv2.Filter{ 117 Type: constant.NameFilter, 118 Operator: constant.EqualOperator, 119 Values: []string{"some-service-instance"}, 120 })) 121 }) 122 }) 123 124 Context("when no errors are encountered getting the service instance", func() { 125 var ( 126 returnedServiceInstance ccv2.ServiceInstance 127 returnedFeatureFlag ccv2.FeatureFlag 128 ) 129 130 Context("when the service instance is a managed service instance", func() { 131 BeforeEach(func() { 132 returnedServiceInstance = ccv2.ServiceInstance{ 133 GUID: "some-service-instance-guid", 134 Name: "some-service-instance", 135 Type: ccv2.ManagedService, 136 Tags: []string{"tag-1", "tag-2"}, 137 DashboardURL: "some-dashboard", 138 ServicePlanGUID: "some-service-plan-guid", 139 } 140 fakeCloudControllerClient.GetSpaceServiceInstancesReturns( 141 []ccv2.ServiceInstance{returnedServiceInstance}, 142 ccv2.Warnings{"get-space-service-instance-warning"}, 143 nil) 144 145 returnedFeatureFlag = ccv2.FeatureFlag{ 146 Name: "service_instance_sharing", 147 Enabled: true, 148 } 149 fakeCloudControllerClient.GetConfigFeatureFlagsReturns( 150 []ccv2.FeatureFlag{returnedFeatureFlag}, 151 ccv2.Warnings{"get-feature-flags-warning"}, 152 nil) 153 }) 154 155 It("returns the service instance info and all warnings", func() { 156 Expect(summaryErr).ToNot(HaveOccurred()) 157 Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance))) 158 Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning")) 159 160 Expect(fakeCloudControllerClient.GetSpaceServiceInstancesCallCount()).To(Equal(1)) 161 spaceGUIDArg, getUserProvidedServicesArg, queriesArg := fakeCloudControllerClient.GetSpaceServiceInstancesArgsForCall(0) 162 Expect(spaceGUIDArg).To(Equal("some-space-guid")) 163 Expect(getUserProvidedServicesArg).To(BeTrue()) 164 Expect(queriesArg).To(HaveLen(1)) 165 Expect(queriesArg[0]).To(Equal(ccv2.Filter{ 166 Type: constant.NameFilter, 167 Operator: constant.EqualOperator, 168 Values: []string{"some-service-instance"}, 169 })) 170 }) 171 172 Context("when the service instance is shared from another space (not created in the currently targeted space)", func() { 173 Context("when the source space of the service instance is different from the currently targeted space", func() { 174 BeforeEach(func() { 175 returnedServiceInstance.SpaceGUID = "not-currently-targeted-space-guid" 176 fakeCloudControllerClient.GetSpaceServiceInstancesReturns( 177 []ccv2.ServiceInstance{returnedServiceInstance}, 178 ccv2.Warnings{"get-space-service-instance-warning"}, 179 nil) 180 }) 181 182 Context("when an error is encountered getting the shared_from information", func() { 183 var expectedErr error 184 185 Context("when the error is generic", func() { 186 BeforeEach(func() { 187 expectedErr = errors.New("get-service-instance-shared-from-error") 188 fakeCloudControllerClient.GetServiceInstanceSharedFromReturns( 189 ccv2.ServiceInstanceSharedFrom{}, 190 ccv2.Warnings{"get-service-instance-shared-from-warning"}, 191 expectedErr, 192 ) 193 }) 194 195 It("returns the error and all warnings", func() { 196 Expect(summaryErr).To(MatchError(expectedErr)) 197 Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-from-warning", "get-feature-flags-warning", "get-space-service-instance-warning")) 198 199 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1)) 200 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 201 Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(0)) 202 }) 203 }) 204 205 Context("when the API version does not support service instance sharing", func() { 206 BeforeEach(func() { 207 expectedErr = ccerror.ResourceNotFoundError{} 208 fakeCloudControllerClient.GetServiceInstanceSharedFromReturns( 209 ccv2.ServiceInstanceSharedFrom{}, 210 ccv2.Warnings{"get-service-instance-shared-from-warning"}, 211 expectedErr, 212 ) 213 }) 214 215 It("ignores the 404 error and continues without shared_from information", func() { 216 Expect(summaryErr).ToNot(HaveOccurred()) 217 Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-from-warning", "get-feature-flags-warning", "get-space-service-instance-warning")) 218 Expect(summary.ServiceInstanceSharedFrom).To(Equal(ServiceInstanceSharedFrom{})) 219 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1)) 220 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 221 Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(0)) 222 }) 223 }) 224 }) 225 226 Context("when no errors are encountered getting the shared_from information", func() { 227 Context("when the shared_from info is NOT empty", func() { 228 var returnedServiceSharedFrom ccv2.ServiceInstanceSharedFrom 229 230 BeforeEach(func() { 231 returnedServiceSharedFrom = ccv2.ServiceInstanceSharedFrom{ 232 SpaceGUID: "some-space-guid", 233 SpaceName: "some-space-name", 234 OrganizationName: "some-org-name", 235 } 236 fakeCloudControllerClient.GetServiceInstanceSharedFromReturns( 237 returnedServiceSharedFrom, 238 ccv2.Warnings{"get-service-instance-shared-from-warning"}, 239 nil) 240 }) 241 242 It("returns the service instance share type, shared_from info, and all warnings", func() { 243 Expect(summaryErr).ToNot(HaveOccurred()) 244 Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance))) 245 Expect(summary.ServiceInstanceSharingFeatureFlag).To(BeTrue()) 246 Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsSharedFrom)) 247 Expect(summary.ServiceInstanceSharedFrom).To(Equal(ServiceInstanceSharedFrom(returnedServiceSharedFrom))) 248 Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-from-warning", "get-feature-flags-warning", "get-space-service-instance-warning")) 249 250 Expect(fakeCloudControllerClient.GetConfigFeatureFlagsCallCount()).To(Equal(1)) 251 252 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1)) 253 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 254 Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(0)) 255 }) 256 }) 257 258 Context("when the shared_from info is empty", func() { 259 It("sets the share type to not shared", func() { 260 Expect(summaryErr).ToNot(HaveOccurred()) 261 Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsNotShared)) 262 }) 263 }) 264 }) 265 }) 266 267 Context("when the source space of the service instance is 'null'", func() { 268 BeforeEach(func() { 269 // API returns a json null value that is unmarshalled into the empty string 270 returnedServiceInstance.SpaceGUID = "" 271 fakeCloudControllerClient.GetSpaceServiceInstancesReturns( 272 []ccv2.ServiceInstance{returnedServiceInstance}, 273 ccv2.Warnings{"get-space-service-instance-warning"}, 274 nil) 275 }) 276 277 Context("when an error is encountered getting the shared_from information", func() { 278 var expectedErr error 279 280 Context("when the error is generic", func() { 281 BeforeEach(func() { 282 expectedErr = errors.New("get-service-instance-shared-from-error") 283 fakeCloudControllerClient.GetServiceInstanceSharedFromReturns( 284 ccv2.ServiceInstanceSharedFrom{}, 285 ccv2.Warnings{"get-service-instance-shared-from-warning"}, 286 expectedErr, 287 ) 288 }) 289 290 It("returns the error and all warnings", func() { 291 Expect(summaryErr).To(MatchError(expectedErr)) 292 Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-from-warning", "get-feature-flags-warning", "get-space-service-instance-warning")) 293 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1)) 294 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 295 }) 296 }) 297 298 Context("when the API version does not support service instance sharing", func() { 299 BeforeEach(func() { 300 expectedErr = ccerror.ResourceNotFoundError{} 301 fakeCloudControllerClient.GetServiceInstanceSharedFromReturns( 302 ccv2.ServiceInstanceSharedFrom{}, 303 ccv2.Warnings{"get-service-instance-shared-from-warning"}, 304 expectedErr, 305 ) 306 }) 307 308 It("ignores the 404 error and continues without shared_from information", func() { 309 Expect(summaryErr).ToNot(HaveOccurred()) 310 Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-from-warning", "get-feature-flags-warning", "get-space-service-instance-warning")) 311 Expect(summary.ServiceInstanceSharedFrom).To(Equal(ServiceInstanceSharedFrom{})) 312 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1)) 313 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 314 }) 315 }) 316 }) 317 318 Context("when no errors are encountered getting the shared_from information", func() { 319 Context("when the shared_from info is NOT empty", func() { 320 var returnedServiceSharedFrom ccv2.ServiceInstanceSharedFrom 321 322 BeforeEach(func() { 323 returnedServiceSharedFrom = ccv2.ServiceInstanceSharedFrom{ 324 SpaceGUID: "some-space-guid", 325 SpaceName: "some-space-name", 326 OrganizationName: "some-org-name", 327 } 328 fakeCloudControllerClient.GetServiceInstanceSharedFromReturns( 329 returnedServiceSharedFrom, 330 ccv2.Warnings{"get-service-instance-shared-from-warning"}, 331 nil) 332 }) 333 334 It("returns the service instance share type, shared_from info, and all warnings", func() { 335 Expect(summaryErr).ToNot(HaveOccurred()) 336 Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance))) 337 Expect(summary.ServiceInstanceSharingFeatureFlag).To(BeTrue()) 338 Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsSharedFrom)) 339 Expect(summary.ServiceInstanceSharedFrom).To(Equal(ServiceInstanceSharedFrom(returnedServiceSharedFrom))) 340 Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-instance-shared-from-warning")) 341 342 Expect(fakeCloudControllerClient.GetConfigFeatureFlagsCallCount()).To(Equal(1)) 343 344 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1)) 345 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 346 Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(0)) 347 }) 348 }) 349 350 Context("when the shared_from info is empty", func() { 351 It("sets the share type to not shared", func() { 352 Expect(summaryErr).ToNot(HaveOccurred()) 353 Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsNotShared)) 354 }) 355 }) 356 }) 357 }) 358 }) 359 360 Context("when the service instance is shared to other spaces", func() { 361 Context("when the source space of the service instance is the same as the currently targeted space", func() { 362 BeforeEach(func() { 363 returnedServiceInstance.SpaceGUID = "some-space-guid" 364 fakeCloudControllerClient.GetSpaceServiceInstancesReturns( 365 []ccv2.ServiceInstance{returnedServiceInstance}, 366 ccv2.Warnings{"get-space-service-instance-warning"}, 367 nil) 368 }) 369 370 Context("when an error is encountered getting the shared_to information", func() { 371 var expectedErr error 372 373 Context("when the error is generic", func() { 374 BeforeEach(func() { 375 expectedErr = errors.New("get-service-instance-shared-tos-error") 376 fakeCloudControllerClient.GetServiceInstanceSharedTosReturns( 377 []ccv2.ServiceInstanceSharedTo{}, 378 ccv2.Warnings{"get-service-instance-shared-tos-warning"}, 379 expectedErr, 380 ) 381 }) 382 383 It("returns the error and all warnings", func() { 384 Expect(summaryErr).To(MatchError(expectedErr)) 385 Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-tos-warning", "get-feature-flags-warning", "get-space-service-instance-warning")) 386 Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(1)) 387 Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 388 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(0)) 389 }) 390 }) 391 392 Context("when the API version does not support service instance sharing", func() { 393 BeforeEach(func() { 394 expectedErr = ccerror.ResourceNotFoundError{} 395 fakeCloudControllerClient.GetServiceInstanceSharedTosReturns( 396 []ccv2.ServiceInstanceSharedTo{}, 397 ccv2.Warnings{"get-service-instance-shared-tos-warning"}, 398 expectedErr, 399 ) 400 }) 401 402 It("ignores the 404 error and continues without shared_to information", func() { 403 Expect(summaryErr).ToNot(HaveOccurred()) 404 Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-tos-warning", "get-feature-flags-warning", "get-space-service-instance-warning")) 405 Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(1)) 406 Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 407 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(0)) 408 }) 409 }) 410 }) 411 412 Context("when no errors are encountered getting the shared_to information", func() { 413 Context("when the shared_to info is NOT an empty list", func() { 414 var returnedServiceSharedTos []ccv2.ServiceInstanceSharedTo 415 416 BeforeEach(func() { 417 returnedServiceSharedTos = []ccv2.ServiceInstanceSharedTo{ 418 { 419 SpaceGUID: "some-space-guid", 420 SpaceName: "some-space-name", 421 OrganizationName: "some-org-name", 422 }, 423 { 424 SpaceGUID: "some-space-guid2", 425 SpaceName: "some-space-name2", 426 OrganizationName: "some-org-name2", 427 }, 428 } 429 430 fakeCloudControllerClient.GetServiceInstanceSharedTosReturns( 431 returnedServiceSharedTos, 432 ccv2.Warnings{"get-service-instance-shared-tos-warning"}, 433 nil) 434 }) 435 436 It("returns the service instance share type, shared_to info, and all warnings", func() { 437 Expect(summaryErr).ToNot(HaveOccurred()) 438 Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance))) 439 Expect(summary.ServiceInstanceSharingFeatureFlag).To(BeTrue()) 440 Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsSharedTo)) 441 Expect(summary.ServiceInstanceSharedTos).To(ConsistOf(ServiceInstanceSharedTo(returnedServiceSharedTos[0]), ServiceInstanceSharedTo(returnedServiceSharedTos[1]))) 442 Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-tos-warning", "get-feature-flags-warning", "get-space-service-instance-warning")) 443 444 Expect(fakeCloudControllerClient.GetConfigFeatureFlagsCallCount()).To(Equal(1)) 445 446 Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(1)) 447 Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 448 Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(0)) 449 }) 450 }) 451 452 Context("when the shared_to info is an empty list", func() { 453 It("sets the share type to not shared", func() { 454 Expect(summaryErr).ToNot(HaveOccurred()) 455 Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsNotShared)) 456 }) 457 }) 458 }) 459 }) 460 }) 461 462 Context("when an error is encountered getting the service plan", func() { 463 var expectedErr error 464 465 BeforeEach(func() { 466 expectedErr = errors.New("get-service-plan-error") 467 fakeCloudControllerClient.GetServicePlanReturns( 468 ccv2.ServicePlan{}, 469 ccv2.Warnings{"get-service-plan-warning"}, 470 expectedErr) 471 }) 472 473 It("returns the error and all warnings", func() { 474 Expect(summaryErr).To(MatchError(expectedErr)) 475 Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning")) 476 477 Expect(fakeCloudControllerClient.GetServicePlanCallCount()).To(Equal(1)) 478 Expect(fakeCloudControllerClient.GetServicePlanArgsForCall(0)).To(Equal(returnedServiceInstance.ServicePlanGUID)) 479 }) 480 }) 481 482 Context("when no errors are encountered getting the service plan", func() { 483 var returnedServicePlan ccv2.ServicePlan 484 485 BeforeEach(func() { 486 returnedServicePlan = ccv2.ServicePlan{ 487 GUID: "some-service-plan-guid", 488 Name: "some-service-plan", 489 ServiceGUID: "some-service-guid", 490 } 491 fakeCloudControllerClient.GetServicePlanReturns( 492 returnedServicePlan, 493 ccv2.Warnings{"get-service-plan-warning"}, 494 nil) 495 }) 496 497 It("returns the service plan info and all warnings", func() { 498 Expect(summaryErr).ToNot(HaveOccurred()) 499 Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance))) 500 Expect(summary.ServicePlan).To(Equal(ServicePlan(returnedServicePlan))) 501 Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning")) 502 503 Expect(fakeCloudControllerClient.GetServicePlanCallCount()).To(Equal(1)) 504 Expect(fakeCloudControllerClient.GetServicePlanArgsForCall(0)).To(Equal(returnedServiceInstance.ServicePlanGUID)) 505 }) 506 507 Context("when an error is encountered getting the service", func() { 508 var expectedErr error 509 510 BeforeEach(func() { 511 expectedErr = errors.New("get service error") 512 fakeCloudControllerClient.GetServiceReturns( 513 ccv2.Service{}, 514 ccv2.Warnings{"get-service-warning"}, 515 expectedErr) 516 }) 517 518 It("returns the error and all warnings", func() { 519 Expect(summaryErr).To(MatchError(expectedErr)) 520 Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "get-service-warning")) 521 522 Expect(fakeCloudControllerClient.GetServiceCallCount()).To(Equal(1)) 523 Expect(fakeCloudControllerClient.GetServiceArgsForCall(0)).To(Equal(returnedServicePlan.ServiceGUID)) 524 }) 525 }) 526 527 Context("when no errors are encountered getting the service", func() { 528 var returnedService ccv2.Service 529 530 BeforeEach(func() { 531 returnedService = ccv2.Service{ 532 GUID: "some-service-guid", 533 Label: "some-service", 534 Description: "some-description", 535 DocumentationURL: "some-url", 536 Extra: ccv2.ServiceExtra{ 537 Shareable: true, 538 }, 539 } 540 fakeCloudControllerClient.GetServiceReturns( 541 returnedService, 542 ccv2.Warnings{"get-service-warning"}, 543 nil) 544 }) 545 546 It("returns the service info and all warnings", func() { 547 Expect(summaryErr).ToNot(HaveOccurred()) 548 Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance))) 549 Expect(summary.ServicePlan).To(Equal(ServicePlan(returnedServicePlan))) 550 Expect(summary.Service).To(Equal(Service(returnedService))) 551 Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "get-service-warning")) 552 553 Expect(fakeCloudControllerClient.GetServiceCallCount()).To(Equal(1)) 554 Expect(fakeCloudControllerClient.GetServiceArgsForCall(0)).To(Equal(returnedServicePlan.ServiceGUID)) 555 }) 556 557 Context("when an error is encountered getting the service bindings", func() { 558 var expectedErr error 559 560 BeforeEach(func() { 561 expectedErr = errors.New("get service bindings error") 562 fakeCloudControllerClient.GetServiceInstanceServiceBindingsReturns( 563 []ccv2.ServiceBinding{}, 564 ccv2.Warnings{"get-service-bindings-warning"}, 565 expectedErr) 566 }) 567 568 It("returns the error and all warnings", func() { 569 Expect(summaryErr).To(MatchError(expectedErr)) 570 Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "get-service-warning", "get-service-bindings-warning")) 571 572 Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsCallCount()).To(Equal(1)) 573 Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 574 }) 575 }) 576 577 Context("when no errors are encountered getting the service bindings", func() { 578 var returnedServiceBindings []ccv2.ServiceBinding 579 580 BeforeEach(func() { 581 returnedServiceBindings = []ccv2.ServiceBinding{ 582 { 583 GUID: "some-service-binding-1-guid", 584 AppGUID: "some-app-1-guid", 585 }, 586 { 587 GUID: "some-service-binding-2-guid", 588 AppGUID: "some-app-2-guid", 589 }, 590 } 591 fakeCloudControllerClient.GetServiceInstanceServiceBindingsReturns( 592 returnedServiceBindings, 593 ccv2.Warnings{"get-service-bindings-warning"}, 594 nil) 595 }) 596 597 Context("when an error is encountered getting bound application info", func() { 598 var expectedErr error 599 600 BeforeEach(func() { 601 expectedErr = errors.New("get application error") 602 fakeCloudControllerClient.GetApplicationReturns( 603 ccv2.Application{}, 604 ccv2.Warnings{"get-application-warning"}, 605 expectedErr) 606 }) 607 608 It("returns the error", func() { 609 Expect(summaryErr).To(MatchError(expectedErr)) 610 Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "get-service-warning", "get-service-bindings-warning", "get-application-warning")) 611 612 Expect(fakeCloudControllerClient.GetApplicationCallCount()).To(Equal(1)) 613 Expect(fakeCloudControllerClient.GetApplicationArgsForCall(0)).To(Equal(returnedServiceBindings[0].AppGUID)) 614 }) 615 }) 616 617 Context("when no errors are encountered getting bound application info", func() { 618 BeforeEach(func() { 619 fakeCloudControllerClient.GetApplicationReturnsOnCall( 620 0, 621 ccv2.Application{ 622 GUID: "some-app-1-guid", 623 Name: "some-app-1", 624 }, 625 ccv2.Warnings{"get-application-warning-1"}, 626 nil) 627 fakeCloudControllerClient.GetApplicationReturnsOnCall( 628 1, 629 ccv2.Application{ 630 GUID: "some-app-2-guid", 631 Name: "some-app-2", 632 }, 633 ccv2.Warnings{"get-application-warning-2"}, 634 nil) 635 }) 636 637 It("returns a list of applications bound to the service instance and all warnings", func() { 638 Expect(summaryErr).ToNot(HaveOccurred()) 639 Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance))) 640 Expect(summary.ServicePlan).To(Equal(ServicePlan(returnedServicePlan))) 641 Expect(summary.Service).To(Equal(Service(returnedService))) 642 Expect(summary.BoundApplications).To(Equal([]string{"some-app-1", "some-app-2"})) 643 Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "get-service-warning", "get-service-bindings-warning", "get-application-warning-1", "get-application-warning-2")) 644 645 Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsCallCount()).To(Equal(1)) 646 Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 647 648 Expect(fakeCloudControllerClient.GetApplicationCallCount()).To(Equal(2)) 649 Expect(fakeCloudControllerClient.GetApplicationArgsForCall(0)).To(Equal(returnedServiceBindings[0].AppGUID)) 650 Expect(fakeCloudControllerClient.GetApplicationArgsForCall(1)).To(Equal(returnedServiceBindings[1].AppGUID)) 651 652 Expect(fakeCloudControllerClient.GetUserProvidedServiceInstanceServiceBindingsCallCount()).To(Equal(0)) 653 }) 654 }) 655 }) 656 }) 657 }) 658 }) 659 660 Context("when the service instance is a user provided service instance", func() { 661 BeforeEach(func() { 662 returnedServiceInstance = ccv2.ServiceInstance{ 663 GUID: "some-user-provided-service-instance-guid", 664 Name: "some-user-provided-service-instance", 665 Type: ccv2.UserProvidedService, 666 } 667 fakeCloudControllerClient.GetSpaceServiceInstancesReturns( 668 []ccv2.ServiceInstance{returnedServiceInstance}, 669 ccv2.Warnings{"get-space-service-instance-warning"}, 670 nil) 671 }) 672 673 Context("when no errors are encountered getting the service bindings", func() { 674 var returnedServiceBindings []ccv2.ServiceBinding 675 676 BeforeEach(func() { 677 returnedServiceBindings = []ccv2.ServiceBinding{ 678 { 679 GUID: "some-service-binding-1-guid", 680 AppGUID: "some-app-1-guid", 681 }, 682 { 683 GUID: "some-service-binding-2-guid", 684 AppGUID: "some-app-2-guid", 685 }, 686 } 687 fakeCloudControllerClient.GetUserProvidedServiceInstanceServiceBindingsReturns( 688 returnedServiceBindings, 689 ccv2.Warnings{"get-service-bindings-warning"}, 690 nil) 691 }) 692 693 Context("when no errors are encountered getting bound application info", func() { 694 BeforeEach(func() { 695 fakeCloudControllerClient.GetApplicationReturnsOnCall( 696 0, 697 ccv2.Application{ 698 GUID: "some-app-1-guid", 699 Name: "some-app-1", 700 }, 701 ccv2.Warnings{"get-application-warning-1"}, 702 nil) 703 fakeCloudControllerClient.GetApplicationReturnsOnCall( 704 1, 705 ccv2.Application{ 706 GUID: "some-app-2-guid", 707 Name: "some-app-2", 708 }, 709 ccv2.Warnings{"get-application-warning-2"}, 710 nil) 711 }) 712 713 It("returns a list of applications bound to the service instance and all warnings", func() { 714 Expect(summaryErr).ToNot(HaveOccurred()) 715 Expect(summary).To(Equal(ServiceInstanceSummary{ 716 ServiceInstance: ServiceInstance(returnedServiceInstance), 717 BoundApplications: []string{"some-app-1", "some-app-2"}, 718 })) 719 Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-service-bindings-warning", "get-application-warning-1", "get-application-warning-2")) 720 721 Expect(fakeCloudControllerClient.GetSpaceServiceInstancesCallCount()).To(Equal(1)) 722 spaceGUIDArg, getUserProvidedServicesArg, queriesArg := fakeCloudControllerClient.GetSpaceServiceInstancesArgsForCall(0) 723 Expect(spaceGUIDArg).To(Equal("some-space-guid")) 724 Expect(getUserProvidedServicesArg).To(BeTrue()) 725 Expect(queriesArg).To(HaveLen(1)) 726 Expect(queriesArg[0]).To(Equal(ccv2.Filter{ 727 Type: constant.NameFilter, 728 Operator: constant.EqualOperator, 729 Values: []string{"some-service-instance"}, 730 })) 731 732 Expect(fakeCloudControllerClient.GetUserProvidedServiceInstanceServiceBindingsCallCount()).To(Equal(1)) 733 Expect(fakeCloudControllerClient.GetUserProvidedServiceInstanceServiceBindingsArgsForCall(0)).To(Equal(returnedServiceInstance.GUID)) 734 735 Expect(fakeCloudControllerClient.GetApplicationCallCount()).To(Equal(2)) 736 Expect(fakeCloudControllerClient.GetApplicationArgsForCall(0)).To(Equal(returnedServiceBindings[0].AppGUID)) 737 Expect(fakeCloudControllerClient.GetApplicationArgsForCall(1)).To(Equal(returnedServiceBindings[1].AppGUID)) 738 739 Expect(fakeCloudControllerClient.GetServicePlanCallCount()).To(Equal(0)) 740 Expect(fakeCloudControllerClient.GetServiceCallCount()).To(Equal(0)) 741 Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsCallCount()).To(Equal(0)) 742 }) 743 }) 744 }) 745 }) 746 }) 747 }) 748 })