github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v6/run_task_command_test.go (about) 1 package v6_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/api/cloudcontroller/ccerror" 9 "code.cloudfoundry.org/cli/command/commandfakes" 10 "code.cloudfoundry.org/cli/command/flag" 11 . "code.cloudfoundry.org/cli/command/v6" 12 "code.cloudfoundry.org/cli/command/v6/v6fakes" 13 "code.cloudfoundry.org/cli/types" 14 "code.cloudfoundry.org/cli/util/configv3" 15 "code.cloudfoundry.org/cli/util/ui" 16 . "github.com/onsi/ginkgo" 17 . "github.com/onsi/gomega" 18 . "github.com/onsi/gomega/gbytes" 19 ) 20 21 var _ = Describe("run-task Command", func() { 22 var ( 23 cmd RunTaskCommand 24 testUI *ui.UI 25 fakeConfig *commandfakes.FakeConfig 26 fakeSharedActor *commandfakes.FakeSharedActor 27 fakeActor *v6fakes.FakeRunTaskActor 28 binaryName string 29 executeErr error 30 ) 31 32 BeforeEach(func() { 33 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 34 fakeConfig = new(commandfakes.FakeConfig) 35 fakeSharedActor = new(commandfakes.FakeSharedActor) 36 fakeActor = new(v6fakes.FakeRunTaskActor) 37 38 cmd = RunTaskCommand{ 39 UI: testUI, 40 Config: fakeConfig, 41 SharedActor: fakeSharedActor, 42 Actor: fakeActor, 43 } 44 45 cmd.RequiredArgs.AppName = "some-app-name" 46 cmd.RequiredArgs.Command = "some command" 47 48 binaryName = "faceman" 49 fakeConfig.BinaryNameReturns(binaryName) 50 }) 51 52 JustBeforeEach(func() { 53 executeErr = cmd.Execute(nil) 54 }) 55 56 When("checking target fails", func() { 57 BeforeEach(func() { 58 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 59 }) 60 61 It("returns an error", func() { 62 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 63 64 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 65 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 66 Expect(checkTargetedOrg).To(BeTrue()) 67 Expect(checkTargetedSpace).To(BeTrue()) 68 }) 69 }) 70 71 When("the user is logged in, and a space and org are targeted", func() { 72 BeforeEach(func() { 73 fakeConfig.HasTargetedOrganizationReturns(true) 74 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 75 GUID: "some-org-guid", 76 Name: "some-org", 77 }) 78 fakeConfig.HasTargetedSpaceReturns(true) 79 fakeConfig.TargetedSpaceReturns(configv3.Space{ 80 GUID: "some-space-guid", 81 Name: "some-space", 82 }) 83 }) 84 85 When("getting the current user returns an error", func() { 86 var expectedErr error 87 88 BeforeEach(func() { 89 expectedErr = errors.New("got bananapants??") 90 fakeConfig.CurrentUserReturns( 91 configv3.User{}, 92 expectedErr) 93 }) 94 95 It("returns the error", func() { 96 Expect(executeErr).To(MatchError(expectedErr)) 97 }) 98 }) 99 100 When("getting the current user does not return an error", func() { 101 BeforeEach(func() { 102 fakeConfig.CurrentUserReturns( 103 configv3.User{Name: "some-user"}, 104 nil) 105 }) 106 107 When("provided a valid application name", func() { 108 BeforeEach(func() { 109 fakeActor.GetApplicationByNameAndSpaceReturns( 110 v3action.Application{GUID: "some-app-guid"}, 111 v3action.Warnings{"get-application-warning-1", "get-application-warning-2"}, 112 nil) 113 }) 114 115 When("the task name is not provided", func() { 116 BeforeEach(func() { 117 fakeActor.RunTaskReturns( 118 v3action.Task{ 119 Name: "31337ddd", 120 SequenceID: 3, 121 }, 122 v3action.Warnings{"get-application-warning-3"}, 123 nil) 124 }) 125 126 It("creates a new task and displays all warnings", func() { 127 Expect(executeErr).ToNot(HaveOccurred()) 128 129 Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1)) 130 appName, spaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0) 131 Expect(appName).To(Equal("some-app-name")) 132 Expect(spaceGUID).To(Equal("some-space-guid")) 133 134 Expect(fakeActor.RunTaskCallCount()).To(Equal(1)) 135 appGUID, task := fakeActor.RunTaskArgsForCall(0) 136 Expect(appGUID).To(Equal("some-app-guid")) 137 Expect(task).To(Equal(v3action.Task{Command: "some command"})) 138 139 Expect(testUI.Out).To(Say("Creating task for app some-app-name in org some-org / space some-space as some-user...")) 140 Expect(testUI.Out).To(Say("OK")) 141 142 Expect(testUI.Out).To(Say("Task has been submitted successfully for execution.")) 143 Expect(testUI.Out).To(Say(`task name:\s+31337ddd`)) 144 Expect(testUI.Out).To(Say(`task id:\s+3`)) 145 146 Expect(testUI.Err).To(Say("get-application-warning-1")) 147 Expect(testUI.Err).To(Say("get-application-warning-2")) 148 Expect(testUI.Err).To(Say("get-application-warning-3")) 149 }) 150 }) 151 152 When("task disk space is provided", func() { 153 BeforeEach(func() { 154 cmd.Name = "some-task-name" 155 cmd.Disk = flag.Megabytes{NullUint64: types.NullUint64{Value: 321, IsSet: true}} 156 cmd.Memory = flag.Megabytes{NullUint64: types.NullUint64{Value: 123, IsSet: true}} 157 fakeActor.RunTaskReturns( 158 v3action.Task{ 159 Name: "some-task-name", 160 SequenceID: 3, 161 }, 162 v3action.Warnings{"get-application-warning-3"}, 163 nil) 164 }) 165 166 It("creates a new task and outputs all warnings", func() { 167 Expect(executeErr).ToNot(HaveOccurred()) 168 169 Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1)) 170 appName, spaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0) 171 Expect(appName).To(Equal("some-app-name")) 172 Expect(spaceGUID).To(Equal("some-space-guid")) 173 174 Expect(fakeActor.RunTaskCallCount()).To(Equal(1)) 175 appGUID, task := fakeActor.RunTaskArgsForCall(0) 176 Expect(appGUID).To(Equal("some-app-guid")) 177 Expect(task).To(Equal(v3action.Task{ 178 Command: "some command", 179 Name: "some-task-name", 180 DiskInMB: 321, 181 MemoryInMB: 123, 182 })) 183 184 Expect(testUI.Out).To(Say("Creating task for app some-app-name in org some-org / space some-space as some-user...")) 185 Expect(testUI.Out).To(Say("OK")) 186 187 Expect(testUI.Out).To(Say("Task has been submitted successfully for execution.")) 188 Expect(testUI.Out).To(Say(`task name:\s+some-task-name`)) 189 Expect(testUI.Out).To(Say(`task id:\s+3`)) 190 191 Expect(testUI.Err).To(Say("get-application-warning-1")) 192 Expect(testUI.Err).To(Say("get-application-warning-2")) 193 Expect(testUI.Err).To(Say("get-application-warning-3")) 194 }) 195 }) 196 }) 197 198 When("there are errors", func() { 199 When("the error is translatable", func() { 200 When("getting the app returns the error", func() { 201 var ( 202 returnedErr error 203 expectedErr error 204 ) 205 206 BeforeEach(func() { 207 expectedErr = errors.New("request-error") 208 returnedErr = ccerror.RequestError{Err: expectedErr} 209 fakeActor.GetApplicationByNameAndSpaceReturns( 210 v3action.Application{GUID: "some-app-guid"}, 211 nil, 212 returnedErr) 213 }) 214 215 It("returns a translatable error", func() { 216 Expect(executeErr).To(MatchError(ccerror.RequestError{Err: expectedErr})) 217 }) 218 }) 219 220 When("running the task returns the error", func() { 221 var returnedErr error 222 223 BeforeEach(func() { 224 returnedErr = ccerror.UnverifiedServerError{URL: "some-url"} 225 fakeActor.GetApplicationByNameAndSpaceReturns( 226 v3action.Application{GUID: "some-app-guid"}, 227 nil, 228 nil) 229 fakeActor.RunTaskReturns( 230 v3action.Task{}, 231 nil, 232 returnedErr) 233 }) 234 235 It("returns a translatable error", func() { 236 Expect(executeErr).To(MatchError(returnedErr)) 237 }) 238 }) 239 }) 240 241 When("the error is not translatable", func() { 242 When("getting the app returns the error", func() { 243 var expectedErr error 244 245 BeforeEach(func() { 246 expectedErr = errors.New("got bananapants??") 247 fakeActor.GetApplicationByNameAndSpaceReturns( 248 v3action.Application{GUID: "some-app-guid"}, 249 v3action.Warnings{"get-application-warning-1", "get-application-warning-2"}, 250 expectedErr) 251 }) 252 253 It("return the error and all warnings", func() { 254 Expect(executeErr).To(MatchError(expectedErr)) 255 256 Expect(testUI.Err).To(Say("get-application-warning-1")) 257 Expect(testUI.Err).To(Say("get-application-warning-2")) 258 }) 259 }) 260 261 When("running the task returns an error", func() { 262 var expectedErr error 263 264 BeforeEach(func() { 265 expectedErr = errors.New("got bananapants??") 266 fakeActor.GetApplicationByNameAndSpaceReturns( 267 v3action.Application{GUID: "some-app-guid"}, 268 v3action.Warnings{"get-application-warning-1", "get-application-warning-2"}, 269 nil) 270 fakeActor.RunTaskReturns( 271 v3action.Task{}, 272 v3action.Warnings{"run-task-warning-1", "run-task-warning-2"}, 273 expectedErr) 274 }) 275 276 It("returns the error and all warnings", func() { 277 Expect(executeErr).To(MatchError(expectedErr)) 278 279 Expect(testUI.Err).To(Say("get-application-warning-1")) 280 Expect(testUI.Err).To(Say("get-application-warning-2")) 281 Expect(testUI.Err).To(Say("run-task-warning-1")) 282 Expect(testUI.Err).To(Say("run-task-warning-2")) 283 }) 284 }) 285 }) 286 }) 287 }) 288 }) 289 })