github.com/orange-cloudfoundry/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 })