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  })