func (s *LoginCommandSuite) TestInit(c *gc.C) { for i, test := range []struct { args []string user string errorString string }{ { // no args is fine }, { args: []string{"foobar"}, user: "******", }, { args: []string{"--foobar"}, errorString: "flag provided but not defined: --foobar", }, { args: []string{"foobar", "extra"}, errorString: `unrecognized args: \["extra"\]`, }, } { c.Logf("test %d", i) wrappedCommand, command := user.NewLoginCommandForTest(nil, s.store) err := coretesting.InitCommand(wrappedCommand, test.args) if test.errorString == "" { c.Check(command.User, gc.Equals, test.user) } else { c.Check(err, gc.ErrorMatches, test.errorString) } } }
func (s *LoginCommandSuite) run(c *gc.C, stdin string, args ...string) (*cmd.Context, juju.NewAPIConnectionParams, error) { var argsOut juju.NewAPIConnectionParams cmd, _ := user.NewLoginCommandForTest(func(args juju.NewAPIConnectionParams) (user.LoginAPI, user.ConnectionAPI, error) { argsOut = args // The account details are modified in place, so take a copy. accountDetails := *argsOut.AccountDetails argsOut.AccountDetails = &accountDetails if s.loginErr != nil { err := s.loginErr s.loginErr = nil return nil, nil, err } return s.mockAPI, s.mockAPI, nil }, s.store) ctx := coretesting.Context(c) if stdin == "" { stdin = "sekrit\n" } ctx.Stdin = strings.NewReader(stdin) err := coretesting.InitCommand(cmd, args) if err != nil { return nil, argsOut, err } err = cmd.Run(ctx) return ctx, argsOut, err }