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