summaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorWasim Thabraze <wasim@thabraze.me>2018-10-03 13:01:53 +0530
committerJesús Espino <jespinog@gmail.com>2018-10-03 09:31:53 +0200
commitb6835ab984aece679cb0d6bea548d3f2ed1c9af2 (patch)
tree1c313d2a07019944b1a4dafcccee115d896ec322 /cmd
parent2945e8a2b0ce9306bb049e65eb2410038e0fa18c (diff)
downloadchat-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')
-rw-r--r--cmd/mattermost/commands/team.go53
-rw-r--r--cmd/mattermost/commands/team_test.go34
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")
+ }
+}