github.com/sleungcy/cli@v7.1.0+incompatible/actor/v7action/marketplace_test.go (about)

     1  package v7action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	. "code.cloudfoundry.org/cli/actor/v7action"
     7  	"code.cloudfoundry.org/cli/actor/v7action/v7actionfakes"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
     9  	"code.cloudfoundry.org/cli/resources"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  )
    13  
    14  var _ = Describe("marketplace", func() {
    15  	var (
    16  		actor                     *Actor
    17  		fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient
    18  	)
    19  
    20  	BeforeEach(func() {
    21  		fakeCloudControllerClient = new(v7actionfakes.FakeCloudControllerClient)
    22  		actor = NewActor(fakeCloudControllerClient, nil, nil, nil, nil, nil)
    23  	})
    24  
    25  	Describe("Marketplace", func() {
    26  		BeforeEach(func() {
    27  			fakeCloudControllerClient.GetServicePlansWithOfferingsReturns(
    28  				[]ccv3.ServiceOfferingWithPlans{
    29  					{
    30  						GUID:              "offering-guid-1",
    31  						Name:              "offering-1",
    32  						Description:       "about offering 1",
    33  						ServiceBrokerName: "service-broker-1",
    34  						Plans: []resources.ServicePlan{
    35  							{
    36  								GUID: "plan-guid-1",
    37  								Name: "plan-1",
    38  							},
    39  						},
    40  					},
    41  					{
    42  						GUID:              "offering-guid-2",
    43  						Name:              "offering-2",
    44  						Description:       "about offering 2",
    45  						ServiceBrokerName: "service-broker-2",
    46  						Plans: []resources.ServicePlan{
    47  							{
    48  								GUID: "plan-guid-2",
    49  								Name: "plan-2",
    50  							},
    51  							{
    52  								GUID: "plan-guid-3",
    53  								Name: "plan-3",
    54  							},
    55  						},
    56  					},
    57  				},
    58  				ccv3.Warnings{"foo", "bar"},
    59  				nil,
    60  			)
    61  		})
    62  
    63  		It("calls the client", func() {
    64  			_, _, _ = actor.Marketplace(MarketplaceFilter{})
    65  
    66  			Expect(fakeCloudControllerClient.GetServicePlansWithOfferingsCallCount()).To(Equal(1))
    67  			queries := fakeCloudControllerClient.GetServicePlansWithOfferingsArgsForCall(0)
    68  			Expect(queries).To(BeEmpty())
    69  		})
    70  
    71  		It("returns a list of service offerings and plans", func() {
    72  			offerings, warnings, err := actor.Marketplace(MarketplaceFilter{})
    73  			Expect(err).NotTo(HaveOccurred())
    74  			Expect(warnings).To(ConsistOf("foo", "bar"))
    75  			Expect(offerings).To(Equal([]ServiceOfferingWithPlans{
    76  				{
    77  					GUID:              "offering-guid-1",
    78  					Name:              "offering-1",
    79  					Description:       "about offering 1",
    80  					ServiceBrokerName: "service-broker-1",
    81  					Plans: []resources.ServicePlan{
    82  						{
    83  							GUID: "plan-guid-1",
    84  							Name: "plan-1",
    85  						},
    86  					},
    87  				},
    88  				{
    89  					GUID:              "offering-guid-2",
    90  					Name:              "offering-2",
    91  					Description:       "about offering 2",
    92  					ServiceBrokerName: "service-broker-2",
    93  					Plans: []resources.ServicePlan{
    94  						{
    95  							GUID: "plan-guid-2",
    96  							Name: "plan-2",
    97  						},
    98  						{
    99  							GUID: "plan-guid-3",
   100  							Name: "plan-3",
   101  						},
   102  					},
   103  				},
   104  			}))
   105  		})
   106  
   107  		When("a space GUID is specified", func() {
   108  			It("adds the GUID to the query", func() {
   109  				_, _, _ = actor.Marketplace(MarketplaceFilter{SpaceGUID: "space-guid"})
   110  
   111  				Expect(fakeCloudControllerClient.GetServicePlansWithOfferingsCallCount()).To(Equal(1))
   112  				queries := fakeCloudControllerClient.GetServicePlansWithOfferingsArgsForCall(0)
   113  				Expect(queries).To(ConsistOf(ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{"space-guid"}}))
   114  			})
   115  		})
   116  
   117  		When("a service offering name is specified", func() {
   118  			It("adds the service offering name to the query", func() {
   119  				_, _, _ = actor.Marketplace(MarketplaceFilter{ServiceOfferingName: "my-service-offering"})
   120  
   121  				Expect(fakeCloudControllerClient.GetServicePlansWithOfferingsCallCount()).To(Equal(1))
   122  				queries := fakeCloudControllerClient.GetServicePlansWithOfferingsArgsForCall(0)
   123  				Expect(queries).To(ConsistOf(ccv3.Query{Key: ccv3.ServiceOfferingNamesFilter, Values: []string{"my-service-offering"}}))
   124  			})
   125  		})
   126  
   127  		When("a service broker name is specified", func() {
   128  			It("adds the service broker name to the query", func() {
   129  				_, _, _ = actor.Marketplace(MarketplaceFilter{ServiceBrokerName: "my-service-broker"})
   130  
   131  				Expect(fakeCloudControllerClient.GetServicePlansWithOfferingsCallCount()).To(Equal(1))
   132  				queries := fakeCloudControllerClient.GetServicePlansWithOfferingsArgsForCall(0)
   133  				Expect(queries).To(ConsistOf(ccv3.Query{Key: ccv3.ServiceBrokerNamesFilter, Values: []string{"my-service-broker"}}))
   134  			})
   135  		})
   136  
   137  		When("all filters are specified", func() {
   138  			It("adds all the filters to the query", func() {
   139  				_, _, _ = actor.Marketplace(MarketplaceFilter{
   140  					SpaceGUID:           "space-guid",
   141  					ServiceBrokerName:   "my-service-broker",
   142  					ServiceOfferingName: "my-service-offering",
   143  				})
   144  
   145  				Expect(fakeCloudControllerClient.GetServicePlansWithOfferingsCallCount()).To(Equal(1))
   146  				queries := fakeCloudControllerClient.GetServicePlansWithOfferingsArgsForCall(0)
   147  				Expect(queries).To(ConsistOf(
   148  					ccv3.Query{Key: ccv3.ServiceBrokerNamesFilter, Values: []string{"my-service-broker"}},
   149  					ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{"space-guid"}},
   150  					ccv3.Query{Key: ccv3.ServiceOfferingNamesFilter, Values: []string{"my-service-offering"}},
   151  				))
   152  			})
   153  		})
   154  
   155  		When("the client returns an error", func() {
   156  			BeforeEach(func() {
   157  				fakeCloudControllerClient.GetServicePlansWithOfferingsReturns(
   158  					[]ccv3.ServiceOfferingWithPlans{{}},
   159  					ccv3.Warnings{"foo", "bar"},
   160  					errors.New("bang"),
   161  				)
   162  			})
   163  
   164  			It("fails", func() {
   165  				offerings, warnings, err := actor.Marketplace(MarketplaceFilter{})
   166  				Expect(err).To(MatchError("bang"))
   167  				Expect(warnings).To(ConsistOf("foo", "bar"))
   168  				Expect(offerings).To(BeNil())
   169  			})
   170  		})
   171  	})
   172  })