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