diff options
author | Wasim Thabraze <wasim@thabraze.me> | 2018-10-03 13:01:53 +0530 |
---|---|---|
committer | Jesús Espino <jespinog@gmail.com> | 2018-10-03 09:31:53 +0200 |
commit | b6835ab984aece679cb0d6bea548d3f2ed1c9af2 (patch) | |
tree | 1c313d2a07019944b1a4dafcccee115d896ec322 /cmd/mattermost | |
parent | 2945e8a2b0ce9306bb049e65eb2410038e0fa18c (diff) | |
download | chat-b6835ab984aece679cb0d6bea548d3f2ed1c9af2.tar.gz chat-b6835ab984aece679cb0d6bea548d3f2ed1c9af2.tar.bz2 chat-b6835ab984aece679cb0d6bea548d3f2ed1c9af2.zip |
[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
Diffstat (limited to 'cmd/mattermost')
-rw-r--r-- | cmd/mattermost/commands/team.go | 53 | ||||
-rw-r--r-- | cmd/mattermost/commands/team_test.go | 34 |
2 files changed, 87 insertions, 0 deletions
diff --git a/cmd/mattermost/commands/team.go b/cmd/mattermost/commands/team.go index 59570d5e7..587062534 100644 --- a/cmd/mattermost/commands/team.go +++ b/cmd/mattermost/commands/team.go @@ -6,6 +6,7 @@ package commands import ( "errors" "fmt" + "sort" "github.com/mattermost/mattermost-server/app" "github.com/mattermost/mattermost-server/model" @@ -59,6 +60,15 @@ var ListTeamsCmd = &cobra.Command{ 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() { TeamCreateCmd.Flags().String("name", "", "Team Name") TeamCreateCmd.Flags().String("display_name", "", "Team Display Name") @@ -73,6 +83,7 @@ func init() { AddUsersCmd, DeleteTeamsCmd, ListTeamsCmd, + SearchTeamCmd, ) RootCmd.AddCommand(TeamCmd) } @@ -247,3 +258,45 @@ func listTeamsCmdF(command *cobra.Command, args []string) error { 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 +} diff --git a/cmd/mattermost/commands/team_test.go b/cmd/mattermost/commands/team_test.go index 20e04bdc9..559198256 100644 --- a/cmd/mattermost/commands/team_test.go +++ b/cmd/mattermost/commands/team_test.go @@ -95,3 +95,37 @@ func TestListTeams(t *testing.T) { 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") + } +} |