code.cloudfoundry.org/cli@v7.1.0+incompatible/actor/v3action/application_manifest_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/ccerror" 10 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 11 "code.cloudfoundry.org/cli/resources" 12 13 . "github.com/onsi/ginkgo" 14 . "github.com/onsi/gomega" 15 ) 16 17 var _ = Describe("Application Manifest Actions", func() { 18 var ( 19 actor *Actor 20 fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient 21 ) 22 23 BeforeEach(func() { 24 fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient) 25 actor = NewActor(fakeCloudControllerClient, nil, nil, nil) 26 }) 27 28 Describe("ApplyApplicationManifest", func() { 29 var ( 30 fakeParser *v3actionfakes.FakeManifestParser 31 spaceGUID string 32 33 warnings Warnings 34 executeErr error 35 ) 36 37 BeforeEach(func() { 38 fakeParser = new(v3actionfakes.FakeManifestParser) 39 spaceGUID = "some-space-guid" 40 }) 41 42 JustBeforeEach(func() { 43 warnings, executeErr = actor.ApplyApplicationManifest(fakeParser, spaceGUID) 44 }) 45 46 When("given at least one application", func() { 47 BeforeEach(func() { 48 fakeParser.AppNamesReturns([]string{"app-1"}) 49 }) 50 51 When("getting the raw manifest bytes is successful", func() { 52 var manifestContent []byte 53 54 BeforeEach(func() { 55 manifestContent = []byte("some-manifest-contents") 56 fakeParser.RawAppManifestReturns(manifestContent, nil) 57 }) 58 59 When("the app exists", func() { 60 BeforeEach(func() { 61 fakeCloudControllerClient.GetApplicationsReturns( 62 []resources.Application{{GUID: "app-1-guid"}}, 63 ccv3.Warnings{"app-1-warning"}, 64 nil, 65 ) 66 }) 67 68 When("applying the manifest succeeds", func() { 69 BeforeEach(func() { 70 fakeCloudControllerClient.UpdateApplicationApplyManifestReturns( 71 "some-job-url", 72 ccv3.Warnings{"apply-manifest-1-warning"}, 73 nil, 74 ) 75 }) 76 77 When("polling finishes successfully", func() { 78 BeforeEach(func() { 79 fakeCloudControllerClient.PollJobReturns( 80 ccv3.Warnings{"poll-1-warning"}, 81 nil, 82 ) 83 }) 84 85 It("uploads the app manifest", func() { 86 Expect(executeErr).ToNot(HaveOccurred()) 87 Expect(warnings).To(ConsistOf("app-1-warning", "apply-manifest-1-warning", "poll-1-warning")) 88 89 Expect(fakeParser.RawAppManifestCallCount()).To(Equal(1)) 90 appName := fakeParser.RawAppManifestArgsForCall(0) 91 Expect(appName).To(Equal("app-1")) 92 93 Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1)) 94 queries := fakeCloudControllerClient.GetApplicationsArgsForCall(0) 95 Expect(queries).To(ConsistOf( 96 ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}}, 97 ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}}, 98 )) 99 100 Expect(fakeCloudControllerClient.UpdateApplicationApplyManifestCallCount()).To(Equal(1)) 101 guidInCall, appManifest := fakeCloudControllerClient.UpdateApplicationApplyManifestArgsForCall(0) 102 Expect(guidInCall).To(Equal("app-1-guid")) 103 Expect(appManifest).To(Equal(manifestContent)) 104 105 Expect(fakeCloudControllerClient.PollJobCallCount()).To(Equal(1)) 106 jobURL := fakeCloudControllerClient.PollJobArgsForCall(0) 107 Expect(jobURL).To(Equal(ccv3.JobURL("some-job-url"))) 108 }) 109 }) 110 111 When("polling returns a generic error", func() { 112 var expectedErr error 113 114 BeforeEach(func() { 115 expectedErr = errors.New("poll-1-error") 116 fakeCloudControllerClient.PollJobReturns( 117 ccv3.Warnings{"poll-1-warning"}, 118 expectedErr, 119 ) 120 }) 121 122 It("reports a polling error", func() { 123 Expect(executeErr).To(Equal(expectedErr)) 124 Expect(warnings).To(ConsistOf("app-1-warning", "apply-manifest-1-warning", "poll-1-warning")) 125 }) 126 }) 127 128 When("polling returns an job failed error", func() { 129 var expectedErr error 130 131 BeforeEach(func() { 132 expectedErr = ccerror.V3JobFailedError{Detail: "some-job-failed"} 133 fakeCloudControllerClient.PollJobReturns( 134 ccv3.Warnings{"poll-1-warning"}, 135 expectedErr, 136 ) 137 }) 138 139 It("reports a polling error", func() { 140 Expect(executeErr).To(Equal(actionerror.ApplicationManifestError{Message: "some-job-failed"})) 141 Expect(warnings).To(ConsistOf("app-1-warning", "apply-manifest-1-warning", "poll-1-warning")) 142 }) 143 }) 144 }) 145 146 When("applying the manifest errors", func() { 147 var applyErr error 148 149 BeforeEach(func() { 150 applyErr = errors.New("some-apply-manifest-error") 151 fakeCloudControllerClient.UpdateApplicationApplyManifestReturns( 152 "", 153 ccv3.Warnings{"apply-manifest-1-warning"}, 154 applyErr, 155 ) 156 }) 157 158 It("reports a error trying to apply the manifest", func() { 159 Expect(executeErr).To(Equal(applyErr)) 160 Expect(warnings).To(ConsistOf("app-1-warning", "apply-manifest-1-warning")) 161 }) 162 }) 163 }) 164 165 When("there's an error retrieving the application", func() { 166 var getAppErr error 167 168 BeforeEach(func() { 169 getAppErr = errors.New("get-application-error") 170 171 fakeCloudControllerClient.GetApplicationsReturns( 172 nil, 173 ccv3.Warnings{"app-1-warning"}, 174 getAppErr, 175 ) 176 }) 177 178 It("returns error and warnings", func() { 179 Expect(executeErr).To(Equal(getAppErr)) 180 Expect(warnings).To(ConsistOf("app-1-warning")) 181 }) 182 }) 183 }) 184 185 When("generating the raw manifest errors", func() { 186 getManifestErr := errors.New("get-manifest-error") 187 BeforeEach(func() { 188 fakeParser.RawAppManifestReturns(nil, getManifestErr) 189 }) 190 191 It("returns error", func() { 192 Expect(executeErr).To(Equal(getManifestErr)) 193 Expect(warnings).To(BeEmpty()) 194 }) 195 }) 196 }) 197 198 Context("no applications", func() { 199 It("does nothing", func() { 200 Expect(executeErr).ToNot(HaveOccurred()) 201 Expect(warnings).To(BeEmpty()) 202 }) 203 }) 204 }) 205 })