code.cloudfoundry.org/cli@v7.1.0+incompatible/cf/commands/passwd_test.go (about)

     1  package commands_test
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/cf/api/apifakes"
     5  	"code.cloudfoundry.org/cli/cf/commandregistry"
     6  	"code.cloudfoundry.org/cli/cf/configuration/coreconfig"
     7  	"code.cloudfoundry.org/cli/cf/models"
     8  	"code.cloudfoundry.org/cli/cf/requirements"
     9  	"code.cloudfoundry.org/cli/cf/requirements/requirementsfakes"
    10  	testcmd "code.cloudfoundry.org/cli/cf/util/testhelpers/commands"
    11  	testconfig "code.cloudfoundry.org/cli/cf/util/testhelpers/configuration"
    12  	testterm "code.cloudfoundry.org/cli/cf/util/testhelpers/terminal"
    13  	. "github.com/onsi/ginkgo"
    14  	. "github.com/onsi/gomega"
    15  
    16  	. "code.cloudfoundry.org/cli/cf/util/testhelpers/matchers"
    17  )
    18  
    19  var _ = Describe("password command", func() {
    20  	var (
    21  		pwDeps passwordDeps
    22  		ui     *testterm.FakeUI
    23  		deps   commandregistry.Dependency
    24  	)
    25  
    26  	updateCommandDependency := func(pluginCall bool) {
    27  		deps.UI = ui
    28  		deps.Config = pwDeps.Config
    29  		deps.RepoLocator = deps.RepoLocator.SetPasswordRepository(pwDeps.PwdRepo)
    30  		commandregistry.Commands.SetCommand(commandregistry.Commands.FindCommand("passwd").SetDependency(deps, pluginCall))
    31  	}
    32  
    33  	callPassword := func(inputs []string, pwDeps passwordDeps) (*testterm.FakeUI, bool) {
    34  		ui = &testterm.FakeUI{Inputs: inputs}
    35  		passed := testcmd.RunCLICommand("passwd", []string{}, pwDeps.ReqFactory, updateCommandDependency, false, ui)
    36  		return ui, passed
    37  	}
    38  
    39  	BeforeEach(func() {
    40  		pwDeps = getPasswordDeps()
    41  	})
    42  
    43  	It("does not pass requirements if you are not logged in", func() {
    44  		pwDeps.ReqFactory.NewLoginRequirementReturns(requirements.Failing{Message: "not logged in"})
    45  		_, passed := callPassword([]string{}, pwDeps)
    46  		Expect(passed).To(BeFalse())
    47  	})
    48  
    49  	Context("when logged in successfully", func() {
    50  		BeforeEach(func() {
    51  			pwDeps.ReqFactory.NewLoginRequirementReturns(requirements.Passing{})
    52  			pwDeps.PwdRepo.UpdateUnauthorized = false
    53  		})
    54  
    55  		It("passes requirements", func() {
    56  			_, passed := callPassword([]string{"", "", ""}, pwDeps)
    57  			Expect(passed).To(BeTrue())
    58  		})
    59  
    60  		It("changes your password when given a new password", func() {
    61  			pwDeps.PwdRepo.UpdateUnauthorized = false
    62  			ui, _ := callPassword([]string{"old-password", "new-password", "new-password"}, pwDeps)
    63  
    64  			Expect(ui.PasswordPrompts).To(ContainSubstrings(
    65  				[]string{"Current Password"},
    66  				[]string{"New Password"},
    67  				[]string{"Verify Password"},
    68  			))
    69  
    70  			Expect(ui.Outputs()).To(ContainSubstrings(
    71  				[]string{"Changing password for user " + deps.Config.Username() + "..."},
    72  				[]string{"OK"},
    73  				[]string{"Please log in again"},
    74  			))
    75  
    76  			Expect(pwDeps.PwdRepo.UpdateNewPassword).To(Equal("new-password"))
    77  			Expect(pwDeps.PwdRepo.UpdateOldPassword).To(Equal("old-password"))
    78  
    79  			Expect(pwDeps.Config.AccessToken()).To(Equal(""))
    80  			Expect(pwDeps.Config.OrganizationFields()).To(Equal(models.OrganizationFields{}))
    81  			Expect(pwDeps.Config.SpaceFields()).To(Equal(models.SpaceFields{}))
    82  		})
    83  
    84  		It("fails when the password verification does not match", func() {
    85  			ui, _ := callPassword([]string{"old-password", "new-password", "new-password-with-error"}, pwDeps)
    86  
    87  			Expect(ui.PasswordPrompts).To(ContainSubstrings(
    88  				[]string{"Current Password"},
    89  				[]string{"New Password"},
    90  				[]string{"Verify Password"},
    91  			))
    92  
    93  			Expect(ui.Outputs()).To(ContainSubstrings(
    94  				[]string{"FAILED"},
    95  				[]string{"Password verification does not match"},
    96  			))
    97  
    98  			Expect(pwDeps.PwdRepo.UpdateNewPassword).To(Equal(""))
    99  		})
   100  
   101  		It("fails when the current password does not match", func() {
   102  			pwDeps.PwdRepo.UpdateUnauthorized = true
   103  			ui, _ := callPassword([]string{"old-password", "new-password", "new-password"}, pwDeps)
   104  
   105  			Expect(ui.PasswordPrompts).To(ContainSubstrings(
   106  				[]string{"Current Password"},
   107  				[]string{"New Password"},
   108  				[]string{"Verify Password"},
   109  			))
   110  
   111  			Expect(ui.Outputs()).To(ContainSubstrings(
   112  				[]string{"Changing password for user " + deps.Config.Username() + "..."},
   113  				[]string{"FAILED"},
   114  				[]string{"Current password did not match"},
   115  			))
   116  
   117  			Expect(pwDeps.PwdRepo.UpdateNewPassword).To(Equal("new-password"))
   118  			Expect(pwDeps.PwdRepo.UpdateOldPassword).To(Equal("old-password"))
   119  		})
   120  	})
   121  })
   122  
   123  type passwordDeps struct {
   124  	ReqFactory *requirementsfakes.FakeFactory
   125  	PwdRepo    *apifakes.OldFakePasswordRepo
   126  	Config     coreconfig.Repository
   127  }
   128  
   129  func getPasswordDeps() passwordDeps {
   130  	return passwordDeps{
   131  		ReqFactory: new(requirementsfakes.FakeFactory),
   132  		PwdRepo:    &apifakes.OldFakePasswordRepo{UpdateUnauthorized: true},
   133  		Config:     testconfig.NewRepository(),
   134  	}
   135  }