github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+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(nil, 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{Message: "some-message"}, 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("some-message")) 123 Expect(warnings).To(ConsistOf("get-applications-warning", "set-application-droplet-warning")) 124 }) 125 }) 126 127 }) 128 }) 129 130 Describe("GetApplicationDroplets", func() { 131 Context("when there are no client errors", func() { 132 BeforeEach(func() { 133 fakeCloudControllerClient.GetApplicationsReturns( 134 []ccv3.Application{ 135 {GUID: "some-app-guid"}, 136 }, 137 ccv3.Warnings{"get-applications-warning"}, 138 nil, 139 ) 140 141 fakeCloudControllerClient.GetApplicationDropletsReturns( 142 []ccv3.Droplet{ 143 { 144 GUID: "some-droplet-guid-1", 145 State: ccv3.DropletStateStaged, 146 CreatedAt: "2017-08-14T21:16:42Z", 147 Buildpacks: []ccv3.DropletBuildpack{ 148 {Name: "ruby"}, 149 {Name: "nodejs"}, 150 }, 151 Image: "docker/some-image", 152 Stack: "penguin", 153 }, 154 { 155 GUID: "some-droplet-guid-2", 156 State: ccv3.DropletStateFailed, 157 CreatedAt: "2017-08-16T00:18:24Z", 158 Buildpacks: []ccv3.DropletBuildpack{ 159 {Name: "java"}, 160 }, 161 Stack: "windows", 162 }, 163 }, 164 ccv3.Warnings{"get-application-droplets-warning"}, 165 nil, 166 ) 167 }) 168 169 It("gets the app's droplets", func() { 170 droplets, warnings, err := actor.GetApplicationDroplets("some-app-name", "some-space-guid") 171 172 Expect(err).ToNot(HaveOccurred()) 173 Expect(warnings).To(ConsistOf("get-applications-warning", "get-application-droplets-warning")) 174 Expect(droplets).To(Equal([]Droplet{ 175 { 176 GUID: "some-droplet-guid-1", 177 State: DropletStateStaged, 178 CreatedAt: "2017-08-14T21:16:42Z", 179 Buildpacks: []Buildpack{ 180 {Name: "ruby"}, 181 {Name: "nodejs"}, 182 }, 183 Image: "docker/some-image", 184 Stack: "penguin", 185 }, 186 { 187 GUID: "some-droplet-guid-2", 188 State: DropletStateFailed, 189 CreatedAt: "2017-08-16T00:18:24Z", 190 Buildpacks: []Buildpack{ 191 {Name: "java"}, 192 }, 193 Stack: "windows", 194 }, 195 })) 196 197 Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1)) 198 queryURL := fakeCloudControllerClient.GetApplicationsArgsForCall(0) 199 query := url.Values{"names": []string{"some-app-name"}, "space_guids": []string{"some-space-guid"}} 200 Expect(queryURL).To(Equal(query)) 201 202 Expect(fakeCloudControllerClient.GetApplicationDropletsCallCount()).To(Equal(1)) 203 appGUID, query := fakeCloudControllerClient.GetApplicationDropletsArgsForCall(0) 204 Expect(appGUID).To(Equal("some-app-guid")) 205 Expect(query).To(Equal(url.Values{})) 206 }) 207 }) 208 209 Context("when getting the application fails", func() { 210 var expectedErr error 211 212 BeforeEach(func() { 213 expectedErr = errors.New("some get application error") 214 215 fakeCloudControllerClient.GetApplicationsReturns( 216 []ccv3.Application{}, 217 ccv3.Warnings{"get-applications-warning"}, 218 expectedErr, 219 ) 220 }) 221 222 It("returns the error", func() { 223 _, warnings, err := actor.GetApplicationDroplets("some-app-name", "some-space-guid") 224 225 Expect(err).To(Equal(expectedErr)) 226 Expect(warnings).To(ConsistOf("get-applications-warning")) 227 }) 228 }) 229 230 Context("when getting the application droplets fails", func() { 231 var expectedErr error 232 233 BeforeEach(func() { 234 expectedErr = errors.New("some get application error") 235 236 fakeCloudControllerClient.GetApplicationsReturns( 237 []ccv3.Application{ 238 {GUID: "some-app-guid"}, 239 }, 240 ccv3.Warnings{"get-applications-warning"}, 241 nil, 242 ) 243 244 fakeCloudControllerClient.GetApplicationDropletsReturns( 245 []ccv3.Droplet{}, 246 ccv3.Warnings{"get-application-droplets-warning"}, 247 expectedErr, 248 ) 249 }) 250 251 It("returns the error", func() { 252 _, warnings, err := actor.GetApplicationDroplets("some-app-name", "some-space-guid") 253 254 Expect(err).To(Equal(expectedErr)) 255 Expect(warnings).To(ConsistOf("get-applications-warning", "get-application-droplets-warning")) 256 }) 257 }) 258 }) 259 })