github.com/willmadison/cli@v6.40.1-0.20181018160101-29d5937903ff+incompatible/actor/v2action/service_instance_summary_test.go (about)

     1  package v2action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	. "code.cloudfoundry.org/cli/actor/v2action"
     7  	"code.cloudfoundry.org/cli/actor/v2action/v2actionfakes"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
    11  
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("Service Instance Summary Actions", func() {
    17  	var (
    18  		actor                     *Actor
    19  		fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient
    20  	)
    21  
    22  	BeforeEach(func() {
    23  		fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient)
    24  		actor = NewActor(fakeCloudControllerClient, nil, nil)
    25  	})
    26  
    27  	Describe("ServiceInstanceSummary", func() {
    28  		var summary ServiceInstanceSummary
    29  
    30  		Describe("IsShareable", func() {
    31  			When("the 'service_instance_sharing' feature flag is enabled", func() {
    32  				BeforeEach(func() {
    33  					summary.ServiceInstanceSharingFeatureFlag = true
    34  				})
    35  
    36  				When("the service broker has enabled sharing", func() {
    37  					BeforeEach(func() {
    38  						summary.Service.Extra.Shareable = true
    39  					})
    40  
    41  					It("returns true", func() {
    42  						Expect(summary.IsShareable()).To(BeTrue())
    43  					})
    44  				})
    45  
    46  				When("the service broker has not enabled sharing", func() {
    47  					BeforeEach(func() {
    48  						summary.Service.Extra.Shareable = false
    49  					})
    50  
    51  					It("returns true", func() {
    52  						Expect(summary.IsShareable()).To(BeFalse())
    53  					})
    54  				})
    55  			})
    56  
    57  			When("the 'service_instance_sharing' feature flag is not enabled", func() {
    58  				BeforeEach(func() {
    59  					summary.ServiceInstanceSharingFeatureFlag = false
    60  				})
    61  
    62  				When("the service broker has enabled sharing", func() {
    63  					BeforeEach(func() {
    64  						summary.Service.Extra.Shareable = true
    65  					})
    66  
    67  					It("returns true", func() {
    68  						Expect(summary.IsShareable()).To(BeFalse())
    69  					})
    70  				})
    71  
    72  				When("the service broker has not enabled sharing", func() {
    73  					BeforeEach(func() {
    74  						summary.Service.Extra.Shareable = false
    75  					})
    76  
    77  					It("returns true", func() {
    78  						Expect(summary.IsShareable()).To(BeFalse())
    79  					})
    80  				})
    81  			})
    82  		})
    83  	})
    84  
    85  	Describe("GetServiceInstanceSummaryByNameAndSpace", func() {
    86  		var (
    87  			summary         ServiceInstanceSummary
    88  			summaryWarnings Warnings
    89  			summaryErr      error
    90  		)
    91  
    92  		JustBeforeEach(func() {
    93  			summary, summaryWarnings, summaryErr = actor.GetServiceInstanceSummaryByNameAndSpace("some-service-instance", "some-space-guid")
    94  		})
    95  
    96  		When("an error is encountered getting the service instance", func() {
    97  			var expectedErr error
    98  
    99  			BeforeEach(func() {
   100  				expectedErr = errors.New("get space service instance error")
   101  				fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   102  					[]ccv2.ServiceInstance{},
   103  					ccv2.Warnings{"get-space-service-instance-warning"},
   104  					expectedErr)
   105  			})
   106  
   107  			It("returns the error and all warnings", func() {
   108  				Expect(summaryErr).To(MatchError(expectedErr))
   109  				Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning"))
   110  
   111  				Expect(fakeCloudControllerClient.GetSpaceServiceInstancesCallCount()).To(Equal(1))
   112  				spaceGUIDArg, getUserProvidedServicesArg, queriesArg := fakeCloudControllerClient.GetSpaceServiceInstancesArgsForCall(0)
   113  				Expect(spaceGUIDArg).To(Equal("some-space-guid"))
   114  				Expect(getUserProvidedServicesArg).To(BeTrue())
   115  				Expect(queriesArg).To(HaveLen(1))
   116  				Expect(queriesArg[0]).To(Equal(ccv2.Filter{
   117  					Type:     constant.NameFilter,
   118  					Operator: constant.EqualOperator,
   119  					Values:   []string{"some-service-instance"},
   120  				}))
   121  			})
   122  		})
   123  
   124  		When("no errors are encountered getting the service instance", func() {
   125  			var (
   126  				returnedServiceInstance ccv2.ServiceInstance
   127  				returnedFeatureFlag     ccv2.FeatureFlag
   128  			)
   129  
   130  			When("the service instance is a managed service instance", func() {
   131  				BeforeEach(func() {
   132  					returnedServiceInstance = ccv2.ServiceInstance{
   133  						DashboardURL:    "some-dashboard",
   134  						GUID:            "some-service-instance-guid",
   135  						Name:            "some-service-instance",
   136  						ServiceGUID:     "some-service-guid",
   137  						ServicePlanGUID: "some-service-plan-guid",
   138  						Tags:            []string{"tag-1", "tag-2"},
   139  						Type:            constant.ServiceInstanceTypeManagedService,
   140  					}
   141  					fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   142  						[]ccv2.ServiceInstance{returnedServiceInstance},
   143  						ccv2.Warnings{"get-space-service-instance-warning"},
   144  						nil)
   145  
   146  					returnedFeatureFlag = ccv2.FeatureFlag{
   147  						Name:    "service_instance_sharing",
   148  						Enabled: true,
   149  					}
   150  					fakeCloudControllerClient.GetConfigFeatureFlagsReturns(
   151  						[]ccv2.FeatureFlag{returnedFeatureFlag},
   152  						ccv2.Warnings{"get-feature-flags-warning"},
   153  						nil)
   154  				})
   155  
   156  				It("returns the service instance info and all warnings", func() {
   157  					Expect(summaryErr).ToNot(HaveOccurred())
   158  					Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance)))
   159  					Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning"))
   160  
   161  					Expect(fakeCloudControllerClient.GetSpaceServiceInstancesCallCount()).To(Equal(1))
   162  					spaceGUIDArg, getUserProvidedServicesArg, queriesArg := fakeCloudControllerClient.GetSpaceServiceInstancesArgsForCall(0)
   163  					Expect(spaceGUIDArg).To(Equal("some-space-guid"))
   164  					Expect(getUserProvidedServicesArg).To(BeTrue())
   165  					Expect(queriesArg).To(HaveLen(1))
   166  					Expect(queriesArg[0]).To(Equal(ccv2.Filter{
   167  						Type:     constant.NameFilter,
   168  						Operator: constant.EqualOperator,
   169  						Values:   []string{"some-service-instance"},
   170  					}))
   171  				})
   172  
   173  				When("the service instance is shared from another space (not created in the currently targeted space)", func() {
   174  					When("the source space of the service instance is different from the currently targeted space", func() {
   175  						BeforeEach(func() {
   176  							returnedServiceInstance.SpaceGUID = "not-currently-targeted-space-guid"
   177  							fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   178  								[]ccv2.ServiceInstance{returnedServiceInstance},
   179  								ccv2.Warnings{"get-space-service-instance-warning"},
   180  								nil)
   181  						})
   182  
   183  						When("an error is encountered getting the shared_from information", func() {
   184  							var expectedErr error
   185  
   186  							When("the error is generic", func() {
   187  								BeforeEach(func() {
   188  									expectedErr = errors.New("get-service-instance-shared-from-error")
   189  									fakeCloudControllerClient.GetServiceInstanceSharedFromReturns(
   190  										ccv2.ServiceInstanceSharedFrom{},
   191  										ccv2.Warnings{"get-service-instance-shared-from-warning"},
   192  										expectedErr,
   193  									)
   194  								})
   195  
   196  								It("returns the error and all warnings", func() {
   197  									Expect(summaryErr).To(MatchError(expectedErr))
   198  									Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-from-warning", "get-feature-flags-warning", "get-space-service-instance-warning"))
   199  
   200  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1))
   201  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   202  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(0))
   203  								})
   204  							})
   205  
   206  							When("the API version does not support service instance sharing", func() {
   207  								BeforeEach(func() {
   208  									expectedErr = ccerror.ResourceNotFoundError{}
   209  									fakeCloudControllerClient.GetServiceInstanceSharedFromReturns(
   210  										ccv2.ServiceInstanceSharedFrom{},
   211  										ccv2.Warnings{"get-service-instance-shared-from-warning"},
   212  										expectedErr,
   213  									)
   214  								})
   215  
   216  								It("ignores the 404 error and continues without shared_from information", func() {
   217  									Expect(summaryErr).ToNot(HaveOccurred())
   218  									Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-from-warning", "get-feature-flags-warning", "get-space-service-instance-warning"))
   219  									Expect(summary.ServiceInstanceSharedFrom).To(Equal(ServiceInstanceSharedFrom{}))
   220  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1))
   221  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   222  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(0))
   223  								})
   224  							})
   225  						})
   226  
   227  						When("no errors are encountered getting the shared_from information", func() {
   228  							When("the shared_from info is NOT empty", func() {
   229  								var returnedServiceSharedFrom ccv2.ServiceInstanceSharedFrom
   230  
   231  								BeforeEach(func() {
   232  									returnedServiceSharedFrom = ccv2.ServiceInstanceSharedFrom{
   233  										SpaceGUID:        "some-space-guid",
   234  										SpaceName:        "some-space-name",
   235  										OrganizationName: "some-org-name",
   236  									}
   237  									fakeCloudControllerClient.GetServiceInstanceSharedFromReturns(
   238  										returnedServiceSharedFrom,
   239  										ccv2.Warnings{"get-service-instance-shared-from-warning"},
   240  										nil)
   241  								})
   242  
   243  								It("returns the service instance share type, shared_from info, and all warnings", func() {
   244  									Expect(summaryErr).ToNot(HaveOccurred())
   245  									Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance)))
   246  									Expect(summary.ServiceInstanceSharingFeatureFlag).To(BeTrue())
   247  									Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsSharedFrom))
   248  									Expect(summary.ServiceInstanceSharedFrom).To(Equal(ServiceInstanceSharedFrom(returnedServiceSharedFrom)))
   249  									Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-from-warning", "get-feature-flags-warning", "get-space-service-instance-warning"))
   250  
   251  									Expect(fakeCloudControllerClient.GetConfigFeatureFlagsCallCount()).To(Equal(1))
   252  
   253  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1))
   254  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   255  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(0))
   256  								})
   257  							})
   258  
   259  							When("the shared_from info is empty", func() {
   260  								It("sets the share type to not shared", func() {
   261  									Expect(summaryErr).ToNot(HaveOccurred())
   262  									Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsNotShared))
   263  								})
   264  							})
   265  						})
   266  					})
   267  
   268  					When("the source space of the service instance is 'null'", func() {
   269  						BeforeEach(func() {
   270  							// API returns a json null value that is unmarshalled into the empty string
   271  							returnedServiceInstance.SpaceGUID = ""
   272  							fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   273  								[]ccv2.ServiceInstance{returnedServiceInstance},
   274  								ccv2.Warnings{"get-space-service-instance-warning"},
   275  								nil)
   276  						})
   277  
   278  						When("an error is encountered getting the shared_from information", func() {
   279  							var expectedErr error
   280  
   281  							When("the error is generic", func() {
   282  								BeforeEach(func() {
   283  									expectedErr = errors.New("get-service-instance-shared-from-error")
   284  									fakeCloudControllerClient.GetServiceInstanceSharedFromReturns(
   285  										ccv2.ServiceInstanceSharedFrom{},
   286  										ccv2.Warnings{"get-service-instance-shared-from-warning"},
   287  										expectedErr,
   288  									)
   289  								})
   290  
   291  								It("returns the error and all warnings", func() {
   292  									Expect(summaryErr).To(MatchError(expectedErr))
   293  									Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-from-warning", "get-feature-flags-warning", "get-space-service-instance-warning"))
   294  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1))
   295  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   296  								})
   297  							})
   298  
   299  							When("the API version does not support service instance sharing", func() {
   300  								BeforeEach(func() {
   301  									expectedErr = ccerror.ResourceNotFoundError{}
   302  									fakeCloudControllerClient.GetServiceInstanceSharedFromReturns(
   303  										ccv2.ServiceInstanceSharedFrom{},
   304  										ccv2.Warnings{"get-service-instance-shared-from-warning"},
   305  										expectedErr,
   306  									)
   307  								})
   308  
   309  								It("ignores the 404 error and continues without shared_from information", func() {
   310  									Expect(summaryErr).ToNot(HaveOccurred())
   311  									Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-from-warning", "get-feature-flags-warning", "get-space-service-instance-warning"))
   312  									Expect(summary.ServiceInstanceSharedFrom).To(Equal(ServiceInstanceSharedFrom{}))
   313  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1))
   314  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   315  								})
   316  							})
   317  						})
   318  
   319  						When("no errors are encountered getting the shared_from information", func() {
   320  							When("the shared_from info is NOT empty", func() {
   321  								var returnedServiceSharedFrom ccv2.ServiceInstanceSharedFrom
   322  
   323  								BeforeEach(func() {
   324  									returnedServiceSharedFrom = ccv2.ServiceInstanceSharedFrom{
   325  										SpaceGUID:        "some-space-guid",
   326  										SpaceName:        "some-space-name",
   327  										OrganizationName: "some-org-name",
   328  									}
   329  									fakeCloudControllerClient.GetServiceInstanceSharedFromReturns(
   330  										returnedServiceSharedFrom,
   331  										ccv2.Warnings{"get-service-instance-shared-from-warning"},
   332  										nil)
   333  								})
   334  
   335  								It("returns the service instance share type, shared_from info, and all warnings", func() {
   336  									Expect(summaryErr).ToNot(HaveOccurred())
   337  									Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance)))
   338  									Expect(summary.ServiceInstanceSharingFeatureFlag).To(BeTrue())
   339  									Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsSharedFrom))
   340  									Expect(summary.ServiceInstanceSharedFrom).To(Equal(ServiceInstanceSharedFrom(returnedServiceSharedFrom)))
   341  									Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-instance-shared-from-warning"))
   342  
   343  									Expect(fakeCloudControllerClient.GetConfigFeatureFlagsCallCount()).To(Equal(1))
   344  
   345  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(1))
   346  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   347  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(0))
   348  								})
   349  							})
   350  
   351  							When("the shared_from info is empty", func() {
   352  								It("sets the share type to not shared", func() {
   353  									Expect(summaryErr).ToNot(HaveOccurred())
   354  									Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsNotShared))
   355  								})
   356  							})
   357  						})
   358  					})
   359  				})
   360  
   361  				When("the service instance is shared to other spaces", func() {
   362  					When("the source space of the service instance is the same as the currently targeted space", func() {
   363  						BeforeEach(func() {
   364  							returnedServiceInstance.SpaceGUID = "some-space-guid"
   365  							fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   366  								[]ccv2.ServiceInstance{returnedServiceInstance},
   367  								ccv2.Warnings{"get-space-service-instance-warning"},
   368  								nil)
   369  						})
   370  
   371  						When("an error is encountered getting the shared_to information", func() {
   372  							var expectedErr error
   373  
   374  							When("the error is generic", func() {
   375  								BeforeEach(func() {
   376  									expectedErr = errors.New("get-service-instance-shared-tos-error")
   377  									fakeCloudControllerClient.GetServiceInstanceSharedTosReturns(
   378  										[]ccv2.ServiceInstanceSharedTo{},
   379  										ccv2.Warnings{"get-service-instance-shared-tos-warning"},
   380  										expectedErr,
   381  									)
   382  								})
   383  
   384  								It("returns the error and all warnings", func() {
   385  									Expect(summaryErr).To(MatchError(expectedErr))
   386  									Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-tos-warning", "get-feature-flags-warning", "get-space-service-instance-warning"))
   387  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(1))
   388  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   389  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(0))
   390  								})
   391  							})
   392  
   393  							When("the API version does not support service instance sharing", func() {
   394  								BeforeEach(func() {
   395  									expectedErr = ccerror.ResourceNotFoundError{}
   396  									fakeCloudControllerClient.GetServiceInstanceSharedTosReturns(
   397  										[]ccv2.ServiceInstanceSharedTo{},
   398  										ccv2.Warnings{"get-service-instance-shared-tos-warning"},
   399  										expectedErr,
   400  									)
   401  								})
   402  
   403  								It("ignores the 404 error and continues without shared_to information", func() {
   404  									Expect(summaryErr).ToNot(HaveOccurred())
   405  									Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-tos-warning", "get-feature-flags-warning", "get-space-service-instance-warning"))
   406  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(1))
   407  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   408  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(0))
   409  								})
   410  							})
   411  						})
   412  
   413  						When("no errors are encountered getting the shared_to information", func() {
   414  							When("the shared_to info is NOT an empty list", func() {
   415  								var returnedServiceSharedTos []ccv2.ServiceInstanceSharedTo
   416  
   417  								BeforeEach(func() {
   418  									returnedServiceSharedTos = []ccv2.ServiceInstanceSharedTo{
   419  										{
   420  											SpaceGUID:        "some-space-guid",
   421  											SpaceName:        "some-space-name",
   422  											OrganizationName: "some-org-name",
   423  										},
   424  										{
   425  											SpaceGUID:        "some-space-guid2",
   426  											SpaceName:        "some-space-name2",
   427  											OrganizationName: "some-org-name2",
   428  										},
   429  									}
   430  
   431  									fakeCloudControllerClient.GetServiceInstanceSharedTosReturns(
   432  										returnedServiceSharedTos,
   433  										ccv2.Warnings{"get-service-instance-shared-tos-warning"},
   434  										nil)
   435  								})
   436  
   437  								It("returns the service instance share type, shared_to info, and all warnings", func() {
   438  									Expect(summaryErr).ToNot(HaveOccurred())
   439  									Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance)))
   440  									Expect(summary.ServiceInstanceSharingFeatureFlag).To(BeTrue())
   441  									Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsSharedTo))
   442  									Expect(summary.ServiceInstanceSharedTos).To(ConsistOf(ServiceInstanceSharedTo(returnedServiceSharedTos[0]), ServiceInstanceSharedTo(returnedServiceSharedTos[1])))
   443  									Expect(summaryWarnings).To(ConsistOf("get-service-instance-shared-tos-warning", "get-feature-flags-warning", "get-space-service-instance-warning"))
   444  
   445  									Expect(fakeCloudControllerClient.GetConfigFeatureFlagsCallCount()).To(Equal(1))
   446  
   447  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosCallCount()).To(Equal(1))
   448  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedTosArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   449  									Expect(fakeCloudControllerClient.GetServiceInstanceSharedFromCallCount()).To(Equal(0))
   450  								})
   451  							})
   452  
   453  							When("the shared_to info is an empty list", func() {
   454  								It("sets the share type to not shared", func() {
   455  									Expect(summaryErr).ToNot(HaveOccurred())
   456  									Expect(summary.ServiceInstanceShareType).To(Equal(ServiceInstanceIsNotShared))
   457  								})
   458  							})
   459  						})
   460  					})
   461  				})
   462  
   463  				When("an error is encountered getting the service plan", func() {
   464  					Describe("a generic error", func() {
   465  						var expectedErr error
   466  
   467  						BeforeEach(func() {
   468  							expectedErr = errors.New("get-service-plan-error")
   469  							fakeCloudControllerClient.GetServicePlanReturns(
   470  								ccv2.ServicePlan{},
   471  								ccv2.Warnings{"get-service-plan-warning"},
   472  								expectedErr)
   473  						})
   474  
   475  						It("returns the error and all warnings", func() {
   476  							Expect(summaryErr).To(MatchError(expectedErr))
   477  							Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning"))
   478  						})
   479  					})
   480  
   481  					Describe("a Forbidden error", func() {
   482  						var expectedErr error
   483  
   484  						BeforeEach(func() {
   485  							expectedErr = errors.New("get-service-plan-error")
   486  							fakeCloudControllerClient.GetServicePlanReturns(
   487  								ccv2.ServicePlan{},
   488  								ccv2.Warnings{"get-service-plan-warning"},
   489  								ccerror.ForbiddenError{})
   490  						})
   491  
   492  						It("returns warnings and continues on", func() {
   493  							Expect(summaryErr).ToNot(HaveOccurred())
   494  							Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "This org is not authorized to view necessary data about this service plan. Contact your administrator regarding service GUID some-service-plan-guid."))
   495  
   496  							Expect(fakeCloudControllerClient.GetServiceCallCount()).To(Equal(1))
   497  							Expect(fakeCloudControllerClient.GetServiceArgsForCall(0)).To(Equal("some-service-guid"))
   498  						})
   499  					})
   500  				})
   501  
   502  				When("no errors are encountered getting the service plan", func() {
   503  					var returnedServicePlan ccv2.ServicePlan
   504  
   505  					BeforeEach(func() {
   506  						returnedServicePlan = ccv2.ServicePlan{
   507  							GUID:        "some-service-plan-guid",
   508  							Name:        "some-service-plan",
   509  							ServiceGUID: "some-service-guid",
   510  						}
   511  						fakeCloudControllerClient.GetServicePlanReturns(
   512  							returnedServicePlan,
   513  							ccv2.Warnings{"get-service-plan-warning"},
   514  							nil)
   515  					})
   516  
   517  					It("returns the service plan info and all warnings", func() {
   518  						Expect(summaryErr).ToNot(HaveOccurred())
   519  						Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance)))
   520  						Expect(summary.ServicePlan).To(Equal(ServicePlan(returnedServicePlan)))
   521  						Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning"))
   522  
   523  						Expect(fakeCloudControllerClient.GetServicePlanCallCount()).To(Equal(1))
   524  						Expect(fakeCloudControllerClient.GetServicePlanArgsForCall(0)).To(Equal(returnedServiceInstance.ServicePlanGUID))
   525  					})
   526  
   527  					When("an error is encountered getting the service", func() {
   528  						Describe("a generic error", func() {
   529  							var expectedErr error
   530  
   531  							BeforeEach(func() {
   532  								expectedErr = errors.New("get service error")
   533  								fakeCloudControllerClient.GetServiceReturns(
   534  									ccv2.Service{},
   535  									ccv2.Warnings{"get-service-warning"},
   536  									expectedErr)
   537  							})
   538  
   539  							It("returns the error and all warnings", func() {
   540  								Expect(summaryErr).To(MatchError(expectedErr))
   541  								Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "get-service-warning"))
   542  
   543  								Expect(fakeCloudControllerClient.GetServiceCallCount()).To(Equal(1))
   544  								Expect(fakeCloudControllerClient.GetServiceArgsForCall(0)).To(Equal(returnedServicePlan.ServiceGUID))
   545  							})
   546  						})
   547  
   548  						Describe("a Forbidden error", func() {
   549  							BeforeEach(func() {
   550  								fakeCloudControllerClient.GetServiceReturns(
   551  									ccv2.Service{},
   552  									ccv2.Warnings{"get-service-warning"},
   553  									ccerror.ForbiddenError{})
   554  							})
   555  
   556  							It("returns warnings and continues on", func() {
   557  								Expect(summaryErr).ToNot(HaveOccurred())
   558  								Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "get-service-warning", "This org is not authorized to view necessary data about this service. Contact your administrator regarding service GUID some-service-guid."))
   559  
   560  								Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsCallCount()).To(BeNumerically(">=", 1))
   561  							})
   562  						})
   563  					})
   564  
   565  					When("no errors are encountered getting the service", func() {
   566  						var returnedService ccv2.Service
   567  
   568  						BeforeEach(func() {
   569  							returnedService = ccv2.Service{
   570  								GUID:             "some-service-guid",
   571  								Label:            "some-service",
   572  								Description:      "some-description",
   573  								DocumentationURL: "some-url",
   574  								Extra: ccv2.ServiceExtra{
   575  									Shareable: true,
   576  								},
   577  							}
   578  
   579  							fakeCloudControllerClient.GetServiceReturns(
   580  								returnedService,
   581  								ccv2.Warnings{"get-service-warning"},
   582  								nil)
   583  						})
   584  
   585  						It("returns the service info and all warnings", func() {
   586  							Expect(summaryErr).ToNot(HaveOccurred())
   587  							Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance)))
   588  							Expect(summary.ServicePlan).To(Equal(ServicePlan(returnedServicePlan)))
   589  							Expect(summary.Service).To(Equal(Service(returnedService)))
   590  							Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "get-service-warning"))
   591  
   592  							Expect(fakeCloudControllerClient.GetServiceCallCount()).To(Equal(1))
   593  							Expect(fakeCloudControllerClient.GetServiceArgsForCall(0)).To(Equal(returnedServicePlan.ServiceGUID))
   594  						})
   595  
   596  						When("an error is encountered getting the service bindings", func() {
   597  							var expectedErr error
   598  
   599  							BeforeEach(func() {
   600  								expectedErr = errors.New("get service bindings error")
   601  								fakeCloudControllerClient.GetServiceInstanceServiceBindingsReturns(
   602  									[]ccv2.ServiceBinding{},
   603  									ccv2.Warnings{"get-service-bindings-warning"},
   604  									expectedErr)
   605  							})
   606  
   607  							It("returns the error and all warnings", func() {
   608  								Expect(summaryErr).To(MatchError(expectedErr))
   609  								Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "get-service-warning", "get-service-bindings-warning"))
   610  
   611  								Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsCallCount()).To(Equal(1))
   612  								Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   613  							})
   614  						})
   615  
   616  						When("no errors are encountered getting the service bindings", func() {
   617  							var returnedServiceBindings []ccv2.ServiceBinding
   618  
   619  							BeforeEach(func() {
   620  								returnedServiceBindings = []ccv2.ServiceBinding{
   621  									{
   622  										GUID:          "some-service-binding-1-guid",
   623  										Name:          "some-service-binding-1",
   624  										AppGUID:       "some-app-1-guid",
   625  										LastOperation: ccv2.LastOperation{Type: "create", State: constant.LastOperationInProgress, Description: "10% complete"},
   626  									},
   627  									{
   628  										GUID:          "some-service-binding-2-guid",
   629  										Name:          "some-service-binding-2",
   630  										AppGUID:       "some-app-2-guid",
   631  										LastOperation: ccv2.LastOperation{Type: "delete", State: constant.LastOperationSucceeded, Description: "100% complete"},
   632  									},
   633  								}
   634  								fakeCloudControllerClient.GetServiceInstanceServiceBindingsReturns(
   635  									returnedServiceBindings,
   636  									ccv2.Warnings{"get-service-bindings-warning"},
   637  									nil)
   638  							})
   639  
   640  							When("an error is encountered getting bound application info", func() {
   641  								var expectedErr error
   642  
   643  								BeforeEach(func() {
   644  									expectedErr = errors.New("get application error")
   645  									fakeCloudControllerClient.GetApplicationReturns(
   646  										ccv2.Application{},
   647  										ccv2.Warnings{"get-application-warning"},
   648  										expectedErr)
   649  								})
   650  
   651  								It("returns the error", func() {
   652  									Expect(summaryErr).To(MatchError(expectedErr))
   653  									Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "get-service-warning", "get-service-bindings-warning", "get-application-warning"))
   654  
   655  									Expect(fakeCloudControllerClient.GetApplicationCallCount()).To(Equal(1))
   656  									Expect(fakeCloudControllerClient.GetApplicationArgsForCall(0)).To(Equal(returnedServiceBindings[0].AppGUID))
   657  								})
   658  							})
   659  
   660  							When("no errors are encountered getting bound application info", func() {
   661  								BeforeEach(func() {
   662  									fakeCloudControllerClient.GetApplicationReturnsOnCall(
   663  										0,
   664  										ccv2.Application{
   665  											GUID: "some-app-1-guid",
   666  											Name: "some-app-1",
   667  										},
   668  										ccv2.Warnings{"get-application-warning-1"},
   669  										nil)
   670  									fakeCloudControllerClient.GetApplicationReturnsOnCall(
   671  										1,
   672  										ccv2.Application{
   673  											GUID: "some-app-2-guid",
   674  											Name: "some-app-2",
   675  										},
   676  										ccv2.Warnings{"get-application-warning-2"},
   677  										nil)
   678  								})
   679  
   680  								It("returns a list of applications bound to the service instance and all warnings", func() {
   681  									Expect(summaryErr).ToNot(HaveOccurred())
   682  									Expect(summary.ServiceInstance).To(Equal(ServiceInstance(returnedServiceInstance)))
   683  									Expect(summary.ServicePlan).To(Equal(ServicePlan(returnedServicePlan)))
   684  									Expect(summary.Service).To(Equal(Service(returnedService)))
   685  									Expect(summary.BoundApplications).To(Equal([]BoundApplication{
   686  										{
   687  											AppName:            "some-app-1",
   688  											ServiceBindingName: "some-service-binding-1",
   689  											LastOperation: LastOperation{
   690  												Type:        "create",
   691  												State:       constant.LastOperationInProgress,
   692  												Description: "10% complete",
   693  											},
   694  										},
   695  										{
   696  											AppName:            "some-app-2",
   697  											ServiceBindingName: "some-service-binding-2",
   698  											LastOperation: LastOperation{
   699  												Type:        "delete",
   700  												State:       constant.LastOperationSucceeded,
   701  												Description: "100% complete",
   702  											},
   703  										},
   704  									}))
   705  									Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-feature-flags-warning", "get-service-plan-warning", "get-service-warning", "get-service-bindings-warning", "get-application-warning-1", "get-application-warning-2"))
   706  
   707  									Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsCallCount()).To(Equal(1))
   708  									Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   709  
   710  									Expect(fakeCloudControllerClient.GetApplicationCallCount()).To(Equal(2))
   711  									Expect(fakeCloudControllerClient.GetApplicationArgsForCall(0)).To(Equal(returnedServiceBindings[0].AppGUID))
   712  									Expect(fakeCloudControllerClient.GetApplicationArgsForCall(1)).To(Equal(returnedServiceBindings[1].AppGUID))
   713  
   714  									Expect(fakeCloudControllerClient.GetUserProvidedServiceInstanceServiceBindingsCallCount()).To(Equal(0))
   715  								})
   716  							})
   717  						})
   718  					})
   719  				})
   720  			})
   721  
   722  			When("the service instance is a user provided service instance", func() {
   723  				BeforeEach(func() {
   724  					returnedServiceInstance = ccv2.ServiceInstance{
   725  						GUID: "some-user-provided-service-instance-guid",
   726  						Name: "some-user-provided-service-instance",
   727  						Type: constant.ServiceInstanceTypeUserProvidedService,
   728  					}
   729  					fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   730  						[]ccv2.ServiceInstance{returnedServiceInstance},
   731  						ccv2.Warnings{"get-space-service-instance-warning"},
   732  						nil)
   733  				})
   734  
   735  				Context("getting the service bindings errors", func() {
   736  					BeforeEach(func() {
   737  						fakeCloudControllerClient.GetUserProvidedServiceInstanceServiceBindingsReturns(
   738  							nil,
   739  							ccv2.Warnings{"some-get-user-provided-si-bindings-warnings"},
   740  							errors.New("some-get-user-provided-si-bindings-error"))
   741  					})
   742  
   743  					It("should return the error and return all warnings", func() {
   744  						Expect(summaryErr).To(MatchError("some-get-user-provided-si-bindings-error"))
   745  						Expect(summaryWarnings).To(ConsistOf("some-get-user-provided-si-bindings-warnings",
   746  							"get-space-service-instance-warning"))
   747  					})
   748  				})
   749  
   750  				When("no errors are encountered getting the service bindings", func() {
   751  					var returnedServiceBindings []ccv2.ServiceBinding
   752  
   753  					BeforeEach(func() {
   754  						returnedServiceBindings = []ccv2.ServiceBinding{
   755  							{
   756  								GUID:    "some-service-binding-1-guid",
   757  								Name:    "some-service-binding-1",
   758  								AppGUID: "some-app-1-guid",
   759  							},
   760  							{
   761  								GUID:    "some-service-binding-2-guid",
   762  								Name:    "some-service-binding-2",
   763  								AppGUID: "some-app-2-guid",
   764  							},
   765  						}
   766  						fakeCloudControllerClient.GetUserProvidedServiceInstanceServiceBindingsReturns(
   767  							returnedServiceBindings,
   768  							ccv2.Warnings{"get-service-bindings-warning"},
   769  							nil)
   770  					})
   771  
   772  					When("no errors are encountered getting bound application info", func() {
   773  						BeforeEach(func() {
   774  							fakeCloudControllerClient.GetApplicationReturnsOnCall(
   775  								0,
   776  								ccv2.Application{
   777  									GUID: "some-app-1-guid",
   778  									Name: "some-app-1",
   779  								},
   780  								ccv2.Warnings{"get-application-warning-1"},
   781  								nil)
   782  							fakeCloudControllerClient.GetApplicationReturnsOnCall(
   783  								1,
   784  								ccv2.Application{
   785  									GUID: "some-app-2-guid",
   786  									Name: "some-app-2",
   787  								},
   788  								ccv2.Warnings{"get-application-warning-2"},
   789  								nil)
   790  						})
   791  
   792  						It("returns a list of applications bound to the service instance and all warnings", func() {
   793  							Expect(summaryErr).ToNot(HaveOccurred())
   794  							Expect(summary).To(Equal(ServiceInstanceSummary{
   795  								ServiceInstance: ServiceInstance(returnedServiceInstance),
   796  								BoundApplications: []BoundApplication{
   797  									{
   798  										AppName:            "some-app-1",
   799  										ServiceBindingName: "some-service-binding-1",
   800  									},
   801  									{
   802  										AppName:            "some-app-2",
   803  										ServiceBindingName: "some-service-binding-2",
   804  									},
   805  								},
   806  							}))
   807  							Expect(summaryWarnings).To(ConsistOf("get-space-service-instance-warning", "get-service-bindings-warning", "get-application-warning-1", "get-application-warning-2"))
   808  
   809  							Expect(fakeCloudControllerClient.GetSpaceServiceInstancesCallCount()).To(Equal(1))
   810  							spaceGUIDArg, getUserProvidedServicesArg, queriesArg := fakeCloudControllerClient.GetSpaceServiceInstancesArgsForCall(0)
   811  							Expect(spaceGUIDArg).To(Equal("some-space-guid"))
   812  							Expect(getUserProvidedServicesArg).To(BeTrue())
   813  							Expect(queriesArg).To(HaveLen(1))
   814  							Expect(queriesArg[0]).To(Equal(ccv2.Filter{
   815  								Type:     constant.NameFilter,
   816  								Operator: constant.EqualOperator,
   817  								Values:   []string{"some-service-instance"},
   818  							}))
   819  
   820  							Expect(fakeCloudControllerClient.GetUserProvidedServiceInstanceServiceBindingsCallCount()).To(Equal(1))
   821  							Expect(fakeCloudControllerClient.GetUserProvidedServiceInstanceServiceBindingsArgsForCall(0)).To(Equal(returnedServiceInstance.GUID))
   822  
   823  							Expect(fakeCloudControllerClient.GetApplicationCallCount()).To(Equal(2))
   824  							Expect(fakeCloudControllerClient.GetApplicationArgsForCall(0)).To(Equal(returnedServiceBindings[0].AppGUID))
   825  							Expect(fakeCloudControllerClient.GetApplicationArgsForCall(1)).To(Equal(returnedServiceBindings[1].AppGUID))
   826  
   827  							Expect(fakeCloudControllerClient.GetServicePlanCallCount()).To(Equal(0))
   828  							Expect(fakeCloudControllerClient.GetServiceCallCount()).To(Equal(0))
   829  							Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsCallCount()).To(Equal(0))
   830  						})
   831  					})
   832  				})
   833  			})
   834  		})
   835  	})
   836  
   837  	Describe("GetServiceInstancesSummaryBySpace", func() {
   838  		var (
   839  			serviceInstancesSummary []ServiceInstanceSummary
   840  			warnings                Warnings
   841  			executeErr              error
   842  		)
   843  
   844  		JustBeforeEach(func() {
   845  			serviceInstancesSummary, warnings, executeErr = actor.GetServiceInstancesSummaryBySpace("some-space-GUID")
   846  		})
   847  
   848  		When("an error is encountered getting a space's service instances", func() {
   849  			var expectedErr error
   850  			BeforeEach(func() {
   851  				expectedErr = errors.New("get by space service instance summary error")
   852  				fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   853  					[]ccv2.ServiceInstance{},
   854  					ccv2.Warnings{"get-by-space-service-instances-warning"},
   855  					expectedErr,
   856  				)
   857  			})
   858  
   859  			It("returns the error and all warnings", func() {
   860  				Expect(executeErr).To(MatchError(expectedErr))
   861  				Expect(warnings).To(ConsistOf("get-by-space-service-instances-warning"))
   862  			})
   863  		})
   864  
   865  		When("no errors are encountered getting a space's service instances", func() {
   866  			var (
   867  				serviceInstance1 ccv2.ServiceInstance
   868  				serviceInstance2 ccv2.ServiceInstance
   869  				application1     ccv2.Application
   870  				application2     ccv2.Application
   871  				bindings1        []ccv2.ServiceBinding
   872  				bindings2        []ccv2.ServiceBinding
   873  			)
   874  
   875  			BeforeEach(func() {
   876  				serviceInstance1 = ccv2.ServiceInstance{
   877  					GUID:            "some-si-GUID-1",
   878  					Name:            "some-si-name-1",
   879  					ServiceGUID:     "some-service-GUID-1",
   880  					ServicePlanGUID: "some-si-sp-GUID-1",
   881  					Type:            constant.ServiceInstanceTypeManagedService,
   882  					LastOperation: ccv2.LastOperation{
   883  						Type:  "some-lo-type",
   884  						State: "some-lo-state",
   885  					},
   886  				}
   887  				serviceInstance2 = ccv2.ServiceInstance{
   888  					GUID:            "some-si-GUID-3",
   889  					Name:            "some-si-name-3",
   890  					ServiceGUID:     "some-service-GUID-3",
   891  					ServicePlanGUID: "some-si-sp-GUID-3",
   892  					Type:            constant.ServiceInstanceTypeUserProvidedService,
   893  					LastOperation: ccv2.LastOperation{
   894  						Type:  "some-lo-type",
   895  						State: "some-lo-state",
   896  					},
   897  				}
   898  
   899  				fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   900  					[]ccv2.ServiceInstance{serviceInstance2, serviceInstance1},
   901  					ccv2.Warnings{"get-by-space-service-instances-warning"},
   902  					nil)
   903  
   904  				bindings1 = []ccv2.ServiceBinding{
   905  					{
   906  						GUID:                "some-sb-GUID-1",
   907  						Name:                "some-service-binding-2",
   908  						AppGUID:             "2-app-GUID", // we are testing that the app name will be sorted alphanumerically
   909  						ServiceInstanceGUID: "some-si-GUID-1",
   910  					},
   911  					{
   912  						GUID:                "some-sb-GUID-2",
   913  						Name:                "some-service-binding-1",
   914  						AppGUID:             "1-app-GUID", // we are testing that the app name will be sorted alphanumerically
   915  						ServiceInstanceGUID: "some-si-GUID-3",
   916  					},
   917  				}
   918  				bindings2 = []ccv2.ServiceBinding{
   919  					{
   920  						GUID:                "some-sb-GUID-1",
   921  						Name:                "some-service-binding-1",
   922  						AppGUID:             "1-app-GUID",
   923  						ServiceInstanceGUID: "some-si-GUID-1",
   924  					},
   925  				}
   926  				fakeCloudControllerClient.GetServiceInstanceServiceBindingsReturns(
   927  					bindings1,
   928  					ccv2.Warnings{"some-bindings-warning"},
   929  					nil)
   930  				fakeCloudControllerClient.GetUserProvidedServiceInstanceServiceBindingsReturns(
   931  					bindings2,
   932  					ccv2.Warnings{"some-bindings-warning"},
   933  					nil)
   934  
   935  				application1 = ccv2.Application{Name: "1-app-name", GUID: "1-app-GUID"}
   936  				application2 = ccv2.Application{Name: "2-app-name", GUID: "2-app-GUID"}
   937  
   938  				fakeCloudControllerClient.GetApplicationStub = func(appGUID string) (ccv2.Application, ccv2.Warnings, error) {
   939  					switch appGUID {
   940  					case application1.GUID:
   941  						return application1, ccv2.Warnings{"some-get-app-warning"}, nil
   942  					case application2.GUID:
   943  						return application2, ccv2.Warnings{"some-get-app-warning"}, nil
   944  					default:
   945  						Fail("got an app guid that does not exist")
   946  					}
   947  
   948  					return ccv2.Application{}, nil, nil
   949  				}
   950  			})
   951  
   952  			It("returns the service instances summary with bound apps in alphanumeric sorted order and all warnings", func() {
   953  				Expect(executeErr).ToNot(HaveOccurred())
   954  				Expect(serviceInstancesSummary).To(Equal(
   955  					[]ServiceInstanceSummary{
   956  						{
   957  							ServiceInstance: ServiceInstance(serviceInstance1),
   958  							BoundApplications: []BoundApplication{
   959  								{
   960  									AppName:            "1-app-name",
   961  									ServiceBindingName: "some-service-binding-1",
   962  								},
   963  								{
   964  									AppName:            "2-app-name",
   965  									ServiceBindingName: "some-service-binding-2",
   966  								},
   967  							},
   968  						},
   969  						{
   970  							ServiceInstance: ServiceInstance(serviceInstance2),
   971  							BoundApplications: []BoundApplication{
   972  								{
   973  									AppName:            "1-app-name",
   974  									ServiceBindingName: "some-service-binding-1",
   975  								},
   976  							},
   977  						}}))
   978  				Expect(warnings).To(ConsistOf("get-by-space-service-instances-warning",
   979  					"some-get-app-warning", "some-get-app-warning", "some-get-app-warning",
   980  					"some-bindings-warning", "some-bindings-warning"))
   981  
   982  				Expect(fakeCloudControllerClient.GetSpaceServiceInstancesCallCount()).To(Equal(1))
   983  				passedSpaceGUID, includeUPS, filters := fakeCloudControllerClient.GetSpaceServiceInstancesArgsForCall(0)
   984  				Expect(passedSpaceGUID).To(Equal("some-space-GUID"))
   985  				Expect(includeUPS).To(BeTrue())
   986  				Expect(filters).To(BeEmpty())
   987  
   988  				Expect(fakeCloudControllerClient.GetConfigFeatureFlagsCallCount()).To(Equal(0))
   989  
   990  				//Managed expectations
   991  				Expect(fakeCloudControllerClient.GetServicePlanCallCount()).To(Equal(1))
   992  				Expect(fakeCloudControllerClient.GetServiceCallCount()).To(Equal(1))
   993  				Expect(fakeCloudControllerClient.GetServiceInstanceServiceBindingsCallCount()).To(Equal(1))
   994  				//User-Provided expectations
   995  				Expect(fakeCloudControllerClient.GetUserProvidedServiceInstanceServiceBindingsCallCount()).To(Equal(1))
   996  				//Both types expectations
   997  				Expect(fakeCloudControllerClient.GetApplicationCallCount()).To(Equal(3))
   998  			})
   999  		})
  1000  	})
  1001  })