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