github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+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("GetServiceInstance", func() { 123 BeforeEach(func() { 124 response := `{ 125 "metadata": { 126 "guid": "some-service-guid" 127 }, 128 "entity": { 129 "name": "some-service-name", 130 "space_guid": "some-space-guid", 131 "type": "managed_service_instance" 132 } 133 }` 134 135 server.AppendHandlers( 136 CombineHandlers( 137 VerifyRequest(http.MethodGet, "/v2/service_instances/some-service-guid"), 138 RespondWith(http.StatusOK, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 139 ), 140 ) 141 }) 142 143 Context("when service instances exist", func() { 144 It("returns the service instance and warnings", func() { 145 serviceInstance, warnings, err := client.GetServiceInstance("some-service-guid") 146 Expect(err).NotTo(HaveOccurred()) 147 148 Expect(serviceInstance).To(Equal(ServiceInstance{ 149 Name: "some-service-name", 150 GUID: "some-service-guid", 151 SpaceGUID: "some-space-guid", 152 Type: ManagedService, 153 })) 154 Expect(warnings).To(ConsistOf(Warnings{"this is a warning"})) 155 }) 156 }) 157 }) 158 159 Describe("GetServiceInstances", func() { 160 BeforeEach(func() { 161 response1 := `{ 162 "next_url": "/v2/service_instances?q=space_guid:some-space-guid&page=2", 163 "resources": [ 164 { 165 "metadata": { 166 "guid": "some-service-guid-1" 167 }, 168 "entity": { 169 "name": "some-service-name-1", 170 "space_guid": "some-space-guid", 171 "type": "managed_service_instance" 172 } 173 }, 174 { 175 "metadata": { 176 "guid": "some-service-guid-2" 177 }, 178 "entity": { 179 "name": "some-service-name-2", 180 "space_guid": "some-space-guid", 181 "type": "managed_service_instance" 182 } 183 } 184 ] 185 }` 186 187 response2 := `{ 188 "next_url": null, 189 "resources": [ 190 { 191 "metadata": { 192 "guid": "some-service-guid-3" 193 }, 194 "entity": { 195 "name": "some-service-name-3", 196 "space_guid": "some-space-guid", 197 "type": "managed_service_instance" 198 } 199 }, 200 { 201 "metadata": { 202 "guid": "some-service-guid-4" 203 }, 204 "entity": { 205 "name": "some-service-name-4", 206 "space_guid": "some-space-guid", 207 "type": "managed_service_instance" 208 } 209 } 210 ] 211 }` 212 213 server.AppendHandlers( 214 CombineHandlers( 215 VerifyRequest(http.MethodGet, "/v2/service_instances", "q=space_guid:some-space-guid"), 216 RespondWith(http.StatusOK, response1, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 217 ), 218 ) 219 220 server.AppendHandlers( 221 CombineHandlers( 222 VerifyRequest(http.MethodGet, "/v2/service_instances", "q=space_guid:some-space-guid&page=2"), 223 RespondWith(http.StatusOK, response2, http.Header{"X-Cf-Warnings": {"this is another warning"}}), 224 ), 225 ) 226 }) 227 228 Context("when service instances exist", func() { 229 It("returns all the queried service instances", func() { 230 serviceInstances, warnings, err := client.GetServiceInstances(Query{ 231 Filter: SpaceGUIDFilter, 232 Operator: EqualOperator, 233 Values: []string{"some-space-guid"}, 234 }) 235 Expect(err).NotTo(HaveOccurred()) 236 237 Expect(serviceInstances).To(ConsistOf([]ServiceInstance{ 238 { 239 Name: "some-service-name-1", 240 GUID: "some-service-guid-1", 241 SpaceGUID: "some-space-guid", 242 Type: ManagedService, 243 }, 244 { 245 Name: "some-service-name-2", 246 GUID: "some-service-guid-2", 247 SpaceGUID: "some-space-guid", 248 Type: ManagedService, 249 }, 250 { 251 Name: "some-service-name-3", 252 GUID: "some-service-guid-3", 253 SpaceGUID: "some-space-guid", 254 Type: ManagedService, 255 }, 256 { 257 Name: "some-service-name-4", 258 GUID: "some-service-guid-4", 259 SpaceGUID: "some-space-guid", 260 Type: ManagedService, 261 }, 262 })) 263 Expect(warnings).To(ConsistOf(Warnings{"this is a warning", "this is another warning"})) 264 }) 265 }) 266 }) 267 268 Describe("GetSpaceServiceInstances", func() { 269 Context("including user provided services", func() { 270 BeforeEach(func() { 271 response1 := `{ 272 "next_url": "/v2/spaces/some-space-guid/service_instances?return_user_provided_service_instances=true&q=name:foobar&page=2", 273 "resources": [ 274 { 275 "metadata": { 276 "guid": "some-service-guid-1" 277 }, 278 "entity": { 279 "name": "some-service-name-1", 280 "space_guid": "some-space-guid", 281 "type": "managed_service_instance" 282 } 283 }, 284 { 285 "metadata": { 286 "guid": "some-service-guid-2" 287 }, 288 "entity": { 289 "name": "some-service-name-2", 290 "space_guid": "some-space-guid", 291 "type": "user_provided_service_instance" 292 } 293 } 294 ] 295 }` 296 297 response2 := `{ 298 "next_url": null, 299 "resources": [ 300 { 301 "metadata": { 302 "guid": "some-service-guid-3" 303 }, 304 "entity": { 305 "name": "some-service-name-3", 306 "space_guid": "some-space-guid", 307 "type": "managed_service_instance" 308 } 309 }, 310 { 311 "metadata": { 312 "guid": "some-service-guid-4" 313 }, 314 "entity": { 315 "name": "some-service-name-4", 316 "space_guid": "some-space-guid", 317 "type": "user_provided_service_instance" 318 } 319 } 320 ] 321 }` 322 323 server.AppendHandlers( 324 CombineHandlers( 325 VerifyRequest(http.MethodGet, "/v2/spaces/some-space-guid/service_instances", "return_user_provided_service_instances=true&q=name:foobar"), 326 RespondWith(http.StatusOK, response1, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 327 ), 328 ) 329 330 server.AppendHandlers( 331 CombineHandlers( 332 VerifyRequest(http.MethodGet, "/v2/spaces/some-space-guid/service_instances", "return_user_provided_service_instances=true&q=name:foobar&page=2"), 333 RespondWith(http.StatusOK, response2, http.Header{"X-Cf-Warnings": {"this is another warning"}}), 334 ), 335 ) 336 }) 337 338 Context("when service instances exist", func() { 339 It("returns all the queried service instances", func() { 340 serviceInstances, warnings, err := client.GetSpaceServiceInstances("some-space-guid", true, Query{ 341 Filter: NameFilter, 342 Operator: EqualOperator, 343 Values: []string{"foobar"}, 344 }) 345 Expect(err).NotTo(HaveOccurred()) 346 347 Expect(serviceInstances).To(ConsistOf([]ServiceInstance{ 348 {Name: "some-service-name-1", GUID: "some-service-guid-1", SpaceGUID: "some-space-guid", Type: ManagedService}, 349 {Name: "some-service-name-2", GUID: "some-service-guid-2", SpaceGUID: "some-space-guid", Type: UserProvidedService}, 350 {Name: "some-service-name-3", GUID: "some-service-guid-3", SpaceGUID: "some-space-guid", Type: ManagedService}, 351 {Name: "some-service-name-4", GUID: "some-service-guid-4", SpaceGUID: "some-space-guid", Type: UserProvidedService}, 352 })) 353 Expect(warnings).To(ConsistOf(Warnings{"this is a warning", "this is another warning"})) 354 }) 355 }) 356 }) 357 358 Context("excluding user provided services", func() { 359 BeforeEach(func() { 360 response := `{ 361 "next_url": null, 362 "resources": [ 363 { 364 "metadata": { 365 "guid": "some-service-guid-1" 366 }, 367 "entity": { 368 "name": "some-service-name-1", 369 "space_guid": "some-space-guid", 370 "type": "managed_service_instance" 371 } 372 }, 373 { 374 "metadata": { 375 "guid": "some-service-guid-2" 376 }, 377 "entity": { 378 "name": "some-service-name-2", 379 "space_guid": "some-space-guid", 380 "type": "managed_service_instance" 381 } 382 } 383 ] 384 }` 385 386 server.AppendHandlers( 387 CombineHandlers( 388 VerifyRequest(http.MethodGet, "/v2/spaces/some-space-guid/service_instances", "q=name:foobar"), 389 RespondWith(http.StatusOK, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 390 ), 391 ) 392 }) 393 394 Context("when service instances exist", func() { 395 It("returns all the queried service instances", func() { 396 serviceInstances, warnings, err := client.GetSpaceServiceInstances("some-space-guid", false, Query{ 397 Filter: NameFilter, 398 Operator: EqualOperator, 399 Values: []string{"foobar"}, 400 }) 401 Expect(err).NotTo(HaveOccurred()) 402 403 Expect(serviceInstances).To(ConsistOf([]ServiceInstance{ 404 {Name: "some-service-name-1", GUID: "some-service-guid-1", SpaceGUID: "some-space-guid", Type: ManagedService}, 405 {Name: "some-service-name-2", GUID: "some-service-guid-2", SpaceGUID: "some-space-guid", Type: ManagedService}, 406 })) 407 Expect(warnings).To(ConsistOf(Warnings{"this is a warning"})) 408 }) 409 }) 410 }) 411 }) 412 })