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 })