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