github.com/randomtask1155/cli@v6.41.1-0.20181227003417-a98eed78cbde+incompatible/command/v6/v3_start_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/ccv3/constant" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 10 "code.cloudfoundry.org/cli/command/commandfakes" 11 "code.cloudfoundry.org/cli/command/flag" 12 "code.cloudfoundry.org/cli/command/translatableerror" 13 . "code.cloudfoundry.org/cli/command/v6" 14 "code.cloudfoundry.org/cli/command/v6/v6fakes" 15 "code.cloudfoundry.org/cli/util/configv3" 16 "code.cloudfoundry.org/cli/util/ui" 17 . "github.com/onsi/ginkgo" 18 . "github.com/onsi/gomega" 19 . "github.com/onsi/gomega/gbytes" 20 ) 21 22 var _ = Describe("v3-start Command", func() { 23 var ( 24 cmd V3StartCommand 25 testUI *ui.UI 26 fakeConfig *commandfakes.FakeConfig 27 fakeSharedActor *commandfakes.FakeSharedActor 28 fakeActor *v6fakes.FakeV3StartActor 29 binaryName string 30 executeErr error 31 app string 32 ) 33 34 BeforeEach(func() { 35 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 36 fakeConfig = new(commandfakes.FakeConfig) 37 fakeSharedActor = new(commandfakes.FakeSharedActor) 38 fakeActor = new(v6fakes.FakeV3StartActor) 39 40 binaryName = "faceman" 41 fakeConfig.BinaryNameReturns(binaryName) 42 app = "some-app" 43 44 cmd = V3StartCommand{ 45 RequiredArgs: flag.AppName{AppName: app}, 46 47 UI: testUI, 48 Config: fakeConfig, 49 SharedActor: fakeSharedActor, 50 Actor: fakeActor, 51 } 52 }) 53 54 JustBeforeEach(func() { 55 executeErr = cmd.Execute(nil) 56 }) 57 58 When("the API version is below the minimum", func() { 59 BeforeEach(func() { 60 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinV3ClientVersion) 61 }) 62 63 It("returns a MinimumAPIVersionNotMetError", func() { 64 Expect(executeErr).To(MatchError(translatableerror.MinimumCFAPIVersionNotMetError{ 65 CurrentVersion: ccversion.MinV3ClientVersion, 66 MinimumVersion: ccversion.MinVersionApplicationFlowV3, 67 })) 68 }) 69 70 It("displays the experimental warning", func() { 71 Expect(testUI.Err).To(Say("This command is in EXPERIMENTAL stage and may change without notice")) 72 }) 73 }) 74 75 When("checking target fails", func() { 76 BeforeEach(func() { 77 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 78 fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{BinaryName: binaryName}) 79 }) 80 81 It("returns an error", func() { 82 Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{BinaryName: binaryName})) 83 84 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 85 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 86 Expect(checkTargetedOrg).To(BeTrue()) 87 Expect(checkTargetedSpace).To(BeTrue()) 88 }) 89 }) 90 91 When("the user is not logged in", func() { 92 var expectedErr error 93 94 BeforeEach(func() { 95 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 96 expectedErr = errors.New("some current user error") 97 fakeConfig.CurrentUserReturns(configv3.User{}, expectedErr) 98 }) 99 100 It("return an error", func() { 101 Expect(executeErr).To(Equal(expectedErr)) 102 }) 103 }) 104 105 When("the actor does not return an error", func() { 106 BeforeEach(func() { 107 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 108 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 109 Name: "some-org", 110 }) 111 fakeConfig.TargetedSpaceReturns(configv3.Space{ 112 Name: "some-space", 113 GUID: "some-space-guid", 114 }) 115 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 116 fakeActor.GetApplicationByNameAndSpaceReturns(v3action.Application{GUID: "some-app-guid", State: constant.ApplicationStopped}, v3action.Warnings{"get-warning-1", "get-warning-2"}, nil) 117 fakeActor.StartApplicationReturns(v3action.Application{}, v3action.Warnings{"start-warning-1", "start-warning-2"}, nil) 118 }) 119 120 It("says that the app was started and outputs warnings", func() { 121 Expect(executeErr).ToNot(HaveOccurred()) 122 123 Expect(testUI.Out).To(Say(`Starting app some-app in org some-org / space some-space as steve\.\.\.`)) 124 125 Expect(testUI.Err).To(Say("get-warning-1")) 126 Expect(testUI.Err).To(Say("get-warning-2")) 127 Expect(testUI.Err).To(Say("start-warning-1")) 128 Expect(testUI.Err).To(Say("start-warning-2")) 129 Expect(testUI.Out).To(Say("OK")) 130 131 Expect(fakeActor.StartApplicationCallCount()).To(Equal(1)) 132 appName := fakeActor.StartApplicationArgsForCall(0) 133 Expect(appName).To(Equal("some-app-guid")) 134 }) 135 }) 136 137 When("the get app call returns a ApplicationNotFoundError", func() { 138 var expectedErr error 139 140 BeforeEach(func() { 141 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 142 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 143 Name: "some-org", 144 }) 145 fakeConfig.TargetedSpaceReturns(configv3.Space{ 146 Name: "some-space", 147 }) 148 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 149 expectedErr = actionerror.ApplicationNotFoundError{Name: app} 150 fakeActor.GetApplicationByNameAndSpaceReturns(v3action.Application{State: constant.ApplicationStopped}, v3action.Warnings{"get-warning-1", "get-warning-2"}, expectedErr) 151 }) 152 153 It("says that the app failed to start", func() { 154 Expect(executeErr).To(Equal(actionerror.ApplicationNotFoundError{Name: app})) 155 Expect(testUI.Out).ToNot(Say("Starting")) 156 157 Expect(testUI.Err).To(Say("get-warning-1")) 158 Expect(testUI.Err).To(Say("get-warning-2")) 159 }) 160 }) 161 162 When("the start app call returns a ApplicationNotFoundError (someone else deleted app after we fetched summary)", func() { 163 var expectedErr error 164 165 BeforeEach(func() { 166 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 167 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 168 Name: "some-org", 169 }) 170 fakeConfig.TargetedSpaceReturns(configv3.Space{ 171 Name: "some-space", 172 }) 173 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 174 fakeActor.GetApplicationByNameAndSpaceReturns(v3action.Application{State: constant.ApplicationStopped}, v3action.Warnings{"get-warning-1", "get-warning-2"}, nil) 175 expectedErr = actionerror.ApplicationNotFoundError{Name: app} 176 fakeActor.StartApplicationReturns(v3action.Application{}, v3action.Warnings{"start-warning-1", "start-warning-2"}, expectedErr) 177 }) 178 179 It("says that the app failed to start", func() { 180 Expect(executeErr).To(Equal(actionerror.ApplicationNotFoundError{Name: app})) 181 Expect(testUI.Out).To(Say(`Starting app some-app in org some-org / space some-space as steve\.\.\.`)) 182 183 Expect(testUI.Err).To(Say("get-warning-1")) 184 Expect(testUI.Err).To(Say("get-warning-2")) 185 Expect(testUI.Err).To(Say("start-warning-1")) 186 Expect(testUI.Err).To(Say("start-warning-2")) 187 }) 188 }) 189 190 When("the app is already started", func() { 191 BeforeEach(func() { 192 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 193 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 194 Name: "some-org", 195 }) 196 fakeConfig.TargetedSpaceReturns(configv3.Space{ 197 Name: "some-space", 198 }) 199 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 200 fakeActor.GetApplicationByNameAndSpaceReturns(v3action.Application{State: constant.ApplicationStarted}, v3action.Warnings{"get-warning-1", "get-warning-2"}, nil) 201 }) 202 203 It("says that the app failed to start", func() { 204 Expect(executeErr).ToNot(HaveOccurred()) 205 Expect(testUI.Out).ToNot(Say("Starting")) 206 Expect(testUI.Out).To(Say("OK")) 207 208 Expect(testUI.Err).To(Say("get-warning-1")) 209 Expect(testUI.Err).To(Say("get-warning-2")) 210 Expect(testUI.Err).To(Say("App some-app is already started")) 211 212 Expect(fakeActor.StartApplicationCallCount()).To(BeZero(), "Expected StartApplication to not be called") 213 }) 214 }) 215 216 When("the get application returns an unknown error", func() { 217 var expectedErr error 218 219 BeforeEach(func() { 220 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 221 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 222 Name: "some-org", 223 }) 224 fakeConfig.TargetedSpaceReturns(configv3.Space{ 225 Name: "some-space", 226 }) 227 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 228 expectedErr = errors.New("some-error") 229 fakeActor.GetApplicationByNameAndSpaceReturns(v3action.Application{State: constant.ApplicationStopped}, v3action.Warnings{"get-warning-1", "get-warning-2"}, expectedErr) 230 }) 231 232 It("says that the app failed to start", func() { 233 Expect(executeErr).To(Equal(expectedErr)) 234 Expect(testUI.Out).ToNot(Say("Starting")) 235 236 Expect(testUI.Err).To(Say("get-warning-1")) 237 Expect(testUI.Err).To(Say("get-warning-2")) 238 239 Expect(fakeActor.StartApplicationCallCount()).To(BeZero(), "Expected StartApplication to not be called") 240 }) 241 }) 242 243 When("the start application returns an unknown error", func() { 244 var expectedErr error 245 246 BeforeEach(func() { 247 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 248 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 249 Name: "some-org", 250 }) 251 fakeConfig.TargetedSpaceReturns(configv3.Space{ 252 Name: "some-space", 253 }) 254 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 255 fakeActor.GetApplicationByNameAndSpaceReturns(v3action.Application{State: constant.ApplicationStopped}, v3action.Warnings{"get-warning-1", "get-warning-2"}, nil) 256 expectedErr = errors.New("some-error") 257 fakeActor.StartApplicationReturns(v3action.Application{}, v3action.Warnings{"start-warning-1", "start-warning-2"}, expectedErr) 258 }) 259 260 It("says that the app failed to start", func() { 261 Expect(executeErr).To(Equal(expectedErr)) 262 Expect(testUI.Out).To(Say(`Starting app some-app in org some-org / space some-space as steve\.\.\.`)) 263 264 Expect(testUI.Err).To(Say("get-warning-1")) 265 Expect(testUI.Err).To(Say("get-warning-2")) 266 Expect(testUI.Err).To(Say("start-warning-1")) 267 Expect(testUI.Err).To(Say("start-warning-2")) 268 }) 269 }) 270 })