github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+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/ccv2"
     7  	. "github.com/onsi/ginkgo"
     8  	. "github.com/onsi/gomega"
     9  	. "github.com/onsi/gomega/ghttp"
    10  )
    11  
    12  var _ = Describe("Service Instance", func() {
    13  	var client *Client
    14  
    15  	BeforeEach(func() {
    16  		client = NewTestClient()
    17  	})
    18  
    19  	Describe("ServiceInstance", func() {
    20  		Describe("UserProvided", func() {
    21  			Context("when type is USER_PROVIDED_SERVICE", func() {
    22  				It("returns true", func() {
    23  					service := ServiceInstance{Type: UserProvidedService}
    24  					Expect(service.UserProvided()).To(BeTrue())
    25  				})
    26  			})
    27  
    28  			Context("when type is MANAGED_SERVICE", func() {
    29  				It("returns false", func() {
    30  					service := ServiceInstance{Type: ManagedService}
    31  					Expect(service.UserProvided()).To(BeFalse())
    32  				})
    33  			})
    34  		})
    35  
    36  		Describe("Managed", func() {
    37  			Context("when type is MANAGED_SERVICE", func() {
    38  				It("returns false", func() {
    39  					service := ServiceInstance{Type: ManagedService}
    40  					Expect(service.Managed()).To(BeTrue())
    41  				})
    42  			})
    43  
    44  			Context("when type is USER_PROVIDED_SERVICE", func() {
    45  				It("returns true", func() {
    46  					service := ServiceInstance{Type: UserProvidedService}
    47  					Expect(service.Managed()).To(BeFalse())
    48  				})
    49  			})
    50  		})
    51  	})
    52  
    53  	Describe("GetServiceInstances", func() {
    54  		BeforeEach(func() {
    55  			response1 := `{
    56  				"next_url": "/v2/service_instances?q=space_guid:some-space-guid&page=2",
    57  				"resources": [
    58  					{
    59  						"metadata": {
    60  							"guid": "some-service-guid-1"
    61  						},
    62  						"entity": {
    63  							"name": "some-service-name-1",
    64  							"type": "managed_service_instance"
    65  						}
    66  					},
    67  					{
    68  						"metadata": {
    69  							"guid": "some-service-guid-2"
    70  						},
    71  						"entity": {
    72  							"name": "some-service-name-2",
    73  							"type": "managed_service_instance"
    74  						}
    75  					}
    76  				]
    77  			}`
    78  
    79  			response2 := `{
    80  				"next_url": null,
    81  				"resources": [
    82  					{
    83  						"metadata": {
    84  							"guid": "some-service-guid-3"
    85  						},
    86  						"entity": {
    87  							"name": "some-service-name-3",
    88  							"type": "managed_service_instance"
    89  						}
    90  					},
    91  					{
    92  						"metadata": {
    93  							"guid": "some-service-guid-4"
    94  						},
    95  						"entity": {
    96  							"name": "some-service-name-4",
    97  							"type": "managed_service_instance"
    98  						}
    99  					}
   100  				]
   101  			}`
   102  
   103  			server.AppendHandlers(
   104  				CombineHandlers(
   105  					VerifyRequest(http.MethodGet, "/v2/service_instances", "q=space_guid:some-space-guid"),
   106  					RespondWith(http.StatusOK, response1, http.Header{"X-Cf-Warnings": {"this is a warning"}}),
   107  				),
   108  			)
   109  
   110  			server.AppendHandlers(
   111  				CombineHandlers(
   112  					VerifyRequest(http.MethodGet, "/v2/service_instances", "q=space_guid:some-space-guid&page=2"),
   113  					RespondWith(http.StatusOK, response2, http.Header{"X-Cf-Warnings": {"this is another warning"}}),
   114  				),
   115  			)
   116  		})
   117  
   118  		Context("when service instances exist", func() {
   119  			It("returns all the queried service instances", func() {
   120  				serviceInstances, warnings, err := client.GetServiceInstances([]Query{{
   121  					Filter:   SpaceGUIDFilter,
   122  					Operator: EqualOperator,
   123  					Value:    "some-space-guid",
   124  				}})
   125  				Expect(err).NotTo(HaveOccurred())
   126  
   127  				Expect(serviceInstances).To(ConsistOf([]ServiceInstance{
   128  					{Name: "some-service-name-1", GUID: "some-service-guid-1", Type: ManagedService},
   129  					{Name: "some-service-name-2", GUID: "some-service-guid-2", Type: ManagedService},
   130  					{Name: "some-service-name-3", GUID: "some-service-guid-3", Type: ManagedService},
   131  					{Name: "some-service-name-4", GUID: "some-service-guid-4", Type: ManagedService},
   132  				}))
   133  				Expect(warnings).To(ConsistOf(Warnings{"this is a warning", "this is another warning"}))
   134  			})
   135  		})
   136  	})
   137  
   138  	Describe("GetSpaceServiceInstances", func() {
   139  		Context("including user provided services", func() {
   140  			BeforeEach(func() {
   141  				response1 := `{
   142  					"next_url": "/v2/spaces/some-space-guid/service_instances?return_user_provided_service_instances=true&q=name:foobar&page=2",
   143  					"resources": [
   144  						{
   145  							"metadata": {
   146  								"guid": "some-service-guid-1"
   147  							},
   148  							"entity": {
   149  								"name": "some-service-name-1",
   150  								"type": "managed_service_instance"
   151  							}
   152  						},
   153  						{
   154  							"metadata": {
   155  								"guid": "some-service-guid-2"
   156  							},
   157  							"entity": {
   158  								"name": "some-service-name-2",
   159  								"type": "user_provided_service_instance"
   160  							}
   161  						}
   162  					]
   163  				}`
   164  
   165  				response2 := `{
   166  					"next_url": null,
   167  					"resources": [
   168  						{
   169  							"metadata": {
   170  								"guid": "some-service-guid-3"
   171  							},
   172  							"entity": {
   173  								"name": "some-service-name-3",
   174  								"type": "managed_service_instance"
   175  							}
   176  						},
   177  						{
   178  							"metadata": {
   179  								"guid": "some-service-guid-4"
   180  							},
   181  							"entity": {
   182  								"name": "some-service-name-4",
   183  								"type": "user_provided_service_instance"
   184  							}
   185  						}
   186  					]
   187  				}`
   188  
   189  				server.AppendHandlers(
   190  					CombineHandlers(
   191  						VerifyRequest(http.MethodGet, "/v2/spaces/some-space-guid/service_instances", "return_user_provided_service_instances=true&q=name:foobar"),
   192  						RespondWith(http.StatusOK, response1, http.Header{"X-Cf-Warnings": {"this is a warning"}}),
   193  					),
   194  				)
   195  
   196  				server.AppendHandlers(
   197  					CombineHandlers(
   198  						VerifyRequest(http.MethodGet, "/v2/spaces/some-space-guid/service_instances", "return_user_provided_service_instances=true&q=name:foobar&page=2"),
   199  						RespondWith(http.StatusOK, response2, http.Header{"X-Cf-Warnings": {"this is another warning"}}),
   200  					),
   201  				)
   202  			})
   203  
   204  			Context("when service instances exist", func() {
   205  				It("returns all the queried service instances", func() {
   206  					serviceInstances, warnings, err := client.GetSpaceServiceInstances("some-space-guid", true, []Query{{
   207  						Filter:   NameFilter,
   208  						Operator: EqualOperator,
   209  						Value:    "foobar",
   210  					}})
   211  					Expect(err).NotTo(HaveOccurred())
   212  
   213  					Expect(serviceInstances).To(ConsistOf([]ServiceInstance{
   214  						{Name: "some-service-name-1", GUID: "some-service-guid-1", Type: ManagedService},
   215  						{Name: "some-service-name-2", GUID: "some-service-guid-2", Type: UserProvidedService},
   216  						{Name: "some-service-name-3", GUID: "some-service-guid-3", Type: ManagedService},
   217  						{Name: "some-service-name-4", GUID: "some-service-guid-4", Type: UserProvidedService},
   218  					}))
   219  					Expect(warnings).To(ConsistOf(Warnings{"this is a warning", "this is another warning"}))
   220  				})
   221  			})
   222  		})
   223  
   224  		Context("excluding user provided services", func() {
   225  			BeforeEach(func() {
   226  				response := `{
   227  					"next_url": null,
   228  					"resources": [
   229  						{
   230  							"metadata": {
   231  								"guid": "some-service-guid-1"
   232  							},
   233  							"entity": {
   234  								"name": "some-service-name-1",
   235  								"type": "managed_service_instance"
   236  							}
   237  						},
   238  						{
   239  							"metadata": {
   240  								"guid": "some-service-guid-2"
   241  							},
   242  							"entity": {
   243  								"name": "some-service-name-2",
   244  								"type": "managed_service_instance"
   245  							}
   246  						}
   247  					]
   248  				}`
   249  
   250  				server.AppendHandlers(
   251  					CombineHandlers(
   252  						VerifyRequest(http.MethodGet, "/v2/spaces/some-space-guid/service_instances", "q=name:foobar"),
   253  						RespondWith(http.StatusOK, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}),
   254  					),
   255  				)
   256  			})
   257  
   258  			Context("when service instances exist", func() {
   259  				It("returns all the queried service instances", func() {
   260  					serviceInstances, warnings, err := client.GetSpaceServiceInstances("some-space-guid", false, []Query{{
   261  						Filter:   NameFilter,
   262  						Operator: EqualOperator,
   263  						Value:    "foobar",
   264  					}})
   265  					Expect(err).NotTo(HaveOccurred())
   266  
   267  					Expect(serviceInstances).To(ConsistOf([]ServiceInstance{
   268  						{Name: "some-service-name-1", GUID: "some-service-guid-1", Type: ManagedService},
   269  						{Name: "some-service-name-2", GUID: "some-service-guid-2", Type: ManagedService},
   270  					}))
   271  					Expect(warnings).To(ConsistOf(Warnings{"this is a warning"}))
   272  				})
   273  			})
   274  		})
   275  	})
   276  })