github.com/ablease/cli@v6.37.1-0.20180613014814-3adbb7d7fb19+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/actionerror"
     7  	"code.cloudfoundry.org/cli/actor/v2action"
     8  	"code.cloudfoundry.org/cli/api/uaa"
     9  	"code.cloudfoundry.org/cli/command/commandfakes"
    10  	"code.cloudfoundry.org/cli/command/translatableerror"
    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             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 = 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(actionerror.NotLoggedInError{BinaryName: binaryName})
    58  		})
    59  
    60  		It("returns an error", func() {
    61  			Expect(executeErr).To(MatchError(actionerror.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(translatableerror.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(translatableerror.RequiredArgumentError{ArgumentName: "PASSWORD"}))
    93  				})
    94  			})
    95  
    96  			Context("when origin is not UAA or the empty string", func() {
    97  				BeforeEach(func() {
    98  					fakeActor.CreateUserReturns(
    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.CreateUserCallCount()).To(Equal(1))
   109  					username, password, origin := fakeActor.CreateUserArgsForCall(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.CreateUserReturns(
   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.CreateUserCallCount()).To(Equal(1))
   135  				username, password, origin := fakeActor.CreateUserArgsForCall(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.CreateUserReturns(
   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.CreateUserReturns(
   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  })