github.com/randomtask1155/cli@v6.41.1-0.20181227003417-a98eed78cbde+incompatible/actor/v2action/service_test.go (about)

     1  package v2action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	. "code.cloudfoundry.org/cli/actor/v2action"
     8  	"code.cloudfoundry.org/cli/actor/v2action/v2actionfakes"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Service Actions", func() {
    16  	var (
    17  		actor                     *Actor
    18  		fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient
    19  	)
    20  
    21  	BeforeEach(func() {
    22  		fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient)
    23  		actor = NewActor(fakeCloudControllerClient, nil, nil)
    24  	})
    25  
    26  	Describe("GetService", func() {
    27  		var (
    28  			service         Service
    29  			serviceWarnings Warnings
    30  			serviceErr      error
    31  		)
    32  
    33  		JustBeforeEach(func() {
    34  			service, serviceWarnings, serviceErr = actor.GetService("some-service-guid")
    35  		})
    36  
    37  		When("no errors are encountered getting the service", func() {
    38  			var returnedService ccv2.Service
    39  
    40  			BeforeEach(func() {
    41  				returnedService = ccv2.Service{
    42  					GUID:             "some-service-guid",
    43  					Label:            "some-service",
    44  					Description:      "some-description",
    45  					DocumentationURL: "some-url",
    46  				}
    47  				fakeCloudControllerClient.GetServiceReturns(
    48  					returnedService,
    49  					ccv2.Warnings{"get-service-warning"},
    50  					nil)
    51  			})
    52  
    53  			It("returns the service and all warnings", func() {
    54  				Expect(serviceErr).ToNot(HaveOccurred())
    55  				Expect(service).To(Equal(Service(returnedService)))
    56  				Expect(serviceWarnings).To(ConsistOf("get-service-warning"))
    57  
    58  				Expect(fakeCloudControllerClient.GetServiceCallCount()).To(Equal(1))
    59  				Expect(fakeCloudControllerClient.GetServiceArgsForCall(0)).To(Equal("some-service-guid"))
    60  			})
    61  		})
    62  
    63  		When("an error is encountered getting the service", func() {
    64  			var expectedErr error
    65  
    66  			BeforeEach(func() {
    67  				expectedErr = errors.New("some-error")
    68  				fakeCloudControllerClient.GetServiceReturns(
    69  					ccv2.Service{},
    70  					ccv2.Warnings{"get-service-warning"},
    71  					expectedErr)
    72  			})
    73  
    74  			It("returns the errors and all warnings", func() {
    75  				Expect(serviceErr).To(MatchError(expectedErr))
    76  				Expect(serviceWarnings).To(ConsistOf("get-service-warning"))
    77  
    78  				Expect(fakeCloudControllerClient.GetServiceCallCount()).To(Equal(1))
    79  				Expect(fakeCloudControllerClient.GetServiceArgsForCall(0)).To(Equal("some-service-guid"))
    80  			})
    81  		})
    82  	})
    83  
    84  	Describe("GetServiceByName", func() {
    85  		var (
    86  			service         Service
    87  			serviceWarnings Warnings
    88  			serviceErr      error
    89  		)
    90  
    91  		JustBeforeEach(func() {
    92  			service, serviceWarnings, serviceErr = actor.GetServiceByName("some-service")
    93  		})
    94  
    95  		When("services are returned from the client", func() {
    96  			var returnedServices []ccv2.Service
    97  
    98  			BeforeEach(func() {
    99  				returnedServices = []ccv2.Service{
   100  					{
   101  						GUID:             "some-service-guid",
   102  						Label:            "some-service",
   103  						Description:      "some-description",
   104  						DocumentationURL: "some-url",
   105  					},
   106  				}
   107  
   108  				fakeCloudControllerClient.GetServicesReturns(
   109  					returnedServices,
   110  					ccv2.Warnings{"get-services-warning"},
   111  					nil)
   112  			})
   113  
   114  			It("returns the service and all warnings", func() {
   115  				Expect(serviceErr).ToNot(HaveOccurred())
   116  				Expect(service).To(Equal(Service(returnedServices[0])))
   117  				Expect(serviceWarnings).To(ConsistOf("get-services-warning"))
   118  
   119  				Expect(fakeCloudControllerClient.GetServicesCallCount()).To(Equal(1))
   120  				Expect(fakeCloudControllerClient.GetServicesArgsForCall(0)).To(Equal([]ccv2.Filter{{
   121  					Type:     constant.LabelFilter,
   122  					Operator: constant.EqualOperator,
   123  					Values:   []string{"some-service"},
   124  				}}))
   125  			})
   126  		})
   127  
   128  		When("there are no services returned by the client", func() {
   129  			BeforeEach(func() {
   130  				fakeCloudControllerClient.GetServicesReturns(
   131  					[]ccv2.Service{},
   132  					ccv2.Warnings{"get-services-warning"},
   133  					nil)
   134  			})
   135  
   136  			It("returns a ServiceNotFoundError and all warnings", func() {
   137  				Expect(serviceErr).To(MatchError(actionerror.ServiceNotFoundError{Name: "some-service"}))
   138  				Expect(serviceWarnings).To(ConsistOf("get-services-warning"))
   139  			})
   140  		})
   141  
   142  		When("the client returns an error", func() {
   143  			BeforeEach(func() {
   144  				fakeCloudControllerClient.GetServicesReturns(
   145  					[]ccv2.Service{},
   146  					ccv2.Warnings{"get-services-warning"},
   147  					errors.New("client-error"))
   148  			})
   149  
   150  			It("propagates the error and all warnings", func() {
   151  				Expect(serviceErr).To(MatchError(errors.New("client-error")))
   152  				Expect(serviceWarnings).To(ConsistOf("get-services-warning"))
   153  			})
   154  		})
   155  	})
   156  })