github.com/DaAlbrecht/cf-cli@v0.0.0-20231128151943-1fe19bb400b9/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(ConsistOf(
    69  				ccv3.Query{Key: ccv3.AvailableFilter, Values: []string{"true"}},
    70  				ccv3.Query{Key: ccv3.PerPage, Values: []string{ccv3.MaxPerPage}},
    71  			))
    72  		})
    73  
    74  		It("returns a list of service offerings and plans", func() {
    75  			offerings, warnings, err := actor.Marketplace(MarketplaceFilter{})
    76  			Expect(err).NotTo(HaveOccurred())
    77  			Expect(warnings).To(ConsistOf("foo", "bar"))
    78  			Expect(offerings).To(Equal([]ServiceOfferingWithPlans{
    79  				{
    80  					GUID:              "offering-guid-1",
    81  					Name:              "offering-1",
    82  					Description:       "about offering 1",
    83  					ServiceBrokerName: "service-broker-1",
    84  					Plans: []resources.ServicePlan{
    85  						{
    86  							GUID: "plan-guid-1",
    87  							Name: "plan-1",
    88  						},
    89  					},
    90  				},
    91  				{
    92  					GUID:              "offering-guid-2",
    93  					Name:              "offering-2",
    94  					Description:       "about offering 2",
    95  					ServiceBrokerName: "service-broker-2",
    96  					Plans: []resources.ServicePlan{
    97  						{
    98  							GUID: "plan-guid-2",
    99  							Name: "plan-2",
   100  						},
   101  						{
   102  							GUID: "plan-guid-3",
   103  							Name: "plan-3",
   104  						},
   105  					},
   106  				},
   107  			}))
   108  		})
   109  
   110  		When("a space GUID is specified", func() {
   111  			It("adds the GUID to the query", func() {
   112  				_, _, _ = actor.Marketplace(MarketplaceFilter{SpaceGUID: "space-guid"})
   113  
   114  				Expect(fakeCloudControllerClient.GetServicePlansWithOfferingsCallCount()).To(Equal(1))
   115  				queries := fakeCloudControllerClient.GetServicePlansWithOfferingsArgsForCall(0)
   116  				Expect(queries).To(ContainElement(ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{"space-guid"}}))
   117  			})
   118  		})
   119  
   120  		When("a service offering name is specified", func() {
   121  			It("adds the service offering name to the query", func() {
   122  				_, _, _ = actor.Marketplace(MarketplaceFilter{ServiceOfferingName: "my-service-offering"})
   123  
   124  				Expect(fakeCloudControllerClient.GetServicePlansWithOfferingsCallCount()).To(Equal(1))
   125  				queries := fakeCloudControllerClient.GetServicePlansWithOfferingsArgsForCall(0)
   126  				Expect(queries).To(ContainElement(ccv3.Query{Key: ccv3.ServiceOfferingNamesFilter, Values: []string{"my-service-offering"}}))
   127  			})
   128  		})
   129  
   130  		When("a service broker name is specified", func() {
   131  			It("adds the service broker name to the query", func() {
   132  				_, _, _ = actor.Marketplace(MarketplaceFilter{ServiceBrokerName: "my-service-broker"})
   133  
   134  				Expect(fakeCloudControllerClient.GetServicePlansWithOfferingsCallCount()).To(Equal(1))
   135  				queries := fakeCloudControllerClient.GetServicePlansWithOfferingsArgsForCall(0)
   136  				Expect(queries).To(ContainElement(ccv3.Query{Key: ccv3.ServiceBrokerNamesFilter, Values: []string{"my-service-broker"}}))
   137  			})
   138  		})
   139  
   140  		When("the show unavailable filter is specified", func() {
   141  			It("does not add the `available` query parameter", func() {
   142  				_, _, _ = actor.Marketplace(MarketplaceFilter{ShowUnavailable: true})
   143  
   144  				Expect(fakeCloudControllerClient.GetServicePlansWithOfferingsCallCount()).To(Equal(1))
   145  				queries := fakeCloudControllerClient.GetServicePlansWithOfferingsArgsForCall(0)
   146  				Expect(queries).NotTo(ContainElement(ccv3.Query{Key: ccv3.AvailableFilter, Values: []string{"true"}}))
   147  			})
   148  		})
   149  
   150  		When("all filters are specified", func() {
   151  			It("adds all the filters to the query", func() {
   152  				_, _, _ = actor.Marketplace(MarketplaceFilter{
   153  					SpaceGUID:           "space-guid",
   154  					ServiceBrokerName:   "my-service-broker",
   155  					ServiceOfferingName: "my-service-offering",
   156  				})
   157  
   158  				Expect(fakeCloudControllerClient.GetServicePlansWithOfferingsCallCount()).To(Equal(1))
   159  				queries := fakeCloudControllerClient.GetServicePlansWithOfferingsArgsForCall(0)
   160  				Expect(queries).To(ConsistOf(
   161  					ccv3.Query{Key: ccv3.ServiceBrokerNamesFilter, Values: []string{"my-service-broker"}},
   162  					ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{"space-guid"}},
   163  					ccv3.Query{Key: ccv3.ServiceOfferingNamesFilter, Values: []string{"my-service-offering"}},
   164  					ccv3.Query{Key: ccv3.AvailableFilter, Values: []string{"true"}},
   165  					ccv3.Query{Key: ccv3.PerPage, Values: []string{ccv3.MaxPerPage}},
   166  				))
   167  			})
   168  		})
   169  
   170  		When("the client returns an error", func() {
   171  			BeforeEach(func() {
   172  				fakeCloudControllerClient.GetServicePlansWithOfferingsReturns(
   173  					[]ccv3.ServiceOfferingWithPlans{{}},
   174  					ccv3.Warnings{"foo", "bar"},
   175  					errors.New("bang"),
   176  				)
   177  			})
   178  
   179  			It("fails", func() {
   180  				offerings, warnings, err := actor.Marketplace(MarketplaceFilter{})
   181  				Expect(err).To(MatchError("bang"))
   182  				Expect(warnings).To(ConsistOf("foo", "bar"))
   183  				Expect(offerings).To(BeNil())
   184  			})
   185  		})
   186  	})
   187  })