github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+incompatible/command/v2/create_user_command_test.go (about) 1 package v2_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/sharedaction" 7 "code.cloudfoundry.org/cli/actor/v2action" 8 "code.cloudfoundry.org/cli/api/uaa" 9 "code.cloudfoundry.org/cli/command" 10 "code.cloudfoundry.org/cli/command/commandfakes" 11 "code.cloudfoundry.org/cli/command/v2" 12 "code.cloudfoundry.org/cli/command/v2/v2fakes" 13 "code.cloudfoundry.org/cli/util/ui" 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 . "github.com/onsi/gomega/gbytes" 17 ) 18 19 var _ = Describe("create-user Command", func() { 20 var ( 21 cmd v2.CreateUserCommand 22 testUI *ui.UI 23 fakeConfig *commandfakes.FakeConfig 24 fakeSharedActor *commandfakes.FakeSharedActor 25 fakeActor *v2fakes.FakeCreateUserActor 26 binaryName string 27 executeErr error 28 ) 29 30 BeforeEach(func() { 31 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 32 fakeConfig = new(commandfakes.FakeConfig) 33 fakeSharedActor = new(commandfakes.FakeSharedActor) 34 fakeActor = new(v2fakes.FakeCreateUserActor) 35 36 cmd = v2.CreateUserCommand{ 37 UI: testUI, 38 Config: fakeConfig, 39 SharedActor: fakeSharedActor, 40 Actor: fakeActor, 41 } 42 43 cmd.Args.Username = "some-user" 44 password := "some-password" 45 cmd.Args.Password = &password 46 47 binaryName = "faceman" 48 fakeConfig.BinaryNameReturns(binaryName) 49 }) 50 51 JustBeforeEach(func() { 52 executeErr = cmd.Execute(nil) 53 }) 54 55 Context("when checking target fails", func() { 56 BeforeEach(func() { 57 fakeSharedActor.CheckTargetReturns(sharedaction.NotLoggedInError{BinaryName: binaryName}) 58 }) 59 60 It("returns an error", func() { 61 Expect(executeErr).To(MatchError(command.NotLoggedInError{BinaryName: "faceman"})) 62 63 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 64 _, checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 65 Expect(checkTargetedOrg).To(BeFalse()) 66 Expect(checkTargetedSpace).To(BeFalse()) 67 }) 68 }) 69 70 Context("when the user is logged in", func() { 71 Context("when password is not provided", func() { 72 BeforeEach(func() { 73 cmd.Args.Password = nil 74 }) 75 76 Context("when origin is empty string", func() { 77 BeforeEach(func() { 78 cmd.Origin = "" 79 }) 80 81 It("returns the RequiredArgumentError", func() { 82 Expect(executeErr).To(MatchError(command.RequiredArgumentError{ArgumentName: "PASSWORD"})) 83 }) 84 }) 85 86 Context("when origin is UAA", func() { 87 BeforeEach(func() { 88 cmd.Origin = "UAA" 89 }) 90 91 It("returns the RequiredArgumentError", func() { 92 Expect(executeErr).To(MatchError(command.RequiredArgumentError{ArgumentName: "PASSWORD"})) 93 }) 94 }) 95 96 Context("when origin is not UAA or the empty string", func() { 97 BeforeEach(func() { 98 fakeActor.NewUserReturns( 99 v2action.User{GUID: "new-user-cc-guid"}, 100 v2action.Warnings{"warning"}, 101 nil) 102 cmd.Origin = "some-origin" 103 }) 104 105 It("creates the user and displays all warnings", func() { 106 Expect(executeErr).ToNot(HaveOccurred()) 107 108 Expect(fakeActor.NewUserCallCount()).To(Equal(1)) 109 username, password, origin := fakeActor.NewUserArgsForCall(0) 110 Expect(username).To(Equal("some-user")) 111 Expect(password).To(Equal("")) 112 Expect(origin).To(Equal("some-origin")) 113 114 Expect(testUI.Out).To(Say("Creating user some-user...")) 115 Expect(testUI.Out).To(Say("OK")) 116 Expect(testUI.Out).To(Say("TIP: Assign roles with 'faceman set-org-role' and 'faceman set-space-role'.")) 117 Expect(testUI.Err).To(Say("warning")) 118 }) 119 }) 120 }) 121 122 Context("when no errors occur", func() { 123 BeforeEach(func() { 124 fakeActor.NewUserReturns( 125 v2action.User{GUID: "new-user-cc-guid"}, 126 v2action.Warnings{"warning"}, 127 nil) 128 cmd.Origin = "some-origin" 129 }) 130 131 It("creates the user and displays all warnings", func() { 132 Expect(executeErr).ToNot(HaveOccurred()) 133 134 Expect(fakeActor.NewUserCallCount()).To(Equal(1)) 135 username, password, origin := fakeActor.NewUserArgsForCall(0) 136 Expect(username).To(Equal("some-user")) 137 Expect(password).To(Equal("some-password")) 138 Expect(origin).To(Equal("some-origin")) 139 140 Expect(testUI.Out).To(Say("Creating user some-user...")) 141 Expect(testUI.Out).To(Say("OK")) 142 Expect(testUI.Out).To(Say("TIP: Assign roles with 'faceman set-org-role' and 'faceman set-space-role'.")) 143 Expect(testUI.Err).To(Say("warning")) 144 }) 145 }) 146 147 Context("when an error occurs", func() { 148 Context("when the error is not translatable", func() { 149 var returnedErr error 150 151 BeforeEach(func() { 152 returnedErr = errors.New("non-translatable error") 153 fakeActor.NewUserReturns( 154 v2action.User{}, 155 v2action.Warnings{"warning-1", "warning-2"}, 156 returnedErr) 157 }) 158 159 It("returns the same error and all warnings", func() { 160 Expect(executeErr).To(MatchError(returnedErr)) 161 Expect(testUI.Err).To(Say("warning-1")) 162 Expect(testUI.Err).To(Say("warning-2")) 163 }) 164 }) 165 166 Context("when the error is a uaa.ConflictError", func() { 167 var returnedErr error 168 169 BeforeEach(func() { 170 returnedErr = uaa.ConflictError{} 171 fakeActor.NewUserReturns( 172 v2action.User{}, 173 v2action.Warnings{"warning-1", "warning-2"}, 174 returnedErr) 175 }) 176 177 It("displays the error and all warnings", func() { 178 Expect(executeErr).To(BeNil()) 179 Expect(testUI.Err).To(Say("warning-1")) 180 Expect(testUI.Err).To(Say("warning-2")) 181 Expect(testUI.Err).To(Say("user some-user already exists")) 182 }) 183 }) 184 }) 185 }) 186 })