diff --git a/cmd/account/add.go b/cmd/account/add.go index 971e4c5..4729619 100644 --- a/cmd/account/add.go +++ b/cmd/account/add.go @@ -37,6 +37,10 @@ func addCmd() *cobra.Command { Run(); err != nil { return err } + } else { + if err := internal.ValidateAccountLogin(login, conf); err != nil { + return err + } } now := time.Now().UTC() @@ -54,6 +58,11 @@ func addCmd() *cobra.Command { color.Green("Account created") + skipAuth, _ := c.Flags().GetBool("skip-auth") + if skipAuth { + return nil + } + confirm := false if err := internal.Confirmation(&confirm, "Do you want to log into this account right away?"); err != nil { @@ -70,6 +79,7 @@ func addCmd() *cobra.Command { } cmd.Flags().StringP("login", "l", "", "Login") + cmd.Flags().BoolP("skip-auth", "s", false, "Skip auth") return cmd } diff --git a/cmd/account_test.go b/cmd/account_test.go new file mode 100644 index 0000000..f09d411 --- /dev/null +++ b/cmd/account_test.go @@ -0,0 +1,43 @@ +package cmd + +import ( + "context" + "errors" + "testing" + + "github.com/pixel365/bx/internal" + "github.com/pixel365/bx/internal/config" +) + +func TestAccountAdd(t *testing.T) { + ctx := context.Background() + cfg, _ := config.NewMockConfig() + var manager internal.ConfigManager = cfg + + t.Run("", func(t *testing.T) { + rootCmd := NewRootCmd(ctx, manager) + rootCmd.SetArgs([]string{"account", "add", "--login", "test", "--skip-auth", "true"}) + err := rootCmd.ExecuteContext(ctx) + if err != nil { + t.Error(err) + } + + if len(cfg.GetAccounts()) != 1 { + t.Error("no accounts added") + } + + if cfg.GetAccounts()[0].Login != "test" { + t.Error("invalid login") + } + + rootCmd.SetArgs([]string{"account", "add", "--login", "test", "--skip-auth", "true"}) + err = rootCmd.ExecuteContext(ctx) + if err == nil { + t.Error("invalid result") + } + + if !errors.Is(err, internal.AccountAlreadyExists) { + t.Errorf("invalid result: %v", err) + } + }) +} diff --git a/cmd/root.go b/cmd/root.go index b0ff568..61db200 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -14,12 +14,7 @@ import ( "github.com/spf13/cobra" ) -func Execute(ctx context.Context, conf internal.ConfigManager) error { - cmd := rootCmd(ctx, conf) - return cmd.ExecuteContext(ctx) -} - -func rootCmd(ctx context.Context, conf internal.ConfigManager) *cobra.Command { +func NewRootCmd(ctx context.Context, conf internal.ConfigManager) *cobra.Command { cmd := &cobra.Command{ Use: "bx", Short: "Command-line tool for developers of 1C-Bitrix platform modules.", diff --git a/main.go b/main.go index 4d4efa3..a593eed 100644 --- a/main.go +++ b/main.go @@ -24,7 +24,8 @@ func main() { } var configManager internal.ConfigManager = conf - if err := cmd.Execute(ctx, configManager); err != nil { + root := cmd.NewRootCmd(ctx, configManager) + if err := root.ExecuteContext(ctx); err != nil { log.Fatal(err) } }