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  })