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