github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/cf/actors/brokerbuilder/broker_builder_test.go (about) 1 package brokerbuilder_test 2 3 import ( 4 "errors" 5 6 "github.com/liamawhite/cli-with-i18n/cf/actors/brokerbuilder" 7 "github.com/liamawhite/cli-with-i18n/cf/api/apifakes" 8 "github.com/liamawhite/cli-with-i18n/cf/models" 9 10 "github.com/liamawhite/cli-with-i18n/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 })