diff --git a/server/cmd/mmctl/commands/auth.go b/server/cmd/mmctl/commands/auth.go index 212c86eb5a..291adfded9 100644 --- a/server/cmd/mmctl/commands/auth.go +++ b/server/cmd/mmctl/commands/auth.go @@ -293,7 +293,8 @@ func listCmdF(cmd *cobra.Command, args []string) error { } serverNames := []string{} - var maxNameLen, maxUsernameLen, maxInstanceURLLen int + nameTitle, usernameTitle, instanceURLTitle := "Name", "Username", "InstanceURL" + maxNameLen, maxUsernameLen, maxInstanceURLLen := len(nameTitle), len(usernameTitle), len(instanceURLTitle) for _, c := range *credentialsList { serverNames = append(serverNames, c.Name) if maxNameLen <= len(c.Name) { @@ -310,7 +311,7 @@ func listCmdF(cmd *cobra.Command, args []string) error { return serverNames[i] < serverNames[j] }) - printer.Print(fmt.Sprintf("\n | Active | %*s | %*s | %*s |", maxNameLen, "Name", maxUsernameLen, "Username", maxInstanceURLLen, "InstanceURL")) + printer.Print(fmt.Sprintf("\n | Active | %*s | %*s | %*s |", maxNameLen, nameTitle, maxUsernameLen, usernameTitle, maxInstanceURLLen, instanceURLTitle)) printer.Print(fmt.Sprintf(" |%s|%s|%s|%s|", strings.Repeat("-", 8), strings.Repeat("-", maxNameLen+2), strings.Repeat("-", maxUsernameLen+2), strings.Repeat("-", maxInstanceURLLen+2))) for _, name := range serverNames { c := (*credentialsList)[name] diff --git a/server/cmd/mmctl/commands/auth_test.go b/server/cmd/mmctl/commands/auth_test.go new file mode 100644 index 0000000000..155d76ade3 --- /dev/null +++ b/server/cmd/mmctl/commands/auth_test.go @@ -0,0 +1,88 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +package commands + +import ( + "os" + "os/user" + "path/filepath" + + "github.com/mattermost/mattermost/server/v8/cmd/mmctl/printer" + + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func (s *MmctlUnitTestSuite) TestAuthList() { + originalUser := *currentUser + defer func() { + SetUser(&originalUser) + }() + + tmp, errMkDir := os.MkdirTemp("", "mmctl-") + s.Require().NoError(errMkDir) + s.T().Cleanup(func() { + s.Require().NoError(os.RemoveAll(tmp)) + }) + + testUser, err := user.Current() + s.Require().NoError(err) + testUser.HomeDir = tmp + SetUser(testUser) + viper.Set("config", filepath.Join(xdgConfigHomeVar, configParent, configFileName)) + + s.Run("short name", func() { + printer.Clean() + + credentials := Credentials{ + Name: "MyN", + Username: "Un", + AuthToken: "", + AuthMethod: "", + InstanceURL: "IURL", + Active: true, + } + + err = CleanCredentials() + s.Require().NoError(err) + err = SaveCredentials(credentials) + s.Require().NoError(err) + + errListCmdF := listCmdF(&cobra.Command{}, []string{}) + s.Require().NoError(errListCmdF) + s.Require().Len(printer.GetErrorLines(), 0) + lines := printer.GetLines() + s.Require().Len(lines, 4) + s.Require().Contains(lines[2], "| * | MyN | Un | IURL |") + s.Require().Contains(lines[1], "|--------|------|----------|-------------|") + s.Require().Contains(lines[0], "| Active | Name | Username | InstanceURL |") + }) + + s.Run("normal name", func() { + printer.Clean() + + credentials := Credentials{ + Name: "MyName", + Username: "MyUsername", + AuthToken: "", + AuthMethod: "", + InstanceURL: "My Instance URL", + Active: true, + } + + err = CleanCredentials() + s.Require().NoError(err) + err = SaveCredentials(credentials) + s.Require().NoError(err) + + errListCmdF := listCmdF(&cobra.Command{}, []string{}) + s.Require().NoError(errListCmdF) + s.Require().Len(printer.GetErrorLines(), 0) + lines := printer.GetLines() + s.Require().Len(lines, 4) + s.Require().Contains(lines[2], "| * | MyName | MyUsername | My Instance URL |") + s.Require().Contains(lines[1], "|--------|--------|------------|-----------------|") + s.Require().Contains(lines[0], "| Active | Name | Username | InstanceURL |") + }) +}