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