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  })