github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/actors/broker_builder/broker_builder_test.go (about)

     1  package broker_builder_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/cloudfoundry/cli/cf/actors/broker_builder"
     7  	"github.com/cloudfoundry/cli/cf/api/fakes"
     8  	"github.com/cloudfoundry/cli/cf/models"
     9  
    10  	fake_service_builder "github.com/cloudfoundry/cli/cf/actors/service_builder/fakes"
    11  
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("Broker Builder", func() {
    17  	var (
    18  		brokerBuilder broker_builder.BrokerBuilder
    19  
    20  		serviceBuilder *fake_service_builder.FakeServiceBuilder
    21  		brokerRepo     *fakes.FakeServiceBrokerRepo
    22  
    23  		serviceBroker1 models.ServiceBroker
    24  
    25  		services           models.ServiceOfferings
    26  		service1           models.ServiceOffering
    27  		service2           models.ServiceOffering
    28  		service3           models.ServiceOffering
    29  		publicServicePlan  models.ServicePlanFields
    30  		privateServicePlan models.ServicePlanFields
    31  	)
    32  
    33  	BeforeEach(func() {
    34  		brokerRepo = &fakes.FakeServiceBrokerRepo{}
    35  		serviceBuilder = &fake_service_builder.FakeServiceBuilder{}
    36  		brokerBuilder = broker_builder.NewBuilder(brokerRepo, serviceBuilder)
    37  
    38  		serviceBroker1 = models.ServiceBroker{Guid: "my-service-broker-guid", Name: "my-service-broker"}
    39  
    40  		publicServicePlan = models.ServicePlanFields{
    41  			Name:   "public-service-plan",
    42  			Guid:   "public-service-plan-guid",
    43  			Public: true,
    44  		}
    45  
    46  		privateServicePlan = models.ServicePlanFields{
    47  			Name:   "private-service-plan",
    48  			Guid:   "private-service-plan-guid",
    49  			Public: false,
    50  			OrgNames: []string{
    51  				"org-1",
    52  				"org-2",
    53  			},
    54  		}
    55  
    56  		service1 = models.ServiceOffering{
    57  			ServiceOfferingFields: models.ServiceOfferingFields{
    58  				Label:      "my-public-service",
    59  				Guid:       "my-public-service-guid",
    60  				BrokerGuid: "my-service-broker-guid",
    61  			},
    62  			Plans: []models.ServicePlanFields{
    63  				publicServicePlan,
    64  				privateServicePlan,
    65  			},
    66  		}
    67  
    68  		service2 = models.ServiceOffering{
    69  			ServiceOfferingFields: models.ServiceOfferingFields{
    70  				Label:      "my-other-public-service",
    71  				Guid:       "my-other-public-service-guid",
    72  				BrokerGuid: "my-service-broker-guid",
    73  			},
    74  			Plans: []models.ServicePlanFields{
    75  				publicServicePlan,
    76  				privateServicePlan,
    77  			},
    78  		}
    79  
    80  		service3 = models.ServiceOffering{
    81  			ServiceOfferingFields: models.ServiceOfferingFields{
    82  				Label:      "my-other-public-service",
    83  				Guid:       "my-other-public-service-guid",
    84  				BrokerGuid: "my-service-broker-guid",
    85  			},
    86  			Plans: []models.ServicePlanFields{
    87  				publicServicePlan,
    88  				privateServicePlan,
    89  			},
    90  		}
    91  
    92  		services = models.ServiceOfferings(
    93  			[]models.ServiceOffering{
    94  				service1,
    95  				service2,
    96  			})
    97  
    98  		brokerRepo.FindByGuidServiceBroker = serviceBroker1
    99  	})
   100  
   101  	Describe(".AttachBrokersToServices", func() {
   102  		It("attaches brokers to an array of services", func() {
   103  
   104  			brokers, err := brokerBuilder.AttachBrokersToServices(services)
   105  			Expect(err).NotTo(HaveOccurred())
   106  			Expect(len(brokers)).To(Equal(1))
   107  			Expect(brokers[0].Name).To(Equal("my-service-broker"))
   108  			Expect(brokers[0].Services[0].Label).To(Equal("my-public-service"))
   109  			Expect(len(brokers[0].Services[0].Plans)).To(Equal(2))
   110  			Expect(brokers[0].Services[1].Label).To(Equal("my-other-public-service"))
   111  			Expect(len(brokers[0].Services[0].Plans)).To(Equal(2))
   112  		})
   113  
   114  		It("skips services that have no associated broker, e.g. v1 services", func() {
   115  			brokerlessService := models.ServiceOffering{
   116  				ServiceOfferingFields: models.ServiceOfferingFields{
   117  					Label: "lonely-v1-service",
   118  					Guid:  "i-am-sad-and-old",
   119  				},
   120  				Plans: []models.ServicePlanFields{
   121  					publicServicePlan,
   122  					privateServicePlan,
   123  				},
   124  			}
   125  			services = models.ServiceOfferings(
   126  				[]models.ServiceOffering{
   127  					service1,
   128  					service2,
   129  					brokerlessService,
   130  				})
   131  
   132  			brokers, err := brokerBuilder.AttachBrokersToServices(services)
   133  			Expect(err).NotTo(HaveOccurred())
   134  			Expect(len(brokers)).To(Equal(1))
   135  			Expect(brokers[0].Name).To(Equal("my-service-broker"))
   136  			Expect(brokers[0].Services[0].Label).To(Equal("my-public-service"))
   137  			Expect(len(brokers[0].Services[0].Plans)).To(Equal(2))
   138  			Expect(brokers[0].Services[1].Label).To(Equal("my-other-public-service"))
   139  			Expect(len(brokers[0].Services[0].Plans)).To(Equal(2))
   140  		})
   141  	})
   142  
   143  	Describe(".AttachSpecificBrokerToServices", func() {
   144  		BeforeEach(func() {
   145  			service3 = models.ServiceOffering{
   146  				ServiceOfferingFields: models.ServiceOfferingFields{
   147  					Label:      "my-other-public-service",
   148  					Guid:       "my-other-public-service-guid",
   149  					BrokerGuid: "my-other-service-broker-guid",
   150  				},
   151  				Plans: []models.ServicePlanFields{
   152  					publicServicePlan,
   153  					privateServicePlan,
   154  				},
   155  			}
   156  			services = append(services, service3)
   157  		})
   158  
   159  		It("attaches a single broker to only services that match", func() {
   160  			serviceBroker1.Services = models.ServiceOfferings{}
   161  			brokerRepo.FindByNameServiceBroker = serviceBroker1
   162  			broker, err := brokerBuilder.AttachSpecificBrokerToServices("my-service-broker", services)
   163  
   164  			Expect(err).NotTo(HaveOccurred())
   165  			Expect(broker.Name).To(Equal("my-service-broker"))
   166  			Expect(broker.Services[0].Label).To(Equal("my-public-service"))
   167  			Expect(len(broker.Services[0].Plans)).To(Equal(2))
   168  			Expect(broker.Services[1].Label).To(Equal("my-other-public-service"))
   169  			Expect(len(broker.Services[0].Plans)).To(Equal(2))
   170  			Expect(len(broker.Services)).To(Equal(2))
   171  		})
   172  	})
   173  
   174  	Describe(".GetAllServiceBrokers", func() {
   175  		It("returns an error if we cannot list all brokers", func() {
   176  			brokerRepo.ListErr = true
   177  
   178  			_, err := brokerBuilder.GetAllServiceBrokers()
   179  			Expect(err).To(HaveOccurred())
   180  		})
   181  
   182  		It("returns an error if we cannot list the services for a broker", func() {
   183  			brokerRepo.ServiceBrokers = []models.ServiceBroker{serviceBroker1}
   184  			serviceBuilder.GetServicesForBrokerReturns(nil, errors.New("Cannot find services"))
   185  
   186  			_, err := brokerBuilder.GetAllServiceBrokers()
   187  			Expect(err).To(HaveOccurred())
   188  		})
   189  
   190  		It("returns all service brokers populated with their services", func() {
   191  			brokerRepo.ServiceBrokers = []models.ServiceBroker{serviceBroker1}
   192  			serviceBuilder.GetServicesForBrokerReturns(services, nil)
   193  
   194  			brokers, err := brokerBuilder.GetAllServiceBrokers()
   195  			Expect(err).NotTo(HaveOccurred())
   196  			Expect(len(brokers)).To(Equal(1))
   197  			Expect(brokers[0].Name).To(Equal("my-service-broker"))
   198  			Expect(brokers[0].Services[0].Label).To(Equal("my-public-service"))
   199  			Expect(len(brokers[0].Services[0].Plans)).To(Equal(2))
   200  			Expect(brokers[0].Services[1].Label).To(Equal("my-other-public-service"))
   201  			Expect(len(brokers[0].Services[0].Plans)).To(Equal(2))
   202  		})
   203  	})
   204  
   205  	Describe(".GetBrokerWithAllServices", func() {
   206  		It("returns a service broker populated with their services", func() {
   207  			brokerRepo.FindByNameServiceBroker = serviceBroker1
   208  			serviceBuilder.GetServicesForBrokerReturns(services, nil)
   209  
   210  			broker, err := brokerBuilder.GetBrokerWithAllServices("my-service-broker")
   211  			Expect(err).NotTo(HaveOccurred())
   212  			Expect(broker.Name).To(Equal("my-service-broker"))
   213  			Expect(broker.Services[0].Label).To(Equal("my-public-service"))
   214  			Expect(len(broker.Services[0].Plans)).To(Equal(2))
   215  			Expect(broker.Services[1].Label).To(Equal("my-other-public-service"))
   216  			Expect(len(broker.Services[0].Plans)).To(Equal(2))
   217  		})
   218  	})
   219  
   220  	Describe(".GetBrokerWithSpecifiedService", func() {
   221  		It("returns an error if a broker containeing the specific service cannot be found", func() {
   222  			serviceBuilder.GetServiceByNameWithPlansWithOrgNamesReturns(models.ServiceOffering{}, errors.New("Asplosions"))
   223  			_, err := brokerBuilder.GetBrokerWithSpecifiedService("totally-not-a-service")
   224  
   225  			Expect(err).To(HaveOccurred())
   226  		})
   227  
   228  		It("returns the service broker populated with the specific service", func() {
   229  			serviceBuilder.GetServiceByNameWithPlansWithOrgNamesReturns(service1, nil)
   230  			brokerRepo.FindByGuidServiceBroker = serviceBroker1
   231  
   232  			broker, err := brokerBuilder.GetBrokerWithSpecifiedService("my-public-service")
   233  			Expect(err).NotTo(HaveOccurred())
   234  			Expect(broker.Name).To(Equal("my-service-broker"))
   235  			Expect(len(broker.Services)).To(Equal(1))
   236  			Expect(broker.Services[0].Label).To(Equal("my-public-service"))
   237  			Expect(len(broker.Services[0].Plans)).To(Equal(2))
   238  		})
   239  	})
   240  })