github.com/cloudfoundry/cli@v7.1.0+incompatible/cf/actors/services_test.go (about)

     1  package actors_test
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/cf/actors"
     5  	"code.cloudfoundry.org/cli/cf/actors/brokerbuilder/brokerbuilderfakes"
     6  	"code.cloudfoundry.org/cli/cf/actors/servicebuilder/servicebuilderfakes"
     7  	"code.cloudfoundry.org/cli/cf/api/organizations/organizationsfakes"
     8  	"code.cloudfoundry.org/cli/cf/errors"
     9  	"code.cloudfoundry.org/cli/cf/models"
    10  
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Services", func() {
    16  	var (
    17  		actor          actors.ServiceActor
    18  		brokerBuilder  *brokerbuilderfakes.FakeBrokerBuilder
    19  		serviceBuilder *servicebuilderfakes.FakeServiceBuilder
    20  		orgRepo        *organizationsfakes.FakeOrganizationRepository
    21  		serviceBroker1 models.ServiceBroker
    22  		service1       models.ServiceOffering
    23  	)
    24  
    25  	BeforeEach(func() {
    26  		orgRepo = new(organizationsfakes.FakeOrganizationRepository)
    27  		brokerBuilder = new(brokerbuilderfakes.FakeBrokerBuilder)
    28  		serviceBuilder = new(servicebuilderfakes.FakeServiceBuilder)
    29  
    30  		actor = actors.NewServiceHandler(orgRepo, brokerBuilder, serviceBuilder)
    31  
    32  		serviceBroker1 = models.ServiceBroker{GUID: "my-service-broker-guid1", Name: "my-service-broker1"}
    33  
    34  		service1 = models.ServiceOffering{ServiceOfferingFields: models.ServiceOfferingFields{
    35  			Label:      "my-service1",
    36  			GUID:       "service-guid1",
    37  			BrokerGUID: "my-service-broker-guid1"},
    38  		}
    39  
    40  		org1 := models.Organization{}
    41  		org1.Name = "org1"
    42  		org1.GUID = "org-guid"
    43  
    44  		org2 := models.Organization{}
    45  		org2.Name = "org2"
    46  		org2.GUID = "org2-guid"
    47  	})
    48  
    49  	Describe("FilterBrokers", func() {
    50  		Context("when no flags are passed", func() {
    51  			It("returns all brokers", func() {
    52  				returnedBrokers := []models.ServiceBroker{serviceBroker1}
    53  				brokerBuilder.GetAllServiceBrokersReturns(returnedBrokers, nil)
    54  
    55  				brokers, err := actor.FilterBrokers("", "", "")
    56  				Expect(err).NotTo(HaveOccurred())
    57  
    58  				Expect(len(brokers)).To(Equal(1))
    59  			})
    60  		})
    61  
    62  		Context("when the -b flag is passed", func() {
    63  			It("returns a single broker contained in a slice with all dependencies populated", func() {
    64  				returnedBroker := serviceBroker1
    65  				brokerBuilder.GetBrokerWithAllServicesReturns(returnedBroker, nil)
    66  
    67  				brokers, err := actor.FilterBrokers("my-service-broker1", "", "")
    68  				Expect(err).NotTo(HaveOccurred())
    69  
    70  				Expect(len(brokers)).To(Equal(1))
    71  			})
    72  		})
    73  
    74  		Context("when the -e flag is passed", func() {
    75  			It("returns a single broker containing a single service", func() {
    76  				serviceBroker1.Services = []models.ServiceOffering{service1}
    77  				returnedBroker := serviceBroker1
    78  				brokerBuilder.GetBrokerWithSpecifiedServiceReturns(returnedBroker, nil)
    79  
    80  				brokers, err := actor.FilterBrokers("", "my-service1", "")
    81  				Expect(err).NotTo(HaveOccurred())
    82  
    83  				Expect(len(brokers)).To(Equal(1))
    84  				Expect(len(brokers[0].Services)).To(Equal(1))
    85  
    86  				Expect(brokers[0].Services[0].GUID).To(Equal("service-guid1"))
    87  			})
    88  		})
    89  
    90  		Context("when the -o flag is passed", func() {
    91  			It("returns an error if the org does not actually exist", func() {
    92  				orgRepo.FindByNameReturns(models.Organization{}, errors.NewModelNotFoundError("organization", "org-that-shall-not-be-found"))
    93  				_, err := actor.FilterBrokers("", "", "org-that-shall-not-be-found")
    94  
    95  				Expect(err).To(HaveOccurred())
    96  			})
    97  
    98  			It("returns a slice of brokers containing Services/Service Plans visible to the org", func() {
    99  				serviceBroker1.Services = []models.ServiceOffering{service1}
   100  				returnedBroker := []models.ServiceBroker{serviceBroker1}
   101  
   102  				serviceBuilder.GetServicesVisibleToOrgReturns([]models.ServiceOffering{service1}, nil)
   103  				brokerBuilder.AttachBrokersToServicesReturns(returnedBroker, nil)
   104  
   105  				brokers, err := actor.FilterBrokers("", "", "org1")
   106  				Expect(err).NotTo(HaveOccurred())
   107  
   108  				orgName := serviceBuilder.GetServicesVisibleToOrgArgsForCall(0)
   109  				Expect(orgName).To(Equal("org1"))
   110  
   111  				Expect(len(brokers)).To(Equal(1))
   112  				Expect(len(brokers[0].Services)).To(Equal(1))
   113  				Expect(brokers[0].Services[0].GUID).To(Equal("service-guid1"))
   114  			})
   115  		})
   116  
   117  		Context("when the -b AND the -e flags are passed", func() {
   118  			It("returns the intersection set", func() {
   119  				serviceBroker1.Services = []models.ServiceOffering{service1}
   120  				returnedBroker := serviceBroker1
   121  				brokerBuilder.GetBrokerWithSpecifiedServiceReturns(returnedBroker, nil)
   122  
   123  				brokers, err := actor.FilterBrokers("my-service-broker1", "my-service1", "")
   124  				Expect(err).NotTo(HaveOccurred())
   125  
   126  				Expect(len(brokers)).To(Equal(1))
   127  				Expect(len(brokers[0].Services)).To(Equal(1))
   128  
   129  				Expect(brokers[0].Services[0].Label).To(Equal("my-service1"))
   130  				Expect(brokers[0].Services[0].GUID).To(Equal("service-guid1"))
   131  			})
   132  
   133  			Context("when the -b AND -e intersection is the empty set", func() {
   134  				It("returns an empty set", func() {
   135  					brokerBuilder.GetBrokerWithSpecifiedServiceReturns(models.ServiceBroker{}, nil)
   136  					brokers, err := actor.FilterBrokers("my-service-broker", "my-service2", "")
   137  
   138  					Expect(len(brokers)).To(Equal(0))
   139  					Expect(err).To(BeNil())
   140  				})
   141  			})
   142  		})
   143  
   144  		Context("when the -b AND the -o flags are passed", func() {
   145  			It("returns the intersection set", func() {
   146  				serviceBroker1.Services = []models.ServiceOffering{service1}
   147  				returnedBroker := serviceBroker1
   148  
   149  				serviceBuilder.GetServiceVisibleToOrgReturns(service1, nil)
   150  				brokerBuilder.AttachSpecificBrokerToServicesReturns(returnedBroker, nil)
   151  
   152  				brokers, err := actor.FilterBrokers("my-service-broker", "", "org1")
   153  				Expect(err).NotTo(HaveOccurred())
   154  
   155  				Expect(len(brokers)).To(Equal(1))
   156  				Expect(len(brokers[0].Services)).To(Equal(1))
   157  
   158  				Expect(brokers[0].Services[0].Label).To(Equal("my-service1"))
   159  				Expect(brokers[0].Services[0].GUID).To(Equal("service-guid1"))
   160  			})
   161  		})
   162  
   163  		Context("when the -e AND the -o flags are passed", func() {
   164  			It("returns the intersection set", func() {
   165  				serviceBroker1.Services = []models.ServiceOffering{service1}
   166  				returnedBrokers := []models.ServiceBroker{serviceBroker1}
   167  
   168  				serviceBuilder.GetServicesVisibleToOrgReturns([]models.ServiceOffering{service1}, nil)
   169  				brokerBuilder.AttachBrokersToServicesReturns(returnedBrokers, nil)
   170  
   171  				brokers, err := actor.FilterBrokers("", "my-service1", "org1")
   172  				Expect(err).NotTo(HaveOccurred())
   173  
   174  				Expect(len(brokers)).To(Equal(1))
   175  				Expect(len(brokers[0].Services)).To(Equal(1))
   176  
   177  				Expect(brokers[0].Services[0].Label).To(Equal("my-service1"))
   178  				Expect(brokers[0].Services[0].GUID).To(Equal("service-guid1"))
   179  			})
   180  		})
   181  
   182  		Context("when the -b AND -e AND the -o flags are passed", func() {
   183  			It("returns the intersection set", func() {
   184  				serviceBroker1.Services = []models.ServiceOffering{service1}
   185  				returnedBroker := serviceBroker1
   186  
   187  				serviceBuilder.GetServicesVisibleToOrgReturns([]models.ServiceOffering{service1}, nil)
   188  				brokerBuilder.AttachSpecificBrokerToServicesReturns(returnedBroker, nil)
   189  
   190  				brokers, err := actor.FilterBrokers("my-service-broker1", "my-service1", "org1")
   191  				Expect(err).NotTo(HaveOccurred())
   192  
   193  				Expect(len(brokers)).To(Equal(1))
   194  				Expect(len(brokers[0].Services)).To(Equal(1))
   195  
   196  				Expect(brokers[0].Services[0].Label).To(Equal("my-service1"))
   197  				Expect(brokers[0].Services[0].GUID).To(Equal("service-guid1"))
   198  			})
   199  		})
   200  	})
   201  })