github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/actors/service_builder/service_builder_test.go (about) 1 package service_builder_test 2 3 import ( 4 "errors" 5 6 plan_builder_fakes "github.com/cloudfoundry/cli/cf/actors/plan_builder/fakes" 7 "github.com/cloudfoundry/cli/cf/actors/service_builder" 8 testapi "github.com/cloudfoundry/cli/cf/api/fakes" 9 10 "github.com/cloudfoundry/cli/cf/models" 11 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 ) 15 16 var _ = Describe("Service Builder", func() { 17 var ( 18 planBuilder *plan_builder_fakes.FakePlanBuilder 19 serviceBuilder service_builder.ServiceBuilder 20 serviceRepo *testapi.FakeServiceRepo 21 service1 models.ServiceOffering 22 service2 models.ServiceOffering 23 v1Service models.ServiceOffering 24 planWithoutOrgs models.ServicePlanFields 25 plan1 models.ServicePlanFields 26 plan2 models.ServicePlanFields 27 plan3 models.ServicePlanFields 28 ) 29 30 BeforeEach(func() { 31 serviceRepo = &testapi.FakeServiceRepo{} 32 planBuilder = &plan_builder_fakes.FakePlanBuilder{} 33 34 serviceBuilder = service_builder.NewBuilder(serviceRepo, planBuilder) 35 service1 = models.ServiceOffering{ 36 ServiceOfferingFields: models.ServiceOfferingFields{ 37 Label: "my-service1", 38 Guid: "service-guid1", 39 BrokerGuid: "my-service-broker-guid1", 40 }, 41 } 42 43 service2 = models.ServiceOffering{ 44 ServiceOfferingFields: models.ServiceOfferingFields{ 45 Label: "my-service2", 46 Guid: "service-guid2", 47 BrokerGuid: "my-service-broker-guid2", 48 }, 49 } 50 51 v1Service = models.ServiceOffering{ 52 ServiceOfferingFields: models.ServiceOfferingFields{ 53 Label: "v1Service", 54 Guid: "v1Service-guid", 55 BrokerGuid: "my-service-broker-guid1", 56 Provider: "IAmV1", 57 }, 58 } 59 60 serviceRepo.FindServiceOfferingsByLabelName = "my-service1" 61 serviceRepo.FindServiceOfferingsByLabelServiceOfferings = 62 models.ServiceOfferings([]models.ServiceOffering{service1, v1Service}) 63 64 serviceRepo.GetServiceOfferingByGuidReturns = struct { 65 ServiceOffering models.ServiceOffering 66 Error error 67 }{ 68 service1, 69 nil, 70 } 71 72 serviceRepo.ListServicesFromBrokerReturns = map[string][]models.ServiceOffering{ 73 "my-service-broker-guid1": []models.ServiceOffering{service1}, 74 } 75 76 serviceRepo.ListServicesFromManyBrokersReturns = map[string][]models.ServiceOffering{ 77 "my-service-broker-guid1,my-service-broker-guid2": []models.ServiceOffering{service1, service2}, 78 } 79 80 plan1 = models.ServicePlanFields{ 81 Name: "service-plan1", 82 Guid: "service-plan1-guid", 83 ServiceOfferingGuid: "service-guid1", 84 OrgNames: []string{"org1", "org2"}, 85 } 86 87 plan2 = models.ServicePlanFields{ 88 Name: "service-plan2", 89 Guid: "service-plan2-guid", 90 ServiceOfferingGuid: "service-guid1", 91 } 92 93 plan3 = models.ServicePlanFields{ 94 Name: "service-plan3", 95 Guid: "service-plan3-guid", 96 ServiceOfferingGuid: "service-guid2", 97 } 98 99 planWithoutOrgs = models.ServicePlanFields{ 100 Name: "service-plan-without-orgs", 101 Guid: "service-plan-without-orgs-guid", 102 ServiceOfferingGuid: "service-guid1", 103 } 104 105 planBuilder.GetPlansVisibleToOrgReturns([]models.ServicePlanFields{plan1, plan2}, nil) 106 planBuilder.GetPlansForServiceWithOrgsReturns([]models.ServicePlanFields{plan1, plan2}, nil) 107 planBuilder.GetPlansForManyServicesWithOrgsReturns([]models.ServicePlanFields{plan1, plan2, plan3}, nil) 108 planBuilder.GetPlansForServiceForOrgReturns([]models.ServicePlanFields{plan1, plan2}, nil) 109 }) 110 111 Describe(".GetServicesForSpace", func() { 112 BeforeEach(func() { 113 serviceRepo.GetServiceOfferingsForSpaceReturns = struct { 114 ServiceOfferings []models.ServiceOffering 115 Error error 116 }{ 117 []models.ServiceOffering{service1, service1}, 118 nil, 119 } 120 }) 121 122 It("returns the services for the space", func() { 123 services, err := serviceBuilder.GetServicesForSpace("spaceGuid") 124 Expect(err).NotTo(HaveOccurred()) 125 126 Expect(len(services)).To(Equal(2)) 127 }) 128 }) 129 130 Describe(".GetServicesForSpaceWithPlans", func() { 131 BeforeEach(func() { 132 serviceRepo.GetServiceOfferingsForSpaceReturns = struct { 133 ServiceOfferings []models.ServiceOffering 134 Error error 135 }{ 136 []models.ServiceOffering{service1, service1}, 137 nil, 138 } 139 140 planBuilder.GetPlansForServiceReturns([]models.ServicePlanFields{planWithoutOrgs}, nil) 141 }) 142 143 It("returns the services for the space, populated with plans", func() { 144 services, err := serviceBuilder.GetServicesForSpaceWithPlans("spaceGuid") 145 Expect(err).NotTo(HaveOccurred()) 146 147 Expect(len(services)).To(Equal(2)) 148 Expect(services[0].Plans[0]).To(Equal(planWithoutOrgs)) 149 Expect(services[1].Plans[0]).To(Equal(planWithoutOrgs)) 150 }) 151 }) 152 153 Describe(".GetAllServices", func() { 154 BeforeEach(func() { 155 serviceRepo.GetAllServiceOfferingsReturns = struct { 156 ServiceOfferings []models.ServiceOffering 157 Error error 158 }{ 159 []models.ServiceOffering{service1, service1}, 160 nil, 161 } 162 }) 163 164 It("returns the named service, populated with plans", func() { 165 services, err := serviceBuilder.GetAllServices() 166 Expect(err).NotTo(HaveOccurred()) 167 168 Expect(len(services)).To(Equal(2)) 169 }) 170 }) 171 172 Describe(".GetAllServicesWithPlans", func() { 173 BeforeEach(func() { 174 serviceRepo.GetAllServiceOfferingsReturns = struct { 175 ServiceOfferings []models.ServiceOffering 176 Error error 177 }{ 178 []models.ServiceOffering{service1, service1}, 179 nil, 180 } 181 182 planBuilder.GetPlansForServiceReturns([]models.ServicePlanFields{plan1}, nil) 183 }) 184 185 It("returns the named service, populated with plans", func() { 186 services, err := serviceBuilder.GetAllServicesWithPlans() 187 Expect(err).NotTo(HaveOccurred()) 188 189 Expect(len(services)).To(Equal(2)) 190 Expect(services[0].Plans[0]).To(Equal(plan1)) 191 }) 192 }) 193 194 Describe(".GetServiceByNameWithPlans", func() { 195 BeforeEach(func() { 196 planBuilder.GetPlansForServiceReturns([]models.ServicePlanFields{plan2}, nil) 197 }) 198 199 It("returns the named service, populated with plans", func() { 200 service, err := serviceBuilder.GetServiceByNameWithPlans("my-service1") 201 Expect(err).NotTo(HaveOccurred()) 202 203 Expect(len(service.Plans)).To(Equal(1)) 204 Expect(service.Plans[0].Name).To(Equal("service-plan2")) 205 Expect(service.Plans[0].OrgNames).To(BeNil()) 206 }) 207 }) 208 209 Describe(".GetServiceByNameWithPlansWithOrgNames", func() { 210 It("returns the named service, populated with plans", func() { 211 service, err := serviceBuilder.GetServiceByNameWithPlansWithOrgNames("my-service1") 212 Expect(err).NotTo(HaveOccurred()) 213 214 Expect(len(service.Plans)).To(Equal(2)) 215 Expect(service.Plans[0].Name).To(Equal("service-plan1")) 216 Expect(service.Plans[1].Name).To(Equal("service-plan2")) 217 Expect(service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) 218 }) 219 }) 220 221 Describe(".GetServiceByNameForSpace", func() { 222 Context("mixed v2 and v1 services", func() { 223 BeforeEach(func() { 224 service2 := models.ServiceOffering{ 225 ServiceOfferingFields: models.ServiceOfferingFields{ 226 Label: "service", 227 Guid: "service-guid-v2", 228 }, 229 } 230 231 service1 := models.ServiceOffering{ 232 ServiceOfferingFields: models.ServiceOfferingFields{ 233 Label: "service", 234 Guid: "service-guid", 235 Provider: "a provider", 236 }, 237 } 238 239 serviceRepo.FindServiceOfferingsForSpaceByLabelReturns = struct { 240 ServiceOfferings models.ServiceOfferings 241 Error error 242 }{ 243 models.ServiceOfferings([]models.ServiceOffering{ 244 service1, service2}), 245 nil, 246 } 247 }) 248 249 It("returns the nv2 service", func() { 250 service, err := serviceBuilder.GetServiceByNameForSpace("service", "spaceGuid") 251 Expect(err).NotTo(HaveOccurred()) 252 253 Expect(len(service.Plans)).To(Equal(0)) 254 Expect(service.Guid).To(Equal("service-guid-v2")) 255 }) 256 }) 257 258 Context("v2 services", func() { 259 BeforeEach(func() { 260 service := models.ServiceOffering{ 261 ServiceOfferingFields: models.ServiceOfferingFields{ 262 Label: "service", 263 Guid: "service-guid", 264 }, 265 } 266 267 serviceRepo.FindServiceOfferingsForSpaceByLabelReturns = struct { 268 ServiceOfferings models.ServiceOfferings 269 Error error 270 }{ 271 models.ServiceOfferings([]models.ServiceOffering{ 272 service}), 273 nil, 274 } 275 }) 276 277 It("returns the named service", func() { 278 service, err := serviceBuilder.GetServiceByNameForSpace("service", "spaceGuid") 279 Expect(err).NotTo(HaveOccurred()) 280 281 Expect(len(service.Plans)).To(Equal(0)) 282 Expect(service.Guid).To(Equal("service-guid")) 283 }) 284 }) 285 286 Context("v1 services", func() { 287 BeforeEach(func() { 288 service := models.ServiceOffering{ 289 ServiceOfferingFields: models.ServiceOfferingFields{ 290 Label: "service", 291 Guid: "service-guid", 292 Provider: "a provider", 293 }, 294 } 295 296 serviceRepo.FindServiceOfferingsForSpaceByLabelReturns = struct { 297 ServiceOfferings models.ServiceOfferings 298 Error error 299 }{ 300 models.ServiceOfferings([]models.ServiceOffering{ 301 service}), 302 nil, 303 } 304 }) 305 306 It("returns the an error", func() { 307 service, err := serviceBuilder.GetServiceByNameForSpace("service", "spaceGuid") 308 Expect(service).To(Equal(models.ServiceOffering{})) 309 Expect(err).To(HaveOccurred()) 310 }) 311 }) 312 }) 313 314 Describe(".GetServiceByNameForSpaceWithPlans", func() { 315 BeforeEach(func() { 316 service := models.ServiceOffering{ 317 ServiceOfferingFields: models.ServiceOfferingFields{ 318 Label: "serviceWithPlans", 319 }, 320 } 321 322 serviceRepo.FindServiceOfferingsForSpaceByLabelReturns = struct { 323 ServiceOfferings models.ServiceOfferings 324 Error error 325 }{ 326 models.ServiceOfferings([]models.ServiceOffering{service}), 327 nil, 328 } 329 330 planBuilder.GetPlansForServiceReturns([]models.ServicePlanFields{planWithoutOrgs}, nil) 331 }) 332 333 It("returns the named service", func() { 334 service, err := serviceBuilder.GetServiceByNameForSpaceWithPlans("serviceWithPlans", "spaceGuid") 335 Expect(err).NotTo(HaveOccurred()) 336 337 Expect(len(service.Plans)).To(Equal(1)) 338 Expect(service.Plans[0].Name).To(Equal("service-plan-without-orgs")) 339 Expect(service.Plans[0].OrgNames).To(BeNil()) 340 }) 341 }) 342 343 Describe(".GetServicesByNameForSpaceWithPlans", func() { 344 BeforeEach(func() { 345 serviceRepo.FindServiceOfferingsForSpaceByLabelReturns = struct { 346 ServiceOfferings models.ServiceOfferings 347 Error error 348 }{ 349 models.ServiceOfferings([]models.ServiceOffering{service1, v1Service}), 350 nil, 351 } 352 353 planBuilder.GetPlansForServiceReturns([]models.ServicePlanFields{planWithoutOrgs}, nil) 354 }) 355 356 It("returns the named service", func() { 357 services, err := serviceBuilder.GetServicesByNameForSpaceWithPlans("serviceWithPlans", "spaceGuid") 358 Expect(err).NotTo(HaveOccurred()) 359 360 Expect(len(services)).To(Equal(2)) 361 Expect(services[0].Label).To(Equal("my-service1")) 362 Expect(services[0].Plans[0].Name).To(Equal("service-plan-without-orgs")) 363 Expect(services[0].Plans[0].OrgNames).To(BeNil()) 364 Expect(services[1].Label).To(Equal("v1Service")) 365 Expect(services[1].Plans[0].Name).To(Equal("service-plan-without-orgs")) 366 Expect(services[1].Plans[0].OrgNames).To(BeNil()) 367 }) 368 }) 369 370 Describe(".GetServiceByNameForOrg", func() { 371 It("returns the named service, populated with plans", func() { 372 service, err := serviceBuilder.GetServiceByNameForOrg("my-service1", "org1") 373 Expect(err).NotTo(HaveOccurred()) 374 375 Expect(planBuilder.GetPlansForServiceForOrgCallCount()).To(Equal(1)) 376 servName, orgName := planBuilder.GetPlansForServiceForOrgArgsForCall(0) 377 Expect(servName).To(Equal("service-guid1")) 378 Expect(orgName).To(Equal("org1")) 379 380 Expect(len(service.Plans)).To(Equal(2)) 381 Expect(service.Plans[0].Name).To(Equal("service-plan1")) 382 Expect(service.Plans[1].Name).To(Equal("service-plan2")) 383 Expect(service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) 384 }) 385 }) 386 387 Describe(".GetServicesForBroker", func() { 388 It("returns all the services for a broker, fully populated", func() { 389 services, err := serviceBuilder.GetServicesForBroker("my-service-broker-guid1") 390 Expect(err).NotTo(HaveOccurred()) 391 392 service := services[0] 393 Expect(service.Label).To(Equal("my-service1")) 394 Expect(len(service.Plans)).To(Equal(2)) 395 Expect(service.Plans[0].Name).To(Equal("service-plan1")) 396 Expect(service.Plans[1].Name).To(Equal("service-plan2")) 397 Expect(service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) 398 }) 399 }) 400 401 Describe(".GetServicesForManyBrokers", func() { 402 It("returns all the services for an array of broker guids, fully populated", func() { 403 brokerGuids := []string{"my-service-broker-guid1", "my-service-broker-guid2"} 404 services, err := serviceBuilder.GetServicesForManyBrokers(brokerGuids) 405 Expect(err).NotTo(HaveOccurred()) 406 407 Expect(services).To(HaveLen(2)) 408 409 broker_service := services[0] 410 Expect(broker_service.Label).To(Equal("my-service1")) 411 Expect(len(broker_service.Plans)).To(Equal(2)) 412 Expect(broker_service.Plans[0].Name).To(Equal("service-plan1")) 413 Expect(broker_service.Plans[1].Name).To(Equal("service-plan2")) 414 Expect(broker_service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) 415 416 broker_service2 := services[1] 417 Expect(broker_service2.Label).To(Equal("my-service2")) 418 Expect(len(broker_service2.Plans)).To(Equal(1)) 419 Expect(broker_service2.Plans[0].Name).To(Equal("service-plan3")) 420 }) 421 422 It("raises errors from the service repo", func() { 423 serviceRepo.ListServicesFromManyBrokersErr = errors.New("error") 424 brokerGuids := []string{"my-service-broker-guid1", "my-service-broker-guid2"} 425 _, err := serviceBuilder.GetServicesForManyBrokers(brokerGuids) 426 Expect(err).To(HaveOccurred()) 427 }) 428 429 It("raises errors from the plan builder", func() { 430 planBuilder.GetPlansForManyServicesWithOrgsReturns(nil, errors.New("error")) 431 brokerGuids := []string{"my-service-broker-guid1", "my-service-broker-guid2"} 432 _, err := serviceBuilder.GetServicesForManyBrokers(brokerGuids) 433 Expect(err).To(HaveOccurred()) 434 }) 435 }) 436 437 Describe(".GetServiceVisibleToOrg", func() { 438 It("Returns a service populated with plans visible to the provided org", func() { 439 service, err := serviceBuilder.GetServiceVisibleToOrg("my-service1", "org1") 440 Expect(err).NotTo(HaveOccurred()) 441 442 Expect(service.Label).To(Equal("my-service1")) 443 Expect(len(service.Plans)).To(Equal(2)) 444 Expect(service.Plans[0].Name).To(Equal("service-plan1")) 445 Expect(service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) 446 }) 447 448 Context("When no plans are visible to the provided org", func() { 449 It("Returns nil", func() { 450 planBuilder.GetPlansVisibleToOrgReturns(nil, nil) 451 service, err := serviceBuilder.GetServiceVisibleToOrg("my-service1", "org3") 452 Expect(err).NotTo(HaveOccurred()) 453 454 Expect(service).To(Equal(models.ServiceOffering{})) 455 }) 456 }) 457 }) 458 459 Describe(".GetServicesVisibleToOrg", func() { 460 It("Returns services with plans visible to the provided org", func() { 461 planBuilder.GetPlansVisibleToOrgReturns([]models.ServicePlanFields{plan1, plan2}, nil) 462 services, err := serviceBuilder.GetServicesVisibleToOrg("org1") 463 Expect(err).NotTo(HaveOccurred()) 464 465 service := services[0] 466 Expect(service.Label).To(Equal("my-service1")) 467 Expect(len(service.Plans)).To(Equal(2)) 468 Expect(service.Plans[0].Name).To(Equal("service-plan1")) 469 Expect(service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) 470 }) 471 472 Context("When no plans are visible to the provided org", func() { 473 It("Returns nil", func() { 474 planBuilder.GetPlansVisibleToOrgReturns(nil, nil) 475 services, err := serviceBuilder.GetServicesVisibleToOrg("org3") 476 Expect(err).NotTo(HaveOccurred()) 477 478 Expect(services).To(BeNil()) 479 }) 480 }) 481 }) 482 })