github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/actor/v2action/service_binding_test.go (about) 1 package v2action_test 2 3 import ( 4 "errors" 5 6 . "code.cloudfoundry.org/cli/actor/v2action" 7 "code.cloudfoundry.org/cli/actor/v2action/v2actionfakes" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" 9 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 ) 13 14 var _ = Describe("Service Binding Actions", func() { 15 var ( 16 actor *Actor 17 fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient 18 ) 19 20 BeforeEach(func() { 21 fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient) 22 actor = NewActor(fakeCloudControllerClient, nil) 23 }) 24 25 Describe("BindServiceBySpace", func() { 26 var ( 27 executeErr error 28 warnings Warnings 29 ) 30 31 JustBeforeEach(func() { 32 warnings, executeErr = actor.BindServiceBySpace("some-app-name", "some-service-instance-name", "some-space-guid", map[string]interface{}{"some-parameter": "some-value"}) 33 }) 34 35 Context("when getting the application errors", func() { 36 BeforeEach(func() { 37 fakeCloudControllerClient.GetApplicationsReturns( 38 nil, 39 ccv2.Warnings{"foo-1"}, 40 errors.New("some-error"), 41 ) 42 }) 43 44 It("returns the error", func() { 45 Expect(executeErr).To(MatchError(errors.New("some-error"))) 46 Expect(warnings).To(ConsistOf("foo-1")) 47 }) 48 }) 49 50 Context("when getting the application succeeds", func() { 51 BeforeEach(func() { 52 fakeCloudControllerClient.GetApplicationsReturns( 53 []ccv2.Application{{GUID: "some-app-guid"}}, 54 ccv2.Warnings{"foo-1"}, 55 nil, 56 ) 57 }) 58 59 Context("when getting the service instance errors", func() { 60 BeforeEach(func() { 61 fakeCloudControllerClient.GetSpaceServiceInstancesReturns( 62 []ccv2.ServiceInstance{}, 63 ccv2.Warnings{"foo-2"}, 64 errors.New("some-error"), 65 ) 66 }) 67 68 It("returns the error", func() { 69 Expect(executeErr).To(MatchError(errors.New("some-error"))) 70 Expect(warnings).To(ConsistOf("foo-1", "foo-2")) 71 }) 72 }) 73 74 Context("when getting the service instance succeeds", func() { 75 BeforeEach(func() { 76 fakeCloudControllerClient.GetSpaceServiceInstancesReturns( 77 []ccv2.ServiceInstance{{GUID: "some-service-instance-guid"}}, 78 ccv2.Warnings{"foo-2"}, 79 nil, 80 ) 81 }) 82 83 Context("when getting binding the service instance to the application errors", func() { 84 BeforeEach(func() { 85 fakeCloudControllerClient.CreateServiceBindingReturns( 86 ccv2.ServiceBinding{}, 87 ccv2.Warnings{"foo-3"}, 88 errors.New("some-error"), 89 ) 90 }) 91 92 It("returns the error", func() { 93 Expect(executeErr).To(MatchError(errors.New("some-error"))) 94 Expect(warnings).To(ConsistOf("foo-1", "foo-2", "foo-3")) 95 }) 96 }) 97 Context("when getting binding the service instance to the application succeeds", func() { 98 BeforeEach(func() { 99 fakeCloudControllerClient.CreateServiceBindingReturns( 100 ccv2.ServiceBinding{GUID: "some-service-binding-guid"}, 101 ccv2.Warnings{"foo-3"}, 102 nil, 103 ) 104 }) 105 106 It("returns all warnings", func() { 107 Expect(executeErr).ToNot(HaveOccurred()) 108 Expect(warnings).To(ConsistOf("foo-1", "foo-2", "foo-3")) 109 110 Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1)) 111 112 Expect(fakeCloudControllerClient.GetSpaceServiceInstancesCallCount()).To(Equal(1)) 113 114 Expect(fakeCloudControllerClient.CreateServiceBindingCallCount()).To(Equal(1)) 115 appGUID, serviceInstanceGUID, parameters := fakeCloudControllerClient.CreateServiceBindingArgsForCall(0) 116 Expect(appGUID).To(Equal("some-app-guid")) 117 Expect(serviceInstanceGUID).To(Equal("some-service-instance-guid")) 118 Expect(parameters).To(Equal(map[string]interface{}{"some-parameter": "some-value"})) 119 }) 120 }) 121 }) 122 }) 123 }) 124 125 Describe("GetServiceBindingByApplicationAndServiceInstance", func() { 126 Context("when the service binding exists", func() { 127 BeforeEach(func() { 128 fakeCloudControllerClient.GetServiceBindingsReturns( 129 []ccv2.ServiceBinding{ 130 { 131 GUID: "some-service-binding-guid", 132 }, 133 }, 134 ccv2.Warnings{"foo"}, 135 nil, 136 ) 137 }) 138 139 It("returns the service binding and warnings", func() { 140 serviceBinding, warnings, err := actor.GetServiceBindingByApplicationAndServiceInstance("some-app-guid", "some-service-instance-guid") 141 Expect(err).ToNot(HaveOccurred()) 142 Expect(serviceBinding).To(Equal(ServiceBinding{ 143 GUID: "some-service-binding-guid", 144 })) 145 Expect(warnings).To(Equal(Warnings{"foo"})) 146 147 Expect(fakeCloudControllerClient.GetServiceBindingsCallCount()).To(Equal(1)) 148 Expect(fakeCloudControllerClient.GetServiceBindingsArgsForCall(0)).To(ConsistOf([]ccv2.Query{ 149 ccv2.Query{ 150 Filter: ccv2.AppGUIDFilter, 151 Operator: ccv2.EqualOperator, 152 Value: "some-app-guid", 153 }, 154 ccv2.Query{ 155 Filter: ccv2.ServiceInstanceGUIDFilter, 156 Operator: ccv2.EqualOperator, 157 Value: "some-service-instance-guid", 158 }, 159 })) 160 }) 161 }) 162 163 Context("when the service binding does not exists", func() { 164 BeforeEach(func() { 165 fakeCloudControllerClient.GetServiceBindingsReturns([]ccv2.ServiceBinding{}, nil, nil) 166 }) 167 168 It("returns a ServiceBindingNotFoundError", func() { 169 _, _, err := actor.GetServiceBindingByApplicationAndServiceInstance("some-app-guid", "some-service-instance-guid") 170 Expect(err).To(MatchError(ServiceBindingNotFoundError{ 171 AppGUID: "some-app-guid", 172 ServiceInstanceGUID: "some-service-instance-guid", 173 })) 174 }) 175 }) 176 177 Context("when the cloud controller client returns an error", func() { 178 var expectedError error 179 180 BeforeEach(func() { 181 expectedError = errors.New("I am a CloudControllerClient Error") 182 fakeCloudControllerClient.GetServiceBindingsReturns([]ccv2.ServiceBinding{}, nil, expectedError) 183 }) 184 185 It("returns the error", func() { 186 _, _, err := actor.GetServiceBindingByApplicationAndServiceInstance("some-app-guid", "some-service-instance-guid") 187 Expect(err).To(MatchError(expectedError)) 188 }) 189 }) 190 }) 191 192 Describe("UnbindServiceBySpace", func() { 193 Context("when the service binding exists", func() { 194 BeforeEach(func() { 195 fakeCloudControllerClient.GetApplicationsReturns( 196 []ccv2.Application{ 197 { 198 GUID: "some-app-guid", 199 Name: "some-app", 200 }, 201 }, 202 ccv2.Warnings{"foo-1"}, 203 nil, 204 ) 205 fakeCloudControllerClient.GetSpaceServiceInstancesReturns( 206 []ccv2.ServiceInstance{ 207 { 208 GUID: "some-service-instance-guid", 209 Name: "some-service-instance", 210 }, 211 }, 212 ccv2.Warnings{"foo-2"}, 213 nil, 214 ) 215 fakeCloudControllerClient.GetServiceBindingsReturns( 216 []ccv2.ServiceBinding{ 217 { 218 GUID: "some-service-binding-guid", 219 }, 220 }, 221 ccv2.Warnings{"foo-3"}, 222 nil, 223 ) 224 225 fakeCloudControllerClient.DeleteServiceBindingReturns( 226 ccv2.Warnings{"foo-4", "foo-5"}, 227 nil, 228 ) 229 }) 230 231 It("deletes the service binding", func() { 232 warnings, err := actor.UnbindServiceBySpace("some-app", "some-service-instance", "some-space-guid") 233 Expect(err).NotTo(HaveOccurred()) 234 Expect(warnings).To(ConsistOf(Warnings{"foo-1", "foo-2", "foo-3", "foo-4", "foo-5"})) 235 236 Expect(fakeCloudControllerClient.DeleteServiceBindingCallCount()).To(Equal(1)) 237 Expect(fakeCloudControllerClient.DeleteServiceBindingArgsForCall(0)).To(Equal("some-service-binding-guid")) 238 }) 239 240 Context("when the cloud controller API returns warnings and an error", func() { 241 var expectedError error 242 243 BeforeEach(func() { 244 expectedError = errors.New("I am a CC error") 245 fakeCloudControllerClient.DeleteServiceBindingReturns(ccv2.Warnings{"foo-4", "foo-5"}, expectedError) 246 }) 247 248 It("returns the warnings and the error", func() { 249 warnings, err := actor.UnbindServiceBySpace("some-app", "some-service-instance", "some-space-guid") 250 Expect(err).To(MatchError(expectedError)) 251 Expect(warnings).To(ConsistOf(Warnings{"foo-1", "foo-2", "foo-3", "foo-4", "foo-5"})) 252 }) 253 }) 254 }) 255 }) 256 })