github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/delete_user_command_test.go (about) 1 package v7_test 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/v7action" 6 "code.cloudfoundry.org/cli/api/uaa" 7 "code.cloudfoundry.org/cli/command/commandfakes" 8 . "code.cloudfoundry.org/cli/command/v7" 9 "code.cloudfoundry.org/cli/command/v7/v7fakes" 10 "code.cloudfoundry.org/cli/util/ui" 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 . "github.com/onsi/gomega/gbytes" 14 ) 15 16 var _ = Describe("delete-user Command", func() { 17 var ( 18 cmd DeleteUserCommand 19 testUI *ui.UI 20 fakeConfig *commandfakes.FakeConfig 21 fakeSharedActor *commandfakes.FakeSharedActor 22 fakeActor *v7fakes.FakeDeleteUserActor 23 binaryName string 24 executeErr error 25 input *Buffer 26 currentUser string 27 err error 28 ) 29 30 BeforeEach(func() { 31 input = NewBuffer() 32 testUI = ui.NewTestUI(input, NewBuffer(), NewBuffer()) 33 fakeConfig = new(commandfakes.FakeConfig) 34 fakeSharedActor = new(commandfakes.FakeSharedActor) 35 fakeActor = new(v7fakes.FakeDeleteUserActor) 36 currentUser, err = fakeConfig.CurrentUserName() 37 Expect(err).NotTo(HaveOccurred()) 38 39 cmd = DeleteUserCommand{ 40 UI: testUI, 41 Config: fakeConfig, 42 SharedActor: fakeSharedActor, 43 Actor: fakeActor, 44 } 45 46 cmd.RequiredArgs.Username = "some-user" 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: "faceman"})) 63 64 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 65 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 66 Expect(checkTargetedOrg).To(BeFalse()) 67 Expect(checkTargetedSpace).To(BeFalse()) 68 }) 69 }) 70 71 When("the user is logged in", func() { 72 When("no errors occur", func() { 73 BeforeEach(func() { 74 cmd.Origin = "some-origin" 75 fakeActor.GetUserReturns(v7action.User{ 76 GUID: "some-user-guid", Origin: "some-origin", 77 }, nil) 78 fakeActor.DeleteUserReturns(v7action.Warnings{"warning: user is about to be deleted"}, nil) 79 }) 80 81 When("the -f flag is provided", func() { 82 BeforeEach(func() { 83 cmd.Force = true 84 }) 85 86 It("deletes the user", func() { 87 Expect(executeErr).ToNot(HaveOccurred()) 88 89 Expect(fakeActor.GetUserCallCount()).To(Equal(1)) 90 91 username, origin := fakeActor.GetUserArgsForCall(0) 92 Expect(username).To(Equal("some-user")) 93 Expect(origin).To(Equal("some-origin")) 94 95 Expect(fakeActor.DeleteUserCallCount()).To(Equal(1)) 96 userGuid := fakeActor.DeleteUserArgsForCall(0) 97 Expect(userGuid).To(Equal("some-user-guid")) 98 99 Expect(testUI.Out).To(Say(`Deleting user some-user as %s\.\.\.`, currentUser)) 100 Expect(testUI.Out).To(Say("OK")) 101 Expect(testUI.Err).To(Say("warning: user is about to be deleted")) 102 }) 103 }) 104 105 When("the -f flag is NOT provided", func() { 106 BeforeEach(func() { 107 cmd.Force = false 108 }) 109 110 When("the user inputs yes", func() { 111 BeforeEach(func() { 112 _, err := input.Write([]byte("y\n")) 113 Expect(err).ToNot(HaveOccurred()) 114 }) 115 116 It("deletes the user", func() { 117 Expect(executeErr).ToNot(HaveOccurred()) 118 119 Expect(testUI.Out).To(Say(`Really delete the user some-user\? \[yN\]`)) 120 121 username, origin := fakeActor.GetUserArgsForCall(0) 122 Expect(username).To(Equal("some-user")) 123 Expect(origin).To(Equal("some-origin")) 124 125 Expect(fakeActor.DeleteUserCallCount()).To(Equal(1)) 126 userGuid := fakeActor.DeleteUserArgsForCall(0) 127 Expect(userGuid).To(Equal("some-user-guid")) 128 129 Expect(testUI.Out).To(Say("Deleting user some-user as %s...", currentUser)) 130 Expect(testUI.Out).To(Say("OK")) 131 Expect(testUI.Err).To(Say("warning: user is about to be deleted")) 132 }) 133 }) 134 135 When("the user inputs no", func() { 136 BeforeEach(func() { 137 _, err := input.Write([]byte("n\n")) 138 Expect(err).ToNot(HaveOccurred()) 139 }) 140 141 It("deletes the user", func() { 142 Expect(executeErr).ToNot(HaveOccurred()) 143 144 Expect(testUI.Out).To(Say(`Really delete the user some-user\? \[yN\]`)) 145 Expect(fakeActor.DeleteUserCallCount()).To(Equal(0)) 146 147 Expect(testUI.Out).NotTo(Say(`Deleting user some-user as %s\.\.\.`, currentUser)) 148 Expect(testUI.Err).NotTo(Say("warning: user is about to be deleted")) 149 Expect(testUI.Out).To(Say(`User 'some-user' has not been deleted.`)) 150 Expect(testUI.Out).To(Say("OK")) 151 }) 152 }) 153 154 When("the user chooses the default", func() { 155 BeforeEach(func() { 156 _, err := input.Write([]byte("\n")) 157 Expect(err).ToNot(HaveOccurred()) 158 }) 159 160 It("deletes the user", func() { 161 Expect(executeErr).ToNot(HaveOccurred()) 162 163 Expect(testUI.Out).To(Say(`Really delete the user some-user\? \[yN\]`)) 164 Expect(fakeActor.DeleteUserCallCount()).To(Equal(0)) 165 166 Expect(testUI.Out).NotTo(Say(`Deleting user some-user as %s\.\.\.`, currentUser)) 167 Expect(testUI.Err).NotTo(Say("warning: user is about to be deleted")) 168 Expect(testUI.Out).To(Say(`User 'some-user' has not been deleted.`)) 169 Expect(testUI.Out).To(Say("OK")) 170 }) 171 }) 172 }) 173 }) 174 175 When("an error occurs", func() { 176 BeforeEach(func() { 177 cmd.Force = true 178 }) 179 180 When("GetUser action errors", func() { 181 When("no user is found", func() { 182 var returnedErr error 183 184 BeforeEach(func() { 185 returnedErr = actionerror.UserNotFoundError{Username: "some-user"} 186 fakeActor.GetUserReturns( 187 v7action.User{}, 188 returnedErr) 189 }) 190 191 It("returns the same error", func() { 192 Expect(executeErr).NotTo(HaveOccurred()) 193 Expect(testUI.Out).To(Say(`User 'some-user' does not exist.`)) 194 Expect(testUI.Out).To(Say(`OK`)) 195 }) 196 }) 197 }) 198 199 When("DeleteUser action errors", func() { 200 var returnedErr error 201 202 BeforeEach(func() { 203 returnedErr = uaa.ConflictError{} 204 fakeActor.GetUserReturns( 205 v7action.User{GUID: "some-guid", Origin: "uaa"}, 206 nil) 207 fakeActor.DeleteUserReturns(nil, returnedErr) 208 }) 209 210 It("returns the same error", func() { 211 Expect(executeErr).To(MatchError(returnedErr)) 212 }) 213 }) 214 215 When("when everything succeeds", func() { 216 var returnedErr error 217 218 BeforeEach(func() { 219 fakeActor.GetUserReturns( 220 v7action.User{GUID: "some-guid", Origin: "uaa"}, 221 nil) 222 warnings := []string{"warning-1", "warning-2"} 223 fakeActor.DeleteUserReturns(warnings, returnedErr) 224 }) 225 226 It("displays all warnings", func() { 227 Expect(executeErr).To(BeNil()) 228 Expect(testUI.Err).To(Say("warning-1")) 229 Expect(testUI.Err).To(Say("warning-2")) 230 }) 231 }) 232 }) 233 }) 234 })