github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/model/command_autocomplete_test.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package model
     5  
     6  import (
     7  	"net/url"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestAutocompleteData(t *testing.T) {
    14  	ad := NewAutocompleteData("jira", "", "Avaliable commands:")
    15  	assert.Nil(t, ad.IsValid())
    16  	ad.RoleID = "some_id"
    17  	assert.NotNil(t, ad.IsValid())
    18  	ad.RoleID = SYSTEM_ADMIN_ROLE_ID
    19  	assert.Nil(t, ad.IsValid())
    20  	ad.AddDynamicListArgument("help", "/some/url", true)
    21  	assert.Nil(t, ad.IsValid())
    22  	ad.AddNamedTextArgument("name", "help", "[text]", "", true)
    23  	assert.Nil(t, ad.IsValid())
    24  
    25  	ad = getAutocompleteData()
    26  	assert.Nil(t, ad.IsValid())
    27  	command := NewAutocompleteData("", "", "")
    28  	ad.AddCommand(command)
    29  	assert.NotNil(t, ad.IsValid())
    30  
    31  	ad = getAutocompleteData()
    32  	command = NewAutocompleteData("disconnect", "", "disconnect")
    33  	command.AddTextArgument("help", "[text]", "")
    34  	command.AddNamedTextArgument("some", "help", "[text]", "", true)
    35  	ad.AddCommand(command)
    36  	assert.Nil(t, ad.IsValid())
    37  
    38  	ad = getAutocompleteData()
    39  	command = NewAutocompleteData("disconnect", "", "disconnect")
    40  	command.AddDynamicListArgument("help", "valid_url", true)
    41  	ad.AddCommand(command)
    42  	assert.Nil(t, ad.IsValid())
    43  
    44  	ad = getAutocompleteData()
    45  	command = NewAutocompleteData("disconnect", "", "disconnect")
    46  	command.AddDynamicListArgument("help", "/valid/url", true)
    47  	items := []AutocompleteListItem{
    48  		{
    49  			Hint:     "help",
    50  			Item:     "",
    51  			HelpText: "text",
    52  		},
    53  	}
    54  	command.AddStaticListArgument("help", true, items)
    55  	ad.AddCommand(command)
    56  	assert.NotNil(t, ad.IsValid())
    57  
    58  	ad = getAutocompleteData()
    59  	ad.AddCommand(nil)
    60  	assert.NotNil(t, ad.IsValid())
    61  
    62  	ad = getAutocompleteData()
    63  	command = NewAutocompleteData("Disconnect", "", "")
    64  	ad.AddCommand(command)
    65  	assert.NotNil(t, ad.IsValid())
    66  }
    67  
    68  func TestAutocompleteDataJSON(t *testing.T) {
    69  	ad := getAutocompleteData()
    70  	b, err := ad.ToJSON()
    71  	assert.Nil(t, err)
    72  	ad2, err := AutocompleteDataFromJSON(b)
    73  	assert.Nil(t, err)
    74  	assert.True(t, ad2.Equals(ad))
    75  }
    76  
    77  func getAutocompleteData() *AutocompleteData {
    78  	ad := NewAutocompleteData("jira", "", "Avaliable commands:")
    79  	ad.RoleID = SYSTEM_USER_ROLE_ID
    80  	command := NewAutocompleteData("connect", "", "Connect to mattermost")
    81  	command.RoleID = SYSTEM_ADMIN_ROLE_ID
    82  	items := []AutocompleteListItem{
    83  		{
    84  			Hint:     "arg1",
    85  			Item:     "help1",
    86  			HelpText: "text1",
    87  		}, {
    88  			Hint:     "arg2",
    89  			Item:     "help2",
    90  			HelpText: "text2",
    91  		},
    92  	}
    93  	command.AddStaticListArgument("help", true, items)
    94  	command.AddNamedTextArgument("some", "help", "[text]", "", true)
    95  	command.AddNamedDynamicListArgument("other", "help", "/other/url", true)
    96  	ad.AddCommand(command)
    97  	return ad
    98  }
    99  
   100  func TestUpdateRelativeURLsForPluginCommands(t *testing.T) {
   101  	ad := getAutocompleteData()
   102  	baseURL, _ := url.Parse("http://localhost:8065/plugins/com.mattermost.demo-plugin")
   103  	err := ad.UpdateRelativeURLsForPluginCommands(baseURL)
   104  	assert.Nil(t, err)
   105  	arg, ok := ad.SubCommands[0].Arguments[2].Data.(*AutocompleteDynamicListArg)
   106  	assert.True(t, ok)
   107  	assert.Equal(t, "http://localhost:8065/plugins/com.mattermost.demo-plugin/other/url", arg.FetchURL)
   108  }