Context("when wantGUID is true", func() { BeforeEach(func() { userRequirement = requirements.NewUserRequirement("the-username", userRepo, true) }) It("tries to find the user in CC", func() { userRequirement.Execute() Expect(userRepo.FindByUsernameCallCount()).To(Equal(1)) Expect(userRepo.FindByUsernameArgsForCall(0)).To(Equal("the-username")) }) Context("when the call to find the user succeeds", func() { var user models.UserFields BeforeEach(func() { user = models.UserFields{Username: "******", GUID: "the-guid"} userRepo.FindByUsernameReturns(user, nil) }) It("stores the user that was found", func() { userRequirement.Execute() Expect(userRequirement.GetUser()).To(Equal(user)) }) It("does not error", func() { err := userRequirement.Execute() Expect(err).NotTo(HaveOccurred()) }) }) Context("when the call to find the user fails", func() { userError := errors.New("some error")
Expect(runCommand("my-user")).To(BeFalse()) }) It("fails with usage when no arguments are given", func() { runCommand() Expect(ui.Outputs()).To(ContainSubstrings( []string{"Incorrect Usage", "Requires an argument"}, )) }) }) Context("when the given user exists", func() { BeforeEach(func() { userRepo.FindByUsernameReturns(models.UserFields{ Username: "******", GUID: "user-guid", }, nil) }) It("deletes a user with the given name", func() { runCommand("user-name") Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the user user-name"})) Expect(ui.Outputs()).To(ContainSubstrings( []string{"Deleting user", "user-name", "admin-user"}, []string{"OK"}, )) Expect(userRepo.FindByUsernameArgsForCall(0)).To(Equal("user-name")) Expect(userRepo.DeleteArgsForCall(0)).To(Equal("user-guid"))