[MM-12304] Add channel search support in mattermost cli (#10093)
#### Summary add command search on channel group. it could search channel by name or id in general and search channel with team by team name or id #### Ticket Link Fixes https://github.com/mattermost/mattermost-server/issues/9491 https://mattermost.atlassian.net/browse/MM-12304 #### Checklist - [x] Added or updated unit tests (required for all new features)
Этот коммит содержится в:
коммит произвёл
Hanzei
родитель
9bf5687311
Коммит
f4249b5456
@@ -116,6 +116,17 @@ Channel can be specified by [team]:[channel]. ie. myteam:mychannel or by channel
|
|||||||
RunE: modifyChannelCmdF,
|
RunE: modifyChannelCmdF,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var SearchChannelCmd = &cobra.Command{
|
||||||
|
Use: "search [channel]\n mattermost search --team [team] [channel]",
|
||||||
|
Short: "Search a channel",
|
||||||
|
Long: `Search a channel by channel name.
|
||||||
|
Channel can be specified by team. ie. --team myTeam myChannel or by team ID.`,
|
||||||
|
Example: ` channel search myChannel
|
||||||
|
channel search --team myTeam myChannel`,
|
||||||
|
Args: cobra.ExactArgs(1),
|
||||||
|
RunE: searchChannelCmdF,
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
ChannelCreateCmd.Flags().String("name", "", "Channel Name")
|
ChannelCreateCmd.Flags().String("name", "", "Channel Name")
|
||||||
ChannelCreateCmd.Flags().String("display_name", "", "Channel Display Name")
|
ChannelCreateCmd.Flags().String("display_name", "", "Channel Display Name")
|
||||||
@@ -134,6 +145,7 @@ func init() {
|
|||||||
ModifyChannelCmd.Flags().String("username", "", "Required. Username who changes the channel privacy.")
|
ModifyChannelCmd.Flags().String("username", "", "Required. Username who changes the channel privacy.")
|
||||||
|
|
||||||
ChannelRenameCmd.Flags().String("display_name", "", "Channel Display Name")
|
ChannelRenameCmd.Flags().String("display_name", "", "Channel Display Name")
|
||||||
|
SearchChannelCmd.Flags().String("team", "", "Team name or ID")
|
||||||
|
|
||||||
RemoveChannelUsersCmd.Flags().Bool("all-users", false, "Remove all users from the indicated channel.")
|
RemoveChannelUsersCmd.Flags().Bool("all-users", false, "Remove all users from the indicated channel.")
|
||||||
|
|
||||||
@@ -148,6 +160,7 @@ func init() {
|
|||||||
RestoreChannelsCmd,
|
RestoreChannelsCmd,
|
||||||
ModifyChannelCmd,
|
ModifyChannelCmd,
|
||||||
ChannelRenameCmd,
|
ChannelRenameCmd,
|
||||||
|
SearchChannelCmd,
|
||||||
)
|
)
|
||||||
|
|
||||||
RootCmd.AddCommand(ChannelCmd)
|
RootCmd.AddCommand(ChannelCmd)
|
||||||
@@ -537,3 +550,53 @@ func renameChannelCmdF(command *cobra.Command, args []string) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func searchChannelCmdF(command *cobra.Command, args []string) error {
|
||||||
|
|
||||||
|
a, err := InitDBCommandContextCobra(command)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "failed to InitDBCommandContextCobra")
|
||||||
|
}
|
||||||
|
defer a.Shutdown()
|
||||||
|
|
||||||
|
var channel *model.Channel
|
||||||
|
|
||||||
|
if teamArg, _ := command.Flags().GetString("team"); teamArg != "" {
|
||||||
|
team := getTeamFromTeamArg(a, teamArg)
|
||||||
|
if team == nil {
|
||||||
|
CommandPrettyPrintln(fmt.Sprintf("Team %s is not found", teamArg))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var aErr *model.AppError
|
||||||
|
channel, aErr = a.GetChannelByName(args[0], team.Id, true)
|
||||||
|
if aErr != nil || channel == nil {
|
||||||
|
CommandPrettyPrintln(fmt.Sprintf("Channel %s is not found in team %s", args[0], teamArg))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
teams, aErr := a.GetAllTeams()
|
||||||
|
if aErr != nil {
|
||||||
|
return errors.Wrap(err, "failed to GetAllTeams")
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, team := range teams {
|
||||||
|
channel, _ = a.GetChannelByName(args[0], team.Id, true)
|
||||||
|
if channel != nil && channel.Name == args[0] {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if channel == nil {
|
||||||
|
CommandPrettyPrintln(fmt.Sprintf("Channel %s is not found in any team", args[0]))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if channel.DeleteAt > 0 {
|
||||||
|
CommandPrettyPrintln(fmt.Sprintf(`Channel Name :%s, Display Name :%s, Channel ID :%s (archived)`, channel.Name, channel.DisplayName, channel.Id))
|
||||||
|
} else {
|
||||||
|
CommandPrettyPrintln(fmt.Sprintf(`Channel Name :%s, Display Name :%s, Channel ID :%s`, channel.Name, channel.DisplayName, channel.Id))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
package commands
|
package commands
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@@ -131,3 +132,70 @@ func TestRenameChannel(t *testing.T) {
|
|||||||
assert.Equal(t, "newchannelname10", updatedChannel.Name)
|
assert.Equal(t, "newchannelname10", updatedChannel.Name)
|
||||||
assert.Equal(t, "New Display Name", updatedChannel.DisplayName)
|
assert.Equal(t, "New Display Name", updatedChannel.DisplayName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_searchChannelCmdF(t *testing.T) {
|
||||||
|
th := Setup().InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
channel := th.CreatePublicChannel()
|
||||||
|
channel2 := th.CreatePublicChannel()
|
||||||
|
th.Client.DeleteChannel(channel2.Id)
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
Name string
|
||||||
|
Args []string
|
||||||
|
Expected string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"Success find Channel in any team",
|
||||||
|
[]string{"channel", "search", channel.Name},
|
||||||
|
fmt.Sprintf("Channel Name :%s, Display Name :%s, Channel ID :%s", channel.Name, channel.DisplayName, channel.Id),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Failed find Channel in any team",
|
||||||
|
[]string{"channel", "search", channel.Name + "404"},
|
||||||
|
fmt.Sprintf("Channel %s is not found in any team", channel.Name+"404"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Success find Channel with param team ID",
|
||||||
|
[]string{"channel", "search", "--team", channel.TeamId, channel.Name},
|
||||||
|
fmt.Sprintf("Channel Name :%s, Display Name :%s, Channel ID :%s", channel.Name, channel.DisplayName, channel.Id),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Failed find Channel with param team ID",
|
||||||
|
[]string{"channel", "search", "--team", channel.TeamId, channel.Name + "404"},
|
||||||
|
fmt.Sprintf("Channel %s is not found in team %s", channel.Name+"404", channel.TeamId),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Success find archived Channel in any team",
|
||||||
|
[]string{"channel", "search", channel2.Name},
|
||||||
|
fmt.Sprintf("Channel Name :%s, Display Name :%s, Channel ID :%s (archived)", channel2.Name, channel2.DisplayName, channel2.Id),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Success find archived Channel with param team ID",
|
||||||
|
[]string{"channel", "search", "--team", channel2.TeamId, channel2.Name},
|
||||||
|
fmt.Sprintf("Channel Name :%s, Display Name :%s, Channel ID :%s (archived)", channel2.Name, channel2.DisplayName, channel2.Id),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Failed find team",
|
||||||
|
[]string{"channel", "search", "--team", channel.TeamId + "404", channel.Name},
|
||||||
|
fmt.Sprintf("Team %s is not found", channel.TeamId+"404"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Success find Channel with param team ID",
|
||||||
|
[]string{"channel", "search", channel.Name, "--team", channel.TeamId},
|
||||||
|
fmt.Sprintf("Channel Name :%s, Display Name :%s, Channel ID :%s", channel.Name, channel.DisplayName, channel.Id),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Success find Channel with param team ID",
|
||||||
|
[]string{"channel", "search", channel.Name, "--team=" + channel.TeamId},
|
||||||
|
fmt.Sprintf("Channel Name :%s, Display Name :%s, Channel ID :%s", channel.Name, channel.DisplayName, channel.Id),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.Name, func(t *testing.T) {
|
||||||
|
assert.Contains(t, th.CheckCommand(t, test.Args...), test.Expected)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user