mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
th.InitBasic initializes users, channels, and teams. But a lot of tests don't use it at all, causing unncessary delays. A single InitBasic call takes around 400ms. This PR removes 71 of them, approximately shaving off 28 seconds. Arguably, this would be more because some tests run in loops.
612 lines
30 KiB
Go
612 lines
30 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package app
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/mattermost/mattermost-server/v5/model"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestParseStaticListArgument(t *testing.T) {
|
|
items := []model.AutocompleteListItem{
|
|
{
|
|
Hint: "[hint]",
|
|
Item: "on",
|
|
HelpText: "help",
|
|
},
|
|
}
|
|
fixedArgs := &model.AutocompleteStaticListArg{PossibleArguments: items}
|
|
|
|
argument := &model.AutocompleteArg{
|
|
Name: "", //positional
|
|
HelpText: "some_help",
|
|
Type: model.AutocompleteArgTypeStaticList,
|
|
Data: fixedArgs,
|
|
}
|
|
found, _, _, suggestions := parseStaticListArgument(argument, "", "") //TODO understand this!
|
|
assert.True(t, found)
|
|
assert.Equal(t, []model.AutocompleteSuggestion{{Complete: "on", Suggestion: "on", Hint: "[hint]", Description: "help"}}, suggestions)
|
|
|
|
found, _, _, suggestions = parseStaticListArgument(argument, "", "o")
|
|
assert.True(t, found)
|
|
assert.Equal(t, []model.AutocompleteSuggestion{{Complete: "on", Suggestion: "on", Hint: "[hint]", Description: "help"}}, suggestions)
|
|
|
|
found, parsed, toBeParsed, _ := parseStaticListArgument(argument, "", "on ")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "on ", parsed)
|
|
assert.Equal(t, "", toBeParsed)
|
|
|
|
found, parsed, toBeParsed, _ = parseStaticListArgument(argument, "", "on some")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "on ", parsed)
|
|
assert.Equal(t, "some", toBeParsed)
|
|
|
|
fixedArgs.PossibleArguments = append(fixedArgs.PossibleArguments,
|
|
model.AutocompleteListItem{Hint: "[hint]", Item: "off", HelpText: "help"})
|
|
|
|
found, _, _, suggestions = parseStaticListArgument(argument, "", "o")
|
|
assert.True(t, found)
|
|
assert.Equal(t, []model.AutocompleteSuggestion{{Complete: "on", Suggestion: "on", Hint: "[hint]", Description: "help"}, {Complete: "off", Suggestion: "off", Hint: "[hint]", Description: "help"}}, suggestions)
|
|
|
|
found, _, _, suggestions = parseStaticListArgument(argument, "", "of")
|
|
assert.True(t, found)
|
|
assert.Equal(t, []model.AutocompleteSuggestion{{Complete: "off", Suggestion: "off", Hint: "[hint]", Description: "help"}}, suggestions)
|
|
|
|
found, _, _, suggestions = parseStaticListArgument(argument, "", "o some")
|
|
assert.True(t, found)
|
|
assert.Len(t, suggestions, 0)
|
|
|
|
found, parsed, toBeParsed, _ = parseStaticListArgument(argument, "", "off some")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "off ", parsed)
|
|
assert.Equal(t, "some", toBeParsed)
|
|
|
|
fixedArgs.PossibleArguments = append(fixedArgs.PossibleArguments,
|
|
model.AutocompleteListItem{Hint: "[hint]", Item: "onon", HelpText: "help"})
|
|
|
|
found, _, _, suggestions = parseStaticListArgument(argument, "", "on")
|
|
assert.True(t, found)
|
|
assert.Equal(t, []model.AutocompleteSuggestion{{Complete: "on", Suggestion: "on", Hint: "[hint]", Description: "help"}, {Complete: "onon", Suggestion: "onon", Hint: "[hint]", Description: "help"}}, suggestions)
|
|
|
|
found, _, _, suggestions = parseStaticListArgument(argument, "bla ", "ono")
|
|
assert.True(t, found)
|
|
assert.Equal(t, []model.AutocompleteSuggestion{{Complete: "bla onon", Suggestion: "onon", Hint: "[hint]", Description: "help"}}, suggestions)
|
|
|
|
found, parsed, toBeParsed, _ = parseStaticListArgument(argument, "", "on some")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "on ", parsed)
|
|
assert.Equal(t, "some", toBeParsed)
|
|
|
|
found, parsed, toBeParsed, _ = parseStaticListArgument(argument, "", "onon some")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "onon ", parsed)
|
|
assert.Equal(t, "some", toBeParsed)
|
|
}
|
|
|
|
func TestParseInputTextArgument(t *testing.T) {
|
|
argument := &model.AutocompleteArg{
|
|
Name: "", //positional
|
|
HelpText: "some_help",
|
|
Type: model.AutocompleteArgTypeText,
|
|
Data: &model.AutocompleteTextArg{Hint: "hint", Pattern: "pat"},
|
|
}
|
|
|
|
found, _, _, suggestion := parseInputTextArgument(argument, "", "")
|
|
assert.True(t, found)
|
|
assert.Equal(t, model.AutocompleteSuggestion{Complete: "", Suggestion: "", Hint: "hint", Description: "some_help"}, suggestion)
|
|
|
|
found, _, _, suggestion = parseInputTextArgument(argument, "", " ")
|
|
assert.True(t, found)
|
|
assert.Equal(t, model.AutocompleteSuggestion{Complete: " ", Suggestion: "", Hint: "hint", Description: "some_help"}, suggestion)
|
|
|
|
found, _, _, suggestion = parseInputTextArgument(argument, "", "abc")
|
|
assert.True(t, found)
|
|
assert.Equal(t, model.AutocompleteSuggestion{Complete: "abc", Suggestion: "", Hint: "hint", Description: "some_help"}, suggestion)
|
|
|
|
found, _, _, suggestion = parseInputTextArgument(argument, "", "\"abc dfd df ")
|
|
assert.True(t, found)
|
|
assert.Equal(t, model.AutocompleteSuggestion{Complete: "\"abc dfd df ", Suggestion: "", Hint: "hint", Description: "some_help"}, suggestion)
|
|
|
|
found, parsed, toBeParsed, _ := parseInputTextArgument(argument, "", "abc efg ")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "abc ", parsed)
|
|
assert.Equal(t, "efg ", toBeParsed)
|
|
|
|
found, parsed, toBeParsed, _ = parseInputTextArgument(argument, "", "abc ")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "abc ", parsed)
|
|
assert.Equal(t, "", toBeParsed)
|
|
|
|
found, parsed, toBeParsed, _ = parseInputTextArgument(argument, "", "\"abc def\" abc")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "\"abc def\" ", parsed)
|
|
assert.Equal(t, "abc", toBeParsed)
|
|
|
|
found, parsed, toBeParsed, _ = parseInputTextArgument(argument, "", "\"abc def\"")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "\"abc def\"", parsed)
|
|
assert.Equal(t, "", toBeParsed)
|
|
}
|
|
|
|
func TestParseNamedArguments(t *testing.T) {
|
|
argument := &model.AutocompleteArg{
|
|
Name: "name", //named
|
|
HelpText: "some_help",
|
|
Type: model.AutocompleteArgTypeText,
|
|
Data: &model.AutocompleteTextArg{Hint: "hint", Pattern: "pat"},
|
|
}
|
|
|
|
found, _, _, suggestion := parseNamedArgument(argument, "", "")
|
|
assert.True(t, found)
|
|
assert.Equal(t, model.AutocompleteSuggestion{Complete: "--name ", Suggestion: "--name", Hint: "", Description: "some_help"}, suggestion)
|
|
|
|
found, _, _, suggestion = parseNamedArgument(argument, "", " ")
|
|
assert.True(t, found)
|
|
assert.Equal(t, model.AutocompleteSuggestion{Complete: " --name ", Suggestion: "--name", Hint: "", Description: "some_help"}, suggestion)
|
|
|
|
found, parsed, toBeParsed, _ := parseNamedArgument(argument, "", "abc")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "abc", parsed)
|
|
assert.Equal(t, "", toBeParsed)
|
|
|
|
found, parsed, toBeParsed, suggestion = parseNamedArgument(argument, "", "-")
|
|
assert.True(t, found)
|
|
assert.Equal(t, "-", parsed)
|
|
assert.Equal(t, "", toBeParsed)
|
|
assert.Equal(t, model.AutocompleteSuggestion{Complete: "--name ", Suggestion: "--name", Hint: "", Description: "some_help"}, suggestion)
|
|
|
|
found, parsed, toBeParsed, suggestion = parseNamedArgument(argument, "", " -")
|
|
assert.True(t, found)
|
|
assert.Equal(t, " -", parsed)
|
|
assert.Equal(t, "", toBeParsed)
|
|
assert.Equal(t, model.AutocompleteSuggestion{Complete: " --name ", Suggestion: "--name", Hint: "", Description: "some_help"}, suggestion)
|
|
|
|
found, parsed, toBeParsed, suggestion = parseNamedArgument(argument, "", "--name")
|
|
assert.True(t, found)
|
|
assert.Equal(t, "--name", parsed)
|
|
assert.Equal(t, "", toBeParsed)
|
|
assert.Equal(t, model.AutocompleteSuggestion{Complete: "--name ", Suggestion: "--name", Hint: "", Description: "some_help"}, suggestion)
|
|
|
|
found, parsed, toBeParsed, _ = parseNamedArgument(argument, "", "--name bla")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "--name ", parsed)
|
|
assert.Equal(t, "bla", toBeParsed)
|
|
|
|
found, parsed, toBeParsed, _ = parseNamedArgument(argument, "", "--name bla gla")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "--name ", parsed)
|
|
assert.Equal(t, "bla gla", toBeParsed)
|
|
|
|
found, parsed, toBeParsed, _ = parseNamedArgument(argument, "", "--name \"bla gla\"")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "--name ", parsed)
|
|
assert.Equal(t, "\"bla gla\"", toBeParsed)
|
|
|
|
found, parsed, toBeParsed, _ = parseNamedArgument(argument, "", "--name \"bla gla\" ")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "--name ", parsed)
|
|
assert.Equal(t, "\"bla gla\" ", toBeParsed)
|
|
|
|
found, parsed, toBeParsed, _ = parseNamedArgument(argument, "", "bla")
|
|
assert.False(t, found)
|
|
assert.Equal(t, "bla", parsed)
|
|
assert.Equal(t, "", toBeParsed)
|
|
|
|
}
|
|
|
|
func TestSuggestions(t *testing.T) {
|
|
th := Setup(t)
|
|
defer th.TearDown()
|
|
|
|
jira := createJiraAutocompleteData()
|
|
emptyCmdArgs := &model.CommandArgs{}
|
|
|
|
suggestions := th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "ji", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, jira.Trigger, suggestions[0].Complete)
|
|
assert.Equal(t, jira.Trigger, suggestions[0].Suggestion)
|
|
assert.Equal(t, "[command]", suggestions[0].Hint)
|
|
assert.Equal(t, jira.HelpText, suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira crea", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "jira create", suggestions[0].Complete)
|
|
assert.Equal(t, "create", suggestions[0].Suggestion)
|
|
assert.Equal(t, "[issue text]", suggestions[0].Hint)
|
|
assert.Equal(t, "Create a new Issue", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira c", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 2)
|
|
assert.Equal(t, "jira create", suggestions[1].Complete)
|
|
assert.Equal(t, "create", suggestions[1].Suggestion)
|
|
assert.Equal(t, "[issue text]", suggestions[1].Hint)
|
|
assert.Equal(t, "Create a new Issue", suggestions[1].Description)
|
|
assert.Equal(t, "jira connect", suggestions[0].Complete)
|
|
assert.Equal(t, "connect", suggestions[0].Suggestion)
|
|
assert.Equal(t, "[url]", suggestions[0].Hint)
|
|
assert.Equal(t, "Connect your Mattermost account to your Jira account", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "jira create ", suggestions[0].Complete)
|
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
|
assert.Equal(t, "[text]", suggestions[0].Hint)
|
|
assert.Equal(t, "This text is optional, will be inserted into the description field", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create some", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "jira create some", suggestions[0].Complete)
|
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
|
assert.Equal(t, "[text]", suggestions[0].Hint)
|
|
assert.Equal(t, "This text is optional, will be inserted into the description field", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create some text ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 0)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "invalid command", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 0)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira settings notifications o", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 2)
|
|
assert.Equal(t, "jira settings notifications On", suggestions[0].Complete)
|
|
assert.Equal(t, "On", suggestions[0].Suggestion)
|
|
assert.Equal(t, "Turn notifications on", suggestions[0].Hint)
|
|
assert.Equal(t, "", suggestions[0].Description)
|
|
assert.Equal(t, "jira settings notifications Off", suggestions[1].Complete)
|
|
assert.Equal(t, "Off", suggestions[1].Suggestion)
|
|
assert.Equal(t, "Turn notifications off", suggestions[1].Hint)
|
|
assert.Equal(t, "", suggestions[1].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 11)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira ", model.SYSTEM_USER_ROLE_ID)
|
|
assert.Len(t, suggestions, 9)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create \"some issue text", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "jira create \"some issue text", suggestions[0].Complete)
|
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
|
assert.Equal(t, "[text]", suggestions[0].Hint)
|
|
assert.Equal(t, "This text is optional, will be inserted into the description field", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "jira timezone --zone ", suggestions[0].Complete)
|
|
assert.Equal(t, "--zone", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone --", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "jira timezone --zone ", suggestions[0].Complete)
|
|
assert.Equal(t, "--zone", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone --zone ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "jira timezone --zone ", suggestions[0].Complete)
|
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
|
assert.Equal(t, "[UTC+07:00]", suggestions[0].Hint)
|
|
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone --zone bla", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "jira timezone --zone bla", suggestions[0].Complete)
|
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
|
assert.Equal(t, "[UTC+07:00]", suggestions[0].Hint)
|
|
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone bla", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 0)
|
|
|
|
commandA := &model.Command{
|
|
Trigger: "alice",
|
|
AutocompleteData: model.NewAutocompleteData("alice", "", ""),
|
|
}
|
|
commandB := &model.Command{
|
|
Trigger: "bob",
|
|
AutocompleteData: model.NewAutocompleteData("bob", "", ""),
|
|
}
|
|
commandC := &model.Command{
|
|
Trigger: "charles",
|
|
AutocompleteData: model.NewAutocompleteData("charles", "", ""),
|
|
}
|
|
suggestions = th.App.GetSuggestions(emptyCmdArgs, []*model.Command{commandB, commandC, commandA}, model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 3)
|
|
assert.Equal(t, "alice", suggestions[0].Complete)
|
|
assert.Equal(t, "bob", suggestions[1].Complete)
|
|
assert.Equal(t, "charles", suggestions[2].Complete)
|
|
}
|
|
|
|
func TestCommandWithOptionalArgs(t *testing.T) {
|
|
th := Setup(t)
|
|
defer th.TearDown()
|
|
|
|
command := createCommandWithOptionalArgs()
|
|
emptyCmdArgs := &model.CommandArgs{}
|
|
|
|
suggestions := th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "comm", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, command.Trigger, suggestions[0].Complete)
|
|
assert.Equal(t, command.Trigger, suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, command.HelpText, suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 4)
|
|
assert.Equal(t, "command subcommand1", suggestions[0].Complete)
|
|
assert.Equal(t, "subcommand1", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "", suggestions[0].Description)
|
|
assert.Equal(t, "command subcommand2", suggestions[1].Complete)
|
|
assert.Equal(t, "subcommand2", suggestions[1].Suggestion)
|
|
assert.Equal(t, "", suggestions[1].Hint)
|
|
assert.Equal(t, "", suggestions[1].Description)
|
|
assert.Equal(t, "command subcommand3", suggestions[2].Complete)
|
|
assert.Equal(t, "subcommand3", suggestions[2].Suggestion)
|
|
assert.Equal(t, "", suggestions[2].Hint)
|
|
assert.Equal(t, "", suggestions[2].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 2)
|
|
assert.Equal(t, "command subcommand1 item1", suggestions[0].Complete)
|
|
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "", suggestions[0].Description)
|
|
assert.Equal(t, "command subcommand1 item2", suggestions[1].Complete)
|
|
assert.Equal(t, "item2", suggestions[1].Suggestion)
|
|
assert.Equal(t, "", suggestions[1].Hint)
|
|
assert.Equal(t, "", suggestions[1].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand1 item1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "command subcommand1 item1 --name2 ", suggestions[0].Complete)
|
|
assert.Equal(t, "--name2", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "arg2", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand1 item1 --name2 bla", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "command subcommand1 item1 --name2 bla", suggestions[0].Complete)
|
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "arg2", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 2)
|
|
assert.Equal(t, "command subcommand2 --name1 ", suggestions[0].Complete)
|
|
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "arg1", suggestions[0].Description)
|
|
assert.Equal(t, "command subcommand2 ", suggestions[1].Complete)
|
|
assert.Equal(t, "", suggestions[1].Suggestion)
|
|
assert.Equal(t, "", suggestions[1].Hint)
|
|
assert.Equal(t, "arg2", suggestions[1].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 -", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 2)
|
|
assert.Equal(t, "command subcommand2 --name1 ", suggestions[0].Complete)
|
|
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "arg1", suggestions[0].Description)
|
|
assert.Equal(t, "command subcommand2 -", suggestions[1].Complete)
|
|
assert.Equal(t, "", suggestions[1].Suggestion)
|
|
assert.Equal(t, "", suggestions[1].Hint)
|
|
assert.Equal(t, "arg2", suggestions[1].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 3)
|
|
assert.Equal(t, "command subcommand2 --name1 item1", suggestions[0].Complete)
|
|
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "", suggestions[0].Description)
|
|
assert.Equal(t, "command subcommand2 --name1 item2", suggestions[1].Complete)
|
|
assert.Equal(t, "item2", suggestions[1].Suggestion)
|
|
assert.Equal(t, "", suggestions[1].Hint)
|
|
assert.Equal(t, "", suggestions[1].Description)
|
|
assert.Equal(t, "command subcommand2 --name1 ", suggestions[2].Complete)
|
|
assert.Equal(t, "", suggestions[2].Suggestion)
|
|
assert.Equal(t, "", suggestions[2].Hint)
|
|
assert.Equal(t, "arg3", suggestions[2].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 3)
|
|
assert.Equal(t, "command subcommand2 --name1 item1", suggestions[0].Complete)
|
|
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "", suggestions[0].Description)
|
|
assert.Equal(t, "command subcommand2 --name1 item2", suggestions[1].Complete)
|
|
assert.Equal(t, "item2", suggestions[1].Suggestion)
|
|
assert.Equal(t, "", suggestions[1].Hint)
|
|
assert.Equal(t, "", suggestions[1].Description)
|
|
assert.Equal(t, "command subcommand2 --name1 item", suggestions[2].Complete)
|
|
assert.Equal(t, "", suggestions[2].Suggestion)
|
|
assert.Equal(t, "", suggestions[2].Hint)
|
|
assert.Equal(t, "arg3", suggestions[2].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "command subcommand2 --name1 item1 ", suggestions[0].Complete)
|
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "arg2", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item1 bla ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "command subcommand2 --name1 item1 bla ", suggestions[0].Complete)
|
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "arg3", suggestions[0].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item1 bla bla ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 0)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand3 ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 3)
|
|
assert.Equal(t, "command subcommand3 --name1 ", suggestions[0].Complete)
|
|
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "arg1", suggestions[0].Description)
|
|
assert.Equal(t, "command subcommand3 --name2 ", suggestions[1].Complete)
|
|
assert.Equal(t, "--name2", suggestions[1].Suggestion)
|
|
assert.Equal(t, "", suggestions[1].Hint)
|
|
assert.Equal(t, "arg2", suggestions[1].Description)
|
|
assert.Equal(t, "command subcommand3 --name3 ", suggestions[2].Complete)
|
|
assert.Equal(t, "--name3", suggestions[2].Suggestion)
|
|
assert.Equal(t, "", suggestions[2].Hint)
|
|
assert.Equal(t, "arg3", suggestions[2].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand3 --name", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 3)
|
|
assert.Equal(t, "command subcommand3 --name1 ", suggestions[0].Complete)
|
|
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "arg1", suggestions[0].Description)
|
|
assert.Equal(t, "command subcommand3 --name2 ", suggestions[1].Complete)
|
|
assert.Equal(t, "--name2", suggestions[1].Suggestion)
|
|
assert.Equal(t, "", suggestions[1].Hint)
|
|
assert.Equal(t, "arg2", suggestions[1].Description)
|
|
assert.Equal(t, "command subcommand3 --name3 ", suggestions[2].Complete)
|
|
assert.Equal(t, "--name3", suggestions[2].Suggestion)
|
|
assert.Equal(t, "", suggestions[2].Hint)
|
|
assert.Equal(t, "arg3", suggestions[2].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand3 --name1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 2)
|
|
assert.Equal(t, "command subcommand3 --name1 item1", suggestions[0].Complete)
|
|
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
|
assert.Equal(t, "", suggestions[0].Hint)
|
|
assert.Equal(t, "", suggestions[0].Description)
|
|
assert.Equal(t, "command subcommand3 --name1 item2", suggestions[1].Complete)
|
|
assert.Equal(t, "item2", suggestions[1].Suggestion)
|
|
assert.Equal(t, "", suggestions[1].Hint)
|
|
assert.Equal(t, "", suggestions[1].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand4 ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 2)
|
|
assert.Equal(t, "command subcommand4 item1", suggestions[0].Complete)
|
|
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
|
assert.Equal(t, "(optional)", suggestions[0].Hint)
|
|
assert.Equal(t, "help3", suggestions[0].Description)
|
|
assert.Equal(t, "command subcommand4 ", suggestions[1].Complete)
|
|
assert.Equal(t, "", suggestions[1].Suggestion)
|
|
assert.Equal(t, "message", suggestions[1].Hint)
|
|
assert.Equal(t, "help4", suggestions[1].Description)
|
|
|
|
suggestions = th.App.getSuggestions(emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand4 item1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
|
assert.Len(t, suggestions, 1)
|
|
assert.Equal(t, "command subcommand4 item1 ", suggestions[0].Complete)
|
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
|
assert.Equal(t, "message", suggestions[0].Hint)
|
|
assert.Equal(t, "help4", suggestions[0].Description)
|
|
}
|
|
|
|
func createCommandWithOptionalArgs() *model.AutocompleteData {
|
|
command := model.NewAutocompleteData("command", "", "")
|
|
subCommand1 := model.NewAutocompleteData("subcommand1", "", "")
|
|
subCommand1.AddStaticListArgument("arg1", true, []model.AutocompleteListItem{{Item: "item1"}, {Item: "item2"}})
|
|
subCommand1.AddNamedTextArgument("name2", "arg2", "", "", false)
|
|
command.AddCommand(subCommand1)
|
|
subCommand2 := model.NewAutocompleteData("subcommand2", "", "")
|
|
subCommand2.AddNamedStaticListArgument("name1", "arg1", false, []model.AutocompleteListItem{{Item: "item1"}, {Item: "item2"}})
|
|
subCommand2.AddTextArgument("arg2", "", "")
|
|
subCommand2.AddTextArgument("arg3", "", "")
|
|
command.AddCommand(subCommand2)
|
|
subCommand3 := model.NewAutocompleteData("subcommand3", "", "")
|
|
subCommand3.AddNamedStaticListArgument("name1", "arg1", false, []model.AutocompleteListItem{{Item: "item1"}, {Item: "item2"}})
|
|
subCommand3.AddNamedTextArgument("name2", "arg2", "", "", false)
|
|
subCommand3.AddNamedTextArgument("name3", "arg3", "", "", false)
|
|
command.AddCommand(subCommand3)
|
|
subcommand4 := model.NewAutocompleteData("subcommand4", "", "help1")
|
|
subcommand4.AddStaticListArgument("help2", false, []model.AutocompleteListItem{{
|
|
HelpText: "help3",
|
|
Hint: "(optional)",
|
|
Item: "item1",
|
|
}})
|
|
subcommand4.AddTextArgument("help4", "message", "")
|
|
command.AddCommand(subcommand4)
|
|
|
|
return command
|
|
}
|
|
|
|
// createJiraAutocompleteData will create autocomplete data for jira plugin. For testing purposes only.
|
|
func createJiraAutocompleteData() *model.AutocompleteData {
|
|
jira := model.NewAutocompleteData("jira", "[command]", "Available commands: connect, assign, disconnect, create, transition, view, subscribe, settings, install cloud/server, uninstall cloud/server, help")
|
|
|
|
connect := model.NewAutocompleteData("connect", "[url]", "Connect your Mattermost account to your Jira account")
|
|
jira.AddCommand(connect)
|
|
|
|
disconnect := model.NewAutocompleteData("disconnect", "", "Disconnect your Mattermost account from your Jira account")
|
|
jira.AddCommand(disconnect)
|
|
|
|
assign := model.NewAutocompleteData("assign", "[issue]", "Change the assignee of a Jira issue")
|
|
assign.AddDynamicListArgument("List of issues is downloading from your Jira account", "/url/issue-key", true)
|
|
assign.AddDynamicListArgument("List of assignees is downloading from your Jira account", "/url/assignee", true)
|
|
jira.AddCommand(assign)
|
|
|
|
create := model.NewAutocompleteData("create", "[issue text]", "Create a new Issue")
|
|
create.AddTextArgument("This text is optional, will be inserted into the description field", "[text]", "")
|
|
jira.AddCommand(create)
|
|
|
|
transition := model.NewAutocompleteData("transition", "[issue]", "Change the state of a Jira issue")
|
|
assign.AddDynamicListArgument("List of issues is downloading from your Jira account", "/url/issue-key", true)
|
|
assign.AddDynamicListArgument("List of states is downloading from your Jira account", "/url/states", true)
|
|
jira.AddCommand(transition)
|
|
|
|
subscribe := model.NewAutocompleteData("subscribe", "", "Configure the Jira notifications sent to this channel")
|
|
jira.AddCommand(subscribe)
|
|
|
|
view := model.NewAutocompleteData("view", "[issue]", "View the details of a specific Jira issue")
|
|
assign.AddDynamicListArgument("List of issues is downloading from your Jira account", "/url/issue-key", true)
|
|
jira.AddCommand(view)
|
|
|
|
settings := model.NewAutocompleteData("settings", "", "Update your user settings")
|
|
notifications := model.NewAutocompleteData("notifications", "[on/off]", "Turn notifications on or off")
|
|
|
|
items := []model.AutocompleteListItem{
|
|
{
|
|
Hint: "Turn notifications on",
|
|
Item: "On",
|
|
},
|
|
{
|
|
Hint: "Turn notifications off",
|
|
Item: "Off",
|
|
},
|
|
}
|
|
notifications.AddStaticListArgument("Turn notifications on or off", true, items)
|
|
settings.AddCommand(notifications)
|
|
jira.AddCommand(settings)
|
|
|
|
timezone := model.NewAutocompleteData("timezone", "", "Update your timezone")
|
|
timezone.AddNamedTextArgument("zone", "Set timezone", "[UTC+07:00]", "", true)
|
|
jira.AddCommand(timezone)
|
|
|
|
install := model.NewAutocompleteData("install", "", "Connect Mattermost to a Jira instance")
|
|
install.RoleID = model.SYSTEM_ADMIN_ROLE_ID
|
|
cloud := model.NewAutocompleteData("cloud", "", "Connect to a Jira Cloud instance")
|
|
urlPattern := "https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)"
|
|
cloud.AddTextArgument("input URL of the Jira Cloud instance", "[URL]", urlPattern)
|
|
install.AddCommand(cloud)
|
|
server := model.NewAutocompleteData("server", "", "Connect to a Jira Server or Data Center instance")
|
|
server.AddTextArgument("input URL of the Jira Server or Data Center instance", "[URL]", urlPattern)
|
|
install.AddCommand(server)
|
|
jira.AddCommand(install)
|
|
|
|
uninstall := model.NewAutocompleteData("uninstall", "", "Disconnect Mattermost from a Jira instance")
|
|
uninstall.RoleID = model.SYSTEM_ADMIN_ROLE_ID
|
|
cloud = model.NewAutocompleteData("cloud", "", "Disconnect from a Jira Cloud instance")
|
|
cloud.AddTextArgument("input URL of the Jira Cloud instance", "[URL]", urlPattern)
|
|
uninstall.AddCommand(cloud)
|
|
server = model.NewAutocompleteData("server", "", "Disconnect from a Jira Server or Data Center instance")
|
|
server.AddTextArgument("input URL of the Jira Server or Data Center instance", "[URL]", urlPattern)
|
|
uninstall.AddCommand(server)
|
|
jira.AddCommand(uninstall)
|
|
|
|
return jira
|
|
}
|