github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/api/cloudcontroller/ccv2/service_instance_test.go (about) 1 package ccv2_test 2 3 import ( 4 "net/http" 5 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 7 . "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" 8 . "github.com/onsi/ginkgo" 9 . "github.com/onsi/gomega" 10 . "github.com/onsi/gomega/ghttp" 11 ) 12 13 var _ = Describe("Service Instance", func() { 14 var client *Client 15 16 BeforeEach(func() { 17 client = NewTestClient() 18 }) 19 20 Describe("Bind", func() { 21 Context("when the update is successful", func() { 22 Context("when setting the minimum", func() { // are we **only** encoding the things we want 23 BeforeEach(func() { 24 response := ` 25 { 26 "metadata": { 27 "guid": "some-app-guid" 28 }, 29 "entity": { 30 "name": "some-app-name", 31 "space_guid": "some-space-guid" 32 } 33 }` 34 requestBody := map[string]string{ 35 "name": "some-app-name", 36 "space_guid": "some-space-guid", 37 } 38 server.AppendHandlers( 39 CombineHandlers( 40 VerifyRequest(http.MethodPost, "/v2/apps"), 41 VerifyJSONRepresenting(requestBody), 42 RespondWith(http.StatusCreated, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 43 ), 44 ) 45 }) 46 47 It("returns the created object and warnings", func() { 48 app, warnings, err := client.CreateApplication(Application{ 49 Name: "some-app-name", 50 SpaceGUID: "some-space-guid", 51 }) 52 Expect(err).NotTo(HaveOccurred()) 53 54 Expect(app).To(Equal(Application{ 55 GUID: "some-app-guid", 56 Name: "some-app-name", 57 })) 58 Expect(warnings).To(ConsistOf(Warnings{"this is a warning"})) 59 }) 60 }) 61 }) 62 63 Context("when the create returns an error", func() { 64 BeforeEach(func() { 65 response := ` 66 { 67 "description": "Request invalid due to parse error: Field: name, Error: Missing field name, Field: space_guid, Error: Missing field space_guid", 68 "error_code": "CF-MessageParseError", 69 "code": 1001 70 } 71 ` 72 server.AppendHandlers( 73 CombineHandlers( 74 VerifyRequest(http.MethodPost, "/v2/apps"), 75 RespondWith(http.StatusBadRequest, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 76 ), 77 ) 78 }) 79 80 It("returns the error and warnings", func() { 81 _, warnings, err := client.CreateApplication(Application{}) 82 Expect(err).To(MatchError(ccerror.BadRequestError{Message: "Request invalid due to parse error: Field: name, Error: Missing field name, Field: space_guid, Error: Missing field space_guid"})) 83 Expect(warnings).To(ConsistOf(Warnings{"this is a warning"})) 84 }) 85 }) 86 }) 87 88 Describe("ServiceInstance", func() { 89 Describe("UserProvided", func() { 90 Context("when type is USER_PROVIDED_SERVICE", func() { 91 It("returns true", func() { 92 service := ServiceInstance{Type: UserProvidedService} 93 Expect(service.UserProvided()).To(BeTrue()) 94 }) 95 }) 96 97 Context("when type is MANAGED_SERVICE", func() { 98 It("returns false", func() { 99 service := ServiceInstance{Type: ManagedService} 100 Expect(service.UserProvided()).To(BeFalse()) 101 }) 102 }) 103 }) 104 105 Describe("Managed", func() { 106 Context("when type is MANAGED_SERVICE", func() { 107 It("returns false", func() { 108 service := ServiceInstance{Type: ManagedService} 109 Expect(service.Managed()).To(BeTrue()) 110 }) 111 }) 112 113 Context("when type is USER_PROVIDED_SERVICE", func() { 114 It("returns true", func() { 115 service := ServiceInstance{Type: UserProvidedService} 116 Expect(service.Managed()).To(BeFalse()) 117 }) 118 }) 119 }) 120 }) 121 122 Describe("GetServiceInstances", func() { 123 BeforeEach(func() { 124 response1 := `{ 125 "next_url": "/v2/service_instances?q=space_guid:some-space-guid&page=2", 126 "resources": [ 127 { 128 "metadata": { 129 "guid": "some-service-guid-1" 130 }, 131 "entity": { 132 "name": "some-service-name-1", 133 "type": "managed_service_instance" 134 } 135 }, 136 { 137 "metadata": { 138 "guid": "some-service-guid-2" 139 }, 140 "entity": { 141 "name": "some-service-name-2", 142 "type": "managed_service_instance" 143 } 144 } 145 ] 146 }` 147 148 response2 := `{ 149 "next_url": null, 150 "resources": [ 151 { 152 "metadata": { 153 "guid": "some-service-guid-3" 154 }, 155 "entity": { 156 "name": "some-service-name-3", 157 "type": "managed_service_instance" 158 } 159 }, 160 { 161 "metadata": { 162 "guid": "some-service-guid-4" 163 }, 164 "entity": { 165 "name": "some-service-name-4", 166 "type": "managed_service_instance" 167 } 168 } 169 ] 170 }` 171 172 server.AppendHandlers( 173 CombineHandlers( 174 VerifyRequest(http.MethodGet, "/v2/service_instances", "q=space_guid:some-space-guid"), 175 RespondWith(http.StatusOK, response1, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 176 ), 177 ) 178 179 server.AppendHandlers( 180 CombineHandlers( 181 VerifyRequest(http.MethodGet, "/v2/service_instances", "q=space_guid:some-space-guid&page=2"), 182 RespondWith(http.StatusOK, response2, http.Header{"X-Cf-Warnings": {"this is another warning"}}), 183 ), 184 ) 185 }) 186 187 Context("when service instances exist", func() { 188 It("returns all the queried service instances", func() { 189 serviceInstances, warnings, err := client.GetServiceInstances([]Query{{ 190 Filter: SpaceGUIDFilter, 191 Operator: EqualOperator, 192 Value: "some-space-guid", 193 }}) 194 Expect(err).NotTo(HaveOccurred()) 195 196 Expect(serviceInstances).To(ConsistOf([]ServiceInstance{ 197 {Name: "some-service-name-1", GUID: "some-service-guid-1", Type: ManagedService}, 198 {Name: "some-service-name-2", GUID: "some-service-guid-2", Type: ManagedService}, 199 {Name: "some-service-name-3", GUID: "some-service-guid-3", Type: ManagedService}, 200 {Name: "some-service-name-4", GUID: "some-service-guid-4", Type: ManagedService}, 201 })) 202 Expect(warnings).To(ConsistOf(Warnings{"this is a warning", "this is another warning"})) 203 }) 204 }) 205 }) 206 207 Describe("GetSpaceServiceInstances", func() { 208 Context("including user provided services", func() { 209 BeforeEach(func() { 210 response1 := `{ 211 "next_url": "/v2/spaces/some-space-guid/service_instances?return_user_provided_service_instances=true&q=name:foobar&page=2", 212 "resources": [ 213 { 214 "metadata": { 215 "guid": "some-service-guid-1" 216 }, 217 "entity": { 218 "name": "some-service-name-1", 219 "type": "managed_service_instance" 220 } 221 }, 222 { 223 "metadata": { 224 "guid": "some-service-guid-2" 225 }, 226 "entity": { 227 "name": "some-service-name-2", 228 "type": "user_provided_service_instance" 229 } 230 } 231 ] 232 }` 233 234 response2 := `{ 235 "next_url": null, 236 "resources": [ 237 { 238 "metadata": { 239 "guid": "some-service-guid-3" 240 }, 241 "entity": { 242 "name": "some-service-name-3", 243 "type": "managed_service_instance" 244 } 245 }, 246 { 247 "metadata": { 248 "guid": "some-service-guid-4" 249 }, 250 "entity": { 251 "name": "some-service-name-4", 252 "type": "user_provided_service_instance" 253 } 254 } 255 ] 256 }` 257 258 server.AppendHandlers( 259 CombineHandlers( 260 VerifyRequest(http.MethodGet, "/v2/spaces/some-space-guid/service_instances", "return_user_provided_service_instances=true&q=name:foobar"), 261 RespondWith(http.StatusOK, response1, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 262 ), 263 ) 264 265 server.AppendHandlers( 266 CombineHandlers( 267 VerifyRequest(http.MethodGet, "/v2/spaces/some-space-guid/service_instances", "return_user_provided_service_instances=true&q=name:foobar&page=2"), 268 RespondWith(http.StatusOK, response2, http.Header{"X-Cf-Warnings": {"this is another warning"}}), 269 ), 270 ) 271 }) 272 273 Context("when service instances exist", func() { 274 It("returns all the queried service instances", func() { 275 serviceInstances, warnings, err := client.GetSpaceServiceInstances("some-space-guid", true, []Query{{ 276 Filter: NameFilter, 277 Operator: EqualOperator, 278 Value: "foobar", 279 }}) 280 Expect(err).NotTo(HaveOccurred()) 281 282 Expect(serviceInstances).To(ConsistOf([]ServiceInstance{ 283 {Name: "some-service-name-1", GUID: "some-service-guid-1", Type: ManagedService}, 284 {Name: "some-service-name-2", GUID: "some-service-guid-2", Type: UserProvidedService}, 285 {Name: "some-service-name-3", GUID: "some-service-guid-3", Type: ManagedService}, 286 {Name: "some-service-name-4", GUID: "some-service-guid-4", Type: UserProvidedService}, 287 })) 288 Expect(warnings).To(ConsistOf(Warnings{"this is a warning", "this is another warning"})) 289 }) 290 }) 291 }) 292 293 Context("excluding user provided services", func() { 294 BeforeEach(func() { 295 response := `{ 296 "next_url": null, 297 "resources": [ 298 { 299 "metadata": { 300 "guid": "some-service-guid-1" 301 }, 302 "entity": { 303 "name": "some-service-name-1", 304 "type": "managed_service_instance" 305 } 306 }, 307 { 308 "metadata": { 309 "guid": "some-service-guid-2" 310 }, 311 "entity": { 312 "name": "some-service-name-2", 313 "type": "managed_service_instance" 314 } 315 } 316 ] 317 }` 318 319 server.AppendHandlers( 320 CombineHandlers( 321 VerifyRequest(http.MethodGet, "/v2/spaces/some-space-guid/service_instances", "q=name:foobar"), 322 RespondWith(http.StatusOK, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 323 ), 324 ) 325 }) 326 327 Context("when service instances exist", func() { 328 It("returns all the queried service instances", func() { 329 serviceInstances, warnings, err := client.GetSpaceServiceInstances("some-space-guid", false, []Query{{ 330 Filter: NameFilter, 331 Operator: EqualOperator, 332 Value: "foobar", 333 }}) 334 Expect(err).NotTo(HaveOccurred()) 335 336 Expect(serviceInstances).To(ConsistOf([]ServiceInstance{ 337 {Name: "some-service-name-1", GUID: "some-service-guid-1", Type: ManagedService}, 338 {Name: "some-service-name-2", GUID: "some-service-guid-2", Type: ManagedService}, 339 })) 340 Expect(warnings).To(ConsistOf(Warnings{"this is a warning"})) 341 }) 342 }) 343 }) 344 }) 345 })