[MM-12367] Added CLI command 'team search' (#9512)

* Added 'search' sub-command for the command 'team' to search across teams with name

* Addressed code review

* Moved 'removeDuplicatesAndSortTeams' function to team.go

Addressed more code reviews

* Added unit test case for team search command

* Added unit test case to test searching of teams by display name
This commit is contained in:
Wasim Thabraze
2018-10-03 13:01:53 +05:30
committed by Jesús Espino
parent 2945e8a2b0
commit b6835ab984
2 changed files with 87 additions and 0 deletions

View File

@@ -6,6 +6,7 @@ package commands
import ( import (
"errors" "errors"
"fmt" "fmt"
"sort"
"github.com/mattermost/mattermost-server/app" "github.com/mattermost/mattermost-server/app"
"github.com/mattermost/mattermost-server/model" "github.com/mattermost/mattermost-server/model"
@@ -59,6 +60,15 @@ var ListTeamsCmd = &cobra.Command{
RunE: listTeamsCmdF, RunE: listTeamsCmdF,
} }
var SearchTeamCmd = &cobra.Command{
Use: "search [teams]",
Short: "Search for teams",
Long: "Search for teams based on name",
Example: " team search team1",
Args: cobra.MinimumNArgs(1),
RunE: searchTeamCmdF,
}
func init() { func init() {
TeamCreateCmd.Flags().String("name", "", "Team Name") TeamCreateCmd.Flags().String("name", "", "Team Name")
TeamCreateCmd.Flags().String("display_name", "", "Team Display Name") TeamCreateCmd.Flags().String("display_name", "", "Team Display Name")
@@ -73,6 +83,7 @@ func init() {
AddUsersCmd, AddUsersCmd,
DeleteTeamsCmd, DeleteTeamsCmd,
ListTeamsCmd, ListTeamsCmd,
SearchTeamCmd,
) )
RootCmd.AddCommand(TeamCmd) RootCmd.AddCommand(TeamCmd)
} }
@@ -247,3 +258,45 @@ func listTeamsCmdF(command *cobra.Command, args []string) error {
return nil return nil
} }
func searchTeamCmdF(command *cobra.Command, args []string) error {
a, err := InitDBCommandContextCobra(command)
if err != nil {
return err
}
defer a.Shutdown()
var teams []*model.Team
for _, searchTerm := range args {
foundTeams, err := a.SearchAllTeams(searchTerm)
if err != nil {
return err
}
teams = append(teams, foundTeams...)
}
sortedTeams := removeDuplicatesAndSortTeams(teams)
for _, team := range sortedTeams {
CommandPrettyPrintln(team.Name + ": " + team.DisplayName + " (" + team.Id + ")")
}
return nil
}
// Removes duplicates and sorts teams by name
func removeDuplicatesAndSortTeams(teams []*model.Team) []*model.Team {
keys := make(map[string]bool)
result := []*model.Team{}
for _, team := range teams {
if _, value := keys[team.Name]; !value {
keys[team.Name] = true
result = append(result, team)
}
}
sort.Slice(result, func(i, j int) bool {
return result[i].Name < result[j].Name
})
return result
}

View File

@@ -95,3 +95,37 @@ func TestListTeams(t *testing.T) {
t.Fatal("should have the created team") t.Fatal("should have the created team")
} }
} }
func TestSearchTeamsByName(t *testing.T) {
th := api4.Setup().InitBasic()
defer th.TearDown()
id := model.NewId()
name := "name" + id
displayName := "Name " + id
CheckCommand(t, "team", "create", "--name", name, "--display_name", displayName)
output := CheckCommand(t, "team", "search", name)
if !strings.Contains(string(output), name) {
t.Fatal("should have the created team")
}
}
func TestSearchTeamsByDisplayName(t *testing.T) {
th := api4.Setup().InitBasic()
defer th.TearDown()
id := model.NewId()
name := "name" + id
displayName := "Name " + id
CheckCommand(t, "team", "create", "--name", name, "--display_name", displayName)
output := CheckCommand(t, "team", "search", displayName)
if !strings.Contains(string(output), name) {
t.Fatal("should have the created team")
}
}