github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+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/util/ui"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  	. "github.com/onsi/gomega/gbytes"
    14  )
    15  
    16  var _ = Describe("delete-user Command", func() {
    17  	var (
    18  		cmd             DeleteUserCommand
    19  		testUI          *ui.UI
    20  		fakeConfig      *commandfakes.FakeConfig
    21  		fakeSharedActor *commandfakes.FakeSharedActor
    22  		fakeActor       *v7fakes.FakeDeleteUserActor
    23  		binaryName      string
    24  		executeErr      error
    25  		input           *Buffer
    26  		currentUser     string
    27  		err             error
    28  	)
    29  
    30  	BeforeEach(func() {
    31  		input = NewBuffer()
    32  		testUI = ui.NewTestUI(input, NewBuffer(), NewBuffer())
    33  		fakeConfig = new(commandfakes.FakeConfig)
    34  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    35  		fakeActor = new(v7fakes.FakeDeleteUserActor)
    36  		currentUser, err = fakeConfig.CurrentUserName()
    37  		Expect(err).NotTo(HaveOccurred())
    38  
    39  		cmd = DeleteUserCommand{
    40  			UI:          testUI,
    41  			Config:      fakeConfig,
    42  			SharedActor: fakeSharedActor,
    43  			Actor:       fakeActor,
    44  		}
    45  
    46  		cmd.RequiredArgs.Username = "some-user"
    47  
    48  		binaryName = "faceman"
    49  		fakeConfig.BinaryNameReturns(binaryName)
    50  	})
    51  
    52  	JustBeforeEach(func() {
    53  		executeErr = cmd.Execute(nil)
    54  	})
    55  
    56  	When("checking target fails", func() {
    57  		BeforeEach(func() {
    58  			fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName})
    59  		})
    60  
    61  		It("returns an error", func() {
    62  			Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: "faceman"}))
    63  
    64  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    65  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    66  			Expect(checkTargetedOrg).To(BeFalse())
    67  			Expect(checkTargetedSpace).To(BeFalse())
    68  		})
    69  	})
    70  
    71  	When("the user is logged in", func() {
    72  		When("no errors occur", func() {
    73  			BeforeEach(func() {
    74  				cmd.Origin = "some-origin"
    75  				fakeActor.GetUserReturns(v7action.User{
    76  					GUID: "some-user-guid", Origin: "some-origin",
    77  				}, nil)
    78  				fakeActor.DeleteUserReturns(v7action.Warnings{"warning: user is about to be deleted"}, nil)
    79  			})
    80  
    81  			When("the -f flag is provided", func() {
    82  				BeforeEach(func() {
    83  					cmd.Force = true
    84  				})
    85  
    86  				It("deletes the user", func() {
    87  					Expect(executeErr).ToNot(HaveOccurred())
    88  
    89  					Expect(fakeActor.GetUserCallCount()).To(Equal(1))
    90  
    91  					username, origin := fakeActor.GetUserArgsForCall(0)
    92  					Expect(username).To(Equal("some-user"))
    93  					Expect(origin).To(Equal("some-origin"))
    94  
    95  					Expect(fakeActor.DeleteUserCallCount()).To(Equal(1))
    96  					userGuid := fakeActor.DeleteUserArgsForCall(0)
    97  					Expect(userGuid).To(Equal("some-user-guid"))
    98  
    99  					Expect(testUI.Out).To(Say(`Deleting user some-user as %s\.\.\.`, currentUser))
   100  					Expect(testUI.Out).To(Say("OK"))
   101  					Expect(testUI.Err).To(Say("warning: user is about to be deleted"))
   102  				})
   103  			})
   104  
   105  			When("the -f flag is NOT provided", func() {
   106  				BeforeEach(func() {
   107  					cmd.Force = false
   108  				})
   109  
   110  				When("the user inputs yes", func() {
   111  					BeforeEach(func() {
   112  						_, err := input.Write([]byte("y\n"))
   113  						Expect(err).ToNot(HaveOccurred())
   114  					})
   115  
   116  					It("deletes the user", func() {
   117  						Expect(executeErr).ToNot(HaveOccurred())
   118  
   119  						Expect(testUI.Out).To(Say(`Really delete the user some-user\? \[yN\]`))
   120  
   121  						username, origin := fakeActor.GetUserArgsForCall(0)
   122  						Expect(username).To(Equal("some-user"))
   123  						Expect(origin).To(Equal("some-origin"))
   124  
   125  						Expect(fakeActor.DeleteUserCallCount()).To(Equal(1))
   126  						userGuid := fakeActor.DeleteUserArgsForCall(0)
   127  						Expect(userGuid).To(Equal("some-user-guid"))
   128  
   129  						Expect(testUI.Out).To(Say("Deleting user some-user as %s...", currentUser))
   130  						Expect(testUI.Out).To(Say("OK"))
   131  						Expect(testUI.Err).To(Say("warning: user is about to be deleted"))
   132  					})
   133  				})
   134  
   135  				When("the user inputs no", func() {
   136  					BeforeEach(func() {
   137  						_, err := input.Write([]byte("n\n"))
   138  						Expect(err).ToNot(HaveOccurred())
   139  					})
   140  
   141  					It("deletes the user", func() {
   142  						Expect(executeErr).ToNot(HaveOccurred())
   143  
   144  						Expect(testUI.Out).To(Say(`Really delete the user some-user\? \[yN\]`))
   145  						Expect(fakeActor.DeleteUserCallCount()).To(Equal(0))
   146  
   147  						Expect(testUI.Out).NotTo(Say(`Deleting user some-user as %s\.\.\.`, currentUser))
   148  						Expect(testUI.Err).NotTo(Say("warning: user is about to be deleted"))
   149  						Expect(testUI.Out).To(Say(`User 'some-user' has not been deleted.`))
   150  						Expect(testUI.Out).To(Say("OK"))
   151  					})
   152  				})
   153  
   154  				When("the user chooses the default", func() {
   155  					BeforeEach(func() {
   156  						_, err := input.Write([]byte("\n"))
   157  						Expect(err).ToNot(HaveOccurred())
   158  					})
   159  
   160  					It("deletes the user", func() {
   161  						Expect(executeErr).ToNot(HaveOccurred())
   162  
   163  						Expect(testUI.Out).To(Say(`Really delete the user some-user\? \[yN\]`))
   164  						Expect(fakeActor.DeleteUserCallCount()).To(Equal(0))
   165  
   166  						Expect(testUI.Out).NotTo(Say(`Deleting user some-user as %s\.\.\.`, currentUser))
   167  						Expect(testUI.Err).NotTo(Say("warning: user is about to be deleted"))
   168  						Expect(testUI.Out).To(Say(`User 'some-user' has not been deleted.`))
   169  						Expect(testUI.Out).To(Say("OK"))
   170  					})
   171  				})
   172  			})
   173  		})
   174  
   175  		When("an error occurs", func() {
   176  			BeforeEach(func() {
   177  				cmd.Force = true
   178  			})
   179  
   180  			When("GetUser action errors", func() {
   181  				When("no user is found", func() {
   182  					var returnedErr error
   183  
   184  					BeforeEach(func() {
   185  						returnedErr = actionerror.UserNotFoundError{Username: "some-user"}
   186  						fakeActor.GetUserReturns(
   187  							v7action.User{},
   188  							returnedErr)
   189  					})
   190  
   191  					It("returns the same error", func() {
   192  						Expect(executeErr).NotTo(HaveOccurred())
   193  						Expect(testUI.Out).To(Say(`User 'some-user' does not exist.`))
   194  						Expect(testUI.Out).To(Say(`OK`))
   195  					})
   196  				})
   197  			})
   198  
   199  			When("DeleteUser action errors", func() {
   200  				var returnedErr error
   201  
   202  				BeforeEach(func() {
   203  					returnedErr = uaa.ConflictError{}
   204  					fakeActor.GetUserReturns(
   205  						v7action.User{GUID: "some-guid", Origin: "uaa"},
   206  						nil)
   207  					fakeActor.DeleteUserReturns(nil, returnedErr)
   208  				})
   209  
   210  				It("returns the same error", func() {
   211  					Expect(executeErr).To(MatchError(returnedErr))
   212  				})
   213  			})
   214  
   215  			When("when everything succeeds", func() {
   216  				var returnedErr error
   217  
   218  				BeforeEach(func() {
   219  					fakeActor.GetUserReturns(
   220  						v7action.User{GUID: "some-guid", Origin: "uaa"},
   221  						nil)
   222  					warnings := []string{"warning-1", "warning-2"}
   223  					fakeActor.DeleteUserReturns(warnings, returnedErr)
   224  				})
   225  
   226  				It("displays all warnings", func() {
   227  					Expect(executeErr).To(BeNil())
   228  					Expect(testUI.Err).To(Say("warning-1"))
   229  					Expect(testUI.Err).To(Say("warning-2"))
   230  				})
   231  			})
   232  		})
   233  	})
   234  })