github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/actor/v3action/droplet_test.go (about)

     1  package v3action_test
     2  
     3  import (
     4  	"errors"
     5  	"net/url"
     6  
     7  	. "code.cloudfoundry.org/cli/actor/v3action"
     8  	"code.cloudfoundry.org/cli/actor/v3action/v3actionfakes"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
    11  
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("Droplet Actions", func() {
    17  	var (
    18  		actor                     *Actor
    19  		fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
    20  	)
    21  
    22  	BeforeEach(func() {
    23  		fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
    24  		actor = NewActor(fakeCloudControllerClient, nil)
    25  	})
    26  
    27  	Describe("SetApplicationDroplet", func() {
    28  		Context("when there are no client errors", func() {
    29  			BeforeEach(func() {
    30  				fakeCloudControllerClient.GetApplicationsReturns(
    31  					[]ccv3.Application{
    32  						{GUID: "some-app-guid"},
    33  					},
    34  					ccv3.Warnings{"get-applications-warning"},
    35  					nil,
    36  				)
    37  
    38  				fakeCloudControllerClient.SetApplicationDropletReturns(
    39  					ccv3.Relationship{GUID: "some-droplet-guid"},
    40  					ccv3.Warnings{"set-application-droplet-warning"},
    41  					nil,
    42  				)
    43  			})
    44  
    45  			It("sets the app's droplet", func() {
    46  				warnings, err := actor.SetApplicationDroplet("some-app-name", "some-space-guid", "some-droplet-guid")
    47  
    48  				Expect(err).ToNot(HaveOccurred())
    49  				Expect(warnings).To(ConsistOf("get-applications-warning", "set-application-droplet-warning"))
    50  
    51  				Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
    52  				queryURL := fakeCloudControllerClient.GetApplicationsArgsForCall(0)
    53  				query := url.Values{"names": []string{"some-app-name"}, "space_guids": []string{"some-space-guid"}}
    54  				Expect(queryURL).To(Equal(query))
    55  
    56  				Expect(fakeCloudControllerClient.SetApplicationDropletCallCount()).To(Equal(1))
    57  				appGUID, dropletGUID := fakeCloudControllerClient.SetApplicationDropletArgsForCall(0)
    58  				Expect(appGUID).To(Equal("some-app-guid"))
    59  				Expect(dropletGUID).To(Equal("some-droplet-guid"))
    60  			})
    61  		})
    62  
    63  		Context("when getting the application fails", func() {
    64  			var expectedErr error
    65  
    66  			BeforeEach(func() {
    67  				expectedErr = errors.New("some get application error")
    68  
    69  				fakeCloudControllerClient.GetApplicationsReturns(
    70  					[]ccv3.Application{},
    71  					ccv3.Warnings{"get-applications-warning"},
    72  					expectedErr,
    73  				)
    74  			})
    75  
    76  			It("returns the error", func() {
    77  				warnings, err := actor.SetApplicationDroplet("some-app-name", "some-space-guid", "some-droplet-guid")
    78  
    79  				Expect(err).To(Equal(expectedErr))
    80  				Expect(warnings).To(ConsistOf("get-applications-warning"))
    81  			})
    82  		})
    83  
    84  		Context("when setting the droplet fails", func() {
    85  			var expectedErr error
    86  			BeforeEach(func() {
    87  				expectedErr = errors.New("some set application-droplet error")
    88  				fakeCloudControllerClient.GetApplicationsReturns(
    89  					[]ccv3.Application{
    90  						{GUID: "some-app-guid"},
    91  					},
    92  					ccv3.Warnings{"get-applications-warning"},
    93  					nil,
    94  				)
    95  
    96  				fakeCloudControllerClient.SetApplicationDropletReturns(
    97  					ccv3.Relationship{},
    98  					ccv3.Warnings{"set-application-droplet-warning"},
    99  					expectedErr,
   100  				)
   101  			})
   102  
   103  			It("returns the error", func() {
   104  				warnings, err := actor.SetApplicationDroplet("some-app-name", "some-space-guid", "some-droplet-guid")
   105  
   106  				Expect(err).To(Equal(expectedErr))
   107  				Expect(warnings).To(ConsistOf("get-applications-warning", "set-application-droplet-warning"))
   108  			})
   109  
   110  			Context("when the cc client response contains an UnprocessableEntityError", func() {
   111  				BeforeEach(func() {
   112  					fakeCloudControllerClient.SetApplicationDropletReturns(
   113  						ccv3.Relationship{},
   114  						ccv3.Warnings{"set-application-droplet-warning"},
   115  						ccerror.UnprocessableEntityError{},
   116  					)
   117  				})
   118  
   119  				It("raises the error as AssignDropletError and returns warnings", func() {
   120  					warnings, err := actor.SetApplicationDroplet("some-app-name", "some-space-guid", "some-droplet-guid")
   121  
   122  					Expect(err).To(MatchError(AssignDropletError{}))
   123  					Expect(warnings).To(ConsistOf("get-applications-warning", "set-application-droplet-warning"))
   124  				})
   125  			})
   126  
   127  		})
   128  	})
   129  })