github.com/sleungcy-sap/cli@v7.1.0+incompatible/cf/actors/brokerbuilder/broker_builder_test.go (about)

     1  package brokerbuilder_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/cf/actors/brokerbuilder"
     7  	"code.cloudfoundry.org/cli/cf/api/apifakes"
     8  	"code.cloudfoundry.org/cli/cf/models"
     9  
    10  	"code.cloudfoundry.org/cli/cf/actors/servicebuilder/servicebuilderfakes"
    11  
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("Broker Builder", func() {
    17  	var (
    18  		brokerBuilder brokerbuilder.BrokerBuilder
    19  
    20  		serviceBuilder *servicebuilderfakes.FakeServiceBuilder
    21  		brokerRepo     *apifakes.FakeServiceBrokerRepository
    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 = new(apifakes.FakeServiceBrokerRepository)
    35  		serviceBuilder = new(servicebuilderfakes.FakeServiceBuilder)
    36  		brokerBuilder = brokerbuilder.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.FindByGUIDReturns(serviceBroker1, nil)
    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.FindByNameReturns(serviceBroker1, nil)
   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.ListServiceBrokersReturns(errors.New("Error finding service brokers"))
   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.ListServiceBrokersStub = func(callback func(models.ServiceBroker) bool) error {
   184  				callback(serviceBroker1)
   185  				return nil
   186  			}
   187  
   188  			serviceBuilder.GetServicesForManyBrokersReturns(nil, errors.New("Cannot find services"))
   189  
   190  			_, err := brokerBuilder.GetAllServiceBrokers()
   191  			Expect(err).To(HaveOccurred())
   192  		})
   193  
   194  		It("returns all service brokers populated with their services", func() {
   195  			brokerRepo.ListServiceBrokersStub = func(callback func(models.ServiceBroker) bool) error {
   196  				callback(serviceBroker1)
   197  				return nil
   198  			}
   199  			serviceBuilder.GetServicesForManyBrokersReturns(services, nil)
   200  
   201  			brokers, err := brokerBuilder.GetAllServiceBrokers()
   202  			Expect(err).NotTo(HaveOccurred())
   203  			Expect(len(brokers)).To(Equal(1))
   204  			Expect(brokers[0].Name).To(Equal("my-service-broker"))
   205  			Expect(brokers[0].Services[0].Label).To(Equal("my-public-service"))
   206  			Expect(len(brokers[0].Services[0].Plans)).To(Equal(2))
   207  			Expect(brokers[0].Services[1].Label).To(Equal("my-other-public-service"))
   208  			Expect(len(brokers[0].Services[0].Plans)).To(Equal(2))
   209  		})
   210  	})
   211  
   212  	Describe(".GetBrokerWithAllServices", func() {
   213  		It("returns a service broker populated with their services", func() {
   214  			brokerRepo.FindByNameReturns(serviceBroker1, nil)
   215  			serviceBuilder.GetServicesForBrokerReturns(services, nil)
   216  
   217  			broker, err := brokerBuilder.GetBrokerWithAllServices("my-service-broker")
   218  			Expect(err).NotTo(HaveOccurred())
   219  			Expect(broker.Name).To(Equal("my-service-broker"))
   220  			Expect(broker.Services[0].Label).To(Equal("my-public-service"))
   221  			Expect(len(broker.Services[0].Plans)).To(Equal(2))
   222  			Expect(broker.Services[1].Label).To(Equal("my-other-public-service"))
   223  			Expect(len(broker.Services[0].Plans)).To(Equal(2))
   224  		})
   225  	})
   226  
   227  	Describe(".GetBrokerWithSpecifiedService", func() {
   228  		It("returns an error if a broker containeing the specific service cannot be found", func() {
   229  			serviceBuilder.GetServiceByNameWithPlansWithOrgNamesReturns(models.ServiceOffering{}, errors.New("Asplosions"))
   230  			_, err := brokerBuilder.GetBrokerWithSpecifiedService("totally-not-a-service")
   231  
   232  			Expect(err).To(HaveOccurred())
   233  		})
   234  
   235  		It("returns the service broker populated with the specific service", func() {
   236  			serviceBuilder.GetServiceByNameWithPlansWithOrgNamesReturns(service1, nil)
   237  			brokerRepo.FindByGUIDReturns(serviceBroker1, nil)
   238  
   239  			broker, err := brokerBuilder.GetBrokerWithSpecifiedService("my-public-service")
   240  			Expect(err).NotTo(HaveOccurred())
   241  			Expect(broker.Name).To(Equal("my-service-broker"))
   242  			Expect(len(broker.Services)).To(Equal(1))
   243  			Expect(broker.Services[0].Label).To(Equal("my-public-service"))
   244  			Expect(len(broker.Services[0].Plans)).To(Equal(2))
   245  		})
   246  	})
   247  })