code.cloudfoundry.org/cli@v7.1.0+incompatible/actor/v3action/service_instance_test.go (about)

     1  package v3action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	. "code.cloudfoundry.org/cli/actor/v3action"
     8  	"code.cloudfoundry.org/cli/actor/v3action/v3actionfakes"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
    10  	"code.cloudfoundry.org/cli/resources"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Service Instance Actions", func() {
    16  	var (
    17  		actor                     *Actor
    18  		fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
    19  	)
    20  
    21  	BeforeEach(func() {
    22  		fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
    23  		actor = NewActor(fakeCloudControllerClient, nil, nil, nil)
    24  	})
    25  
    26  	Describe("GetServiceInstanceByNameAndSpace", func() {
    27  		var (
    28  			serviceInstanceName string
    29  			sourceSpaceGUID     string
    30  
    31  			serviceInstance resources.ServiceInstance
    32  			warnings        Warnings
    33  			executionError  error
    34  		)
    35  
    36  		BeforeEach(func() {
    37  			serviceInstanceName = "some-service-instance"
    38  			sourceSpaceGUID = "some-source-space-guid"
    39  		})
    40  
    41  		JustBeforeEach(func() {
    42  			serviceInstance, warnings, executionError = actor.GetServiceInstanceByNameAndSpace(serviceInstanceName, sourceSpaceGUID)
    43  		})
    44  
    45  		When("the cloud controller request is successful", func() {
    46  			When("the cloud controller returns one service instance", func() {
    47  				BeforeEach(func() {
    48  					fakeCloudControllerClient.GetServiceInstancesReturns([]resources.ServiceInstance{
    49  						{
    50  							Name: "some-service-instance",
    51  							GUID: "some-service-instance-guid",
    52  						},
    53  					}, ccv3.Warnings{"some-service-instance-warning"}, nil)
    54  				})
    55  
    56  				It("returns a service instance and warnings", func() {
    57  					Expect(executionError).NotTo(HaveOccurred())
    58  
    59  					Expect(serviceInstance).To(Equal(resources.ServiceInstance{Name: "some-service-instance", GUID: "some-service-instance-guid"}))
    60  					Expect(warnings).To(ConsistOf("some-service-instance-warning"))
    61  					Expect(fakeCloudControllerClient.GetServiceInstancesCallCount()).To(Equal(1))
    62  					Expect(fakeCloudControllerClient.GetServiceInstancesArgsForCall(0)).To(ConsistOf(
    63  						ccv3.Query{Key: ccv3.NameFilter, Values: []string{serviceInstanceName}},
    64  						ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{sourceSpaceGUID}},
    65  					))
    66  				})
    67  			})
    68  
    69  			When("the cloud controller returns no service instances", func() {
    70  				BeforeEach(func() {
    71  					fakeCloudControllerClient.GetServiceInstancesReturns(
    72  						nil,
    73  						ccv3.Warnings{"some-service-instance-warning"},
    74  						nil)
    75  				})
    76  
    77  				It("returns an error and warnings", func() {
    78  					Expect(executionError).To(MatchError(actionerror.ServiceInstanceNotFoundError{Name: serviceInstanceName}))
    79  
    80  					Expect(warnings).To(ConsistOf("some-service-instance-warning"))
    81  				})
    82  			})
    83  		})
    84  
    85  		When("the cloud controller returns an error", func() {
    86  			BeforeEach(func() {
    87  				fakeCloudControllerClient.GetServiceInstancesReturns(
    88  					nil,
    89  					ccv3.Warnings{"some-service-instance-warning"},
    90  					errors.New("no service instance"))
    91  			})
    92  
    93  			It("returns an error and warnings", func() {
    94  				Expect(executionError).To(MatchError("no service instance"))
    95  				Expect(warnings).To(ConsistOf("some-service-instance-warning"))
    96  			})
    97  		})
    98  	})
    99  
   100  	Describe("UnshareServiceInstanceByServiceInstanceAndSpace", func() {
   101  		var (
   102  			serviceInstanceGUID string
   103  			sharedToSpaceGUID   string
   104  
   105  			warnings   Warnings
   106  			executeErr error
   107  		)
   108  
   109  		BeforeEach(func() {
   110  			serviceInstanceGUID = "some-service-instance-guid"
   111  			sharedToSpaceGUID = "some-other-space-guid"
   112  		})
   113  
   114  		JustBeforeEach(func() {
   115  			warnings, executeErr = actor.UnshareServiceInstanceByServiceInstanceAndSpace(serviceInstanceGUID, sharedToSpaceGUID)
   116  		})
   117  
   118  		When("no errors occur deleting the service instance share relationship", func() {
   119  			BeforeEach(func() {
   120  				fakeCloudControllerClient.DeleteServiceInstanceRelationshipsSharedSpaceReturns(
   121  					ccv3.Warnings{"delete-share-relationship-warning"},
   122  					nil)
   123  			})
   124  
   125  			It("returns no errors and all warnings", func() {
   126  				Expect(executeErr).ToNot(HaveOccurred())
   127  				Expect(warnings).To(ConsistOf("delete-share-relationship-warning"))
   128  
   129  				Expect(fakeCloudControllerClient.DeleteServiceInstanceRelationshipsSharedSpaceCallCount()).To(Equal(1))
   130  				serviceInstanceGUIDArg, sharedToSpaceGUIDArg := fakeCloudControllerClient.DeleteServiceInstanceRelationshipsSharedSpaceArgsForCall(0)
   131  				Expect(serviceInstanceGUIDArg).To(Equal(serviceInstanceGUID))
   132  				Expect(sharedToSpaceGUIDArg).To(Equal(sharedToSpaceGUID))
   133  			})
   134  		})
   135  
   136  		When("an error occurs deleting the service instance share relationship", func() {
   137  			var expectedErr error
   138  
   139  			BeforeEach(func() {
   140  				expectedErr = errors.New("delete share relationship error")
   141  				fakeCloudControllerClient.DeleteServiceInstanceRelationshipsSharedSpaceReturns(
   142  					ccv3.Warnings{"delete-share-relationship-warning"},
   143  					expectedErr)
   144  			})
   145  
   146  			It("returns the error and all warnings", func() {
   147  				Expect(executeErr).To(MatchError(expectedErr))
   148  				Expect(warnings).To(ConsistOf("delete-share-relationship-warning"))
   149  			})
   150  		})
   151  	})
   152  })