github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/create_user_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/api/uaa" 10 "code.cloudfoundry.org/cli/command/commandfakes" 11 "code.cloudfoundry.org/cli/command/translatableerror" 12 . "code.cloudfoundry.org/cli/command/v7" 13 "code.cloudfoundry.org/cli/command/v7/v7fakes" 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("create-user Command", func() { 21 var ( 22 cmd CreateUserCommand 23 testUI *ui.UI 24 fakeConfig *commandfakes.FakeConfig 25 fakeSharedActor *commandfakes.FakeSharedActor 26 fakeActor *v7fakes.FakeCreateUserActor 27 binaryName string 28 executeErr error 29 input *Buffer 30 ) 31 32 BeforeEach(func() { 33 input = NewBuffer() 34 testUI = ui.NewTestUI(input, NewBuffer(), NewBuffer()) 35 fakeConfig = new(commandfakes.FakeConfig) 36 fakeSharedActor = new(commandfakes.FakeSharedActor) 37 fakeActor = new(v7fakes.FakeCreateUserActor) 38 39 cmd = CreateUserCommand{ 40 UI: testUI, 41 Config: fakeConfig, 42 SharedActor: fakeSharedActor, 43 Actor: fakeActor, 44 } 45 46 cmd.Args.Username = "some-user" 47 password := "some-password" 48 cmd.Args.Password = &password 49 50 binaryName = "faceman" 51 fakeConfig.BinaryNameReturns(binaryName) 52 }) 53 54 JustBeforeEach(func() { 55 executeErr = cmd.Execute(nil) 56 }) 57 58 When("checking target fails", func() { 59 BeforeEach(func() { 60 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 61 }) 62 63 It("returns an error", func() { 64 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: "faceman"})) 65 66 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 67 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 68 Expect(checkTargetedOrg).To(BeFalse()) 69 Expect(checkTargetedSpace).To(BeFalse()) 70 }) 71 }) 72 73 When("the user is logged in", func() { 74 When("password is not provided", func() { 75 BeforeEach(func() { 76 cmd.Args.Password = nil 77 }) 78 79 When("origin is empty string", func() { 80 BeforeEach(func() { 81 cmd.Origin = "" 82 }) 83 84 It("returns the RequiredArgumentError", func() { 85 Expect(executeErr).To(MatchError(translatableerror.RequiredArgumentError{ArgumentName: "PASSWORD"})) 86 }) 87 }) 88 89 When("origin is UAA", func() { 90 BeforeEach(func() { 91 cmd.Origin = "UAA" 92 }) 93 94 It("returns the RequiredArgumentError", func() { 95 Expect(executeErr).To(MatchError(translatableerror.RequiredArgumentError{ArgumentName: "PASSWORD"})) 96 }) 97 }) 98 99 When("origin is not UAA or the empty string", func() { 100 BeforeEach(func() { 101 fakeActor.CreateUserReturns( 102 v7action.User{GUID: "new-user-cc-guid"}, 103 v7action.Warnings{"warning"}, 104 nil) 105 cmd.Origin = "some-origin" 106 fakeActor.GetUserReturns( 107 v7action.User{}, 108 actionerror.UserNotFoundError{}) 109 }) 110 111 It("creates the user and displays all warnings", func() { 112 Expect(executeErr).ToNot(HaveOccurred()) 113 Expect(fakeActor.GetUserCallCount()).To(Equal(1)) 114 115 username, origin := fakeActor.GetUserArgsForCall(0) 116 Expect(username).To(Equal("some-user")) 117 Expect(origin).To(Equal("some-origin")) 118 Expect(fakeActor.CreateUserCallCount()).To(Equal(1)) 119 username, password, origin := fakeActor.CreateUserArgsForCall(0) 120 Expect(username).To(Equal("some-user")) 121 Expect(password).To(Equal("")) 122 Expect(origin).To(Equal("some-origin")) 123 124 Expect(testUI.Out).To(Say("Creating user some-user...")) 125 Expect(testUI.Out).To(Say("OK")) 126 Expect(testUI.Out).To(Say("TIP: Assign roles with 'faceman set-org-role' and 'faceman set-space-role'.")) 127 Expect(testUI.Err).To(Say("warning")) 128 }) 129 }) 130 131 When("password-prompt flag is set", func() { 132 BeforeEach(func() { 133 cmd.PasswordPrompt = true 134 _, err := input.Write([]byte("some-password\n")) 135 Expect(err).ToNot(HaveOccurred()) 136 137 }) 138 139 When("the user already exists in UAA", func() { 140 BeforeEach(func() { 141 fakeActor.GetUserReturns( 142 v7action.User{GUID: "user-guid"}, 143 nil) 144 }) 145 146 It("does not prompt for a password or attempt to create a user", func() { 147 Expect(executeErr).ToNot(HaveOccurred()) 148 Expect(testUI.Out).To(Not(Say("Password:"))) 149 150 Expect(testUI.Out).To(Say("Creating user some-user...")) 151 Expect(fakeActor.CreateUserCallCount()).To(Equal(0)) 152 Expect(testUI.Err).To(Say("User 'some-user' already exists.")) 153 Expect(testUI.Out).To(Say("OK")) 154 }) 155 }) 156 157 When("the user does not yet exist in UAA", func() { 158 BeforeEach(func() { 159 fakeActor.CreateUserReturns( 160 v7action.User{GUID: "new-user-cc-guid"}, 161 v7action.Warnings{"warning"}, 162 nil) 163 fakeActor.GetUserReturns( 164 v7action.User{}, 165 actionerror.UserNotFoundError{}) 166 }) 167 168 It("prompts for a password", func() { 169 Expect(executeErr).ToNot(HaveOccurred()) 170 Expect(testUI.Out).To(Say("Password:")) 171 172 Expect(testUI.Out).To(Say("Creating user some-user...")) 173 174 Expect(fakeActor.CreateUserCallCount()).To(Equal(1)) 175 _, password, _ := fakeActor.CreateUserArgsForCall(0) 176 Expect(password).To(Equal("some-password")) 177 178 Expect(testUI.Out).To(Say("OK")) 179 Expect(testUI.Out).To(Say("TIP: Assign roles with 'faceman set-org-role' and 'faceman set-space-role'.")) 180 Expect(testUI.Err).To(Say("warning")) 181 }) 182 }) 183 }) 184 }) 185 186 When("password is provided", func() { 187 BeforeEach(func() { 188 cmd.Args.Username = "some-user" 189 password := "password" 190 cmd.Args.Password = &password 191 cmd.Origin = "" 192 }) 193 194 When("origin is empty string", func() { 195 It("defaults origin to 'uaa'", func() { 196 Expect(executeErr).ToNot(HaveOccurred()) 197 Expect(fakeActor.GetUserCallCount()).To(Equal(1)) 198 199 username, origin := fakeActor.GetUserArgsForCall(0) 200 Expect(username).To(Equal("some-user")) 201 Expect(origin).To(Equal(constant.DefaultOriginUaa)) 202 }) 203 }) 204 }) 205 206 When("an error occurs", func() { 207 When("the error is not translatable", func() { 208 var returnedErr error 209 210 BeforeEach(func() { 211 returnedErr = errors.New("non-translatable error") 212 fakeActor.CreateUserReturns( 213 v7action.User{}, 214 v7action.Warnings{"warning-1", "warning-2"}, 215 returnedErr) 216 fakeActor.GetUserReturns( 217 v7action.User{}, 218 actionerror.UserNotFoundError{}) 219 }) 220 221 It("returns the same error and all warnings", func() { 222 Expect(executeErr).To(MatchError(returnedErr)) 223 Expect(testUI.Err).To(Say("warning-1")) 224 Expect(testUI.Err).To(Say("warning-2")) 225 }) 226 }) 227 228 When("the error is a uaa.ConflictError", func() { 229 var returnedErr error 230 231 BeforeEach(func() { 232 returnedErr = uaa.ConflictError{} 233 fakeActor.CreateUserReturns( 234 v7action.User{}, 235 v7action.Warnings{"warning-1", "warning-2"}, 236 returnedErr) 237 fakeActor.GetUserReturns( 238 v7action.User{}, 239 actionerror.UserNotFoundError{}) 240 }) 241 242 It("displays the error and all warnings", func() { 243 Expect(executeErr).To(BeNil()) 244 Expect(testUI.Err).To(Say("warning-1")) 245 Expect(testUI.Err).To(Say("warning-2")) 246 Expect(testUI.Err).To(Say("User 'some-user' already exists.")) 247 }) 248 }) 249 }) 250 }) 251 })