github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/cf/commands/user/create_user_test.go (about) 1 package user_test 2 3 import ( 4 "code.cloudfoundry.org/cli/cf/api/apifakes" 5 "code.cloudfoundry.org/cli/cf/configuration/coreconfig" 6 "code.cloudfoundry.org/cli/cf/errors" 7 "code.cloudfoundry.org/cli/cf/requirements" 8 "code.cloudfoundry.org/cli/cf/requirements/requirementsfakes" 9 testcmd "code.cloudfoundry.org/cli/cf/util/testhelpers/commands" 10 testconfig "code.cloudfoundry.org/cli/cf/util/testhelpers/configuration" 11 testterm "code.cloudfoundry.org/cli/cf/util/testhelpers/terminal" 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 15 "code.cloudfoundry.org/cli/cf/commandregistry" 16 . "code.cloudfoundry.org/cli/cf/util/testhelpers/matchers" 17 ) 18 19 var _ = Describe("Create user command", func() { 20 var ( 21 requirementsFactory *requirementsfakes.FakeFactory 22 ui *testterm.FakeUI 23 userRepo *apifakes.FakeUserRepository 24 config coreconfig.Repository 25 deps commandregistry.Dependency 26 ) 27 28 BeforeEach(func() { 29 requirementsFactory = new(requirementsfakes.FakeFactory) 30 requirementsFactory.NewLoginRequirementReturns(requirements.Passing{}) 31 ui = new(testterm.FakeUI) 32 userRepo = new(apifakes.FakeUserRepository) 33 config = testconfig.NewRepositoryWithDefaults() 34 accessToken, _ := testconfig.EncodeAccessToken(coreconfig.TokenInfo{ 35 Username: "current-user", 36 }) 37 config.SetAccessToken(accessToken) 38 }) 39 40 updateCommandDependency := func(pluginCall bool) { 41 deps.UI = ui 42 deps.Config = config 43 deps.RepoLocator = deps.RepoLocator.SetUserRepository(userRepo) 44 commandregistry.Commands.SetCommand(commandregistry.Commands.FindCommand("create-user").SetDependency(deps, pluginCall)) 45 } 46 47 runCommand := func(args ...string) bool { 48 return testcmd.RunCLICommand("create-user", args, requirementsFactory, updateCommandDependency, false, ui) 49 } 50 51 It("creates a user", func() { 52 runCommand("my-user", "my-password") 53 54 Expect(ui.Outputs()).To(ContainSubstrings( 55 []string{"Creating user", "my-user"}, 56 []string{"OK"}, 57 []string{"TIP"}, 58 )) 59 60 userName, password := userRepo.CreateArgsForCall(0) 61 Expect(userName).To(Equal("my-user")) 62 Expect(password).To(Equal("my-password")) 63 }) 64 65 Context("when creating the user returns an error", func() { 66 It("prints a warning when the given user already exists", func() { 67 userRepo.CreateReturns(errors.NewModelAlreadyExistsError("User", "my-user")) 68 69 runCommand("my-user", "my-password") 70 71 Expect(ui.WarnOutputs).To(ContainSubstrings( 72 []string{"already exists"}, 73 )) 74 75 Expect(ui.Outputs()).ToNot(ContainSubstrings([]string{"FAILED"})) 76 }) 77 78 It("fails when any error other than alreadyExists is returned", func() { 79 userRepo.CreateReturns(errors.NewHTTPError(403, "403", "Forbidden")) 80 81 runCommand("my-user", "my-password") 82 83 Expect(ui.Outputs()).To(ContainSubstrings( 84 []string{"Forbidden"}, 85 )) 86 87 Expect(ui.Outputs()).To(ContainSubstrings([]string{"FAILED"})) 88 89 }) 90 }) 91 92 It("fails when no arguments are passed", func() { 93 Expect(runCommand()).To(BeFalse()) 94 }) 95 96 It("fails when the user is not logged in", func() { 97 requirementsFactory.NewLoginRequirementReturns(requirements.Failing{Message: "not logged in"}) 98 99 Expect(runCommand("my-user", "my-password")).To(BeFalse()) 100 }) 101 })