diff options
Diffstat (limited to 'app/plugin_api_test.go')
-rw-r--r-- | app/plugin_api_test.go | 149 |
1 files changed, 147 insertions, 2 deletions
diff --git a/app/plugin_api_test.go b/app/plugin_api_test.go index 56507a8f7..618805bb6 100644 --- a/app/plugin_api_test.go +++ b/app/plugin_api_test.go @@ -4,14 +4,38 @@ package app import ( + "encoding/json" + "io/ioutil" + "os" + "path/filepath" "testing" + "github.com/mattermost/mattermost-server/model" + "github.com/mattermost/mattermost-server/plugin" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - - "github.com/mattermost/mattermost-server/model" ) +func setupPluginApiTest(t *testing.T, pluginCode string, pluginManifest string, pluginId string, app *App) { + pluginDir, err := ioutil.TempDir("", "") + require.NoError(t, err) + webappPluginDir, err := ioutil.TempDir("", "") + require.NoError(t, err) + defer os.RemoveAll(pluginDir) + defer os.RemoveAll(webappPluginDir) + + env, err := plugin.NewEnvironment(app.NewPluginAPI, pluginDir, webappPluginDir, app.Log) + require.NoError(t, err) + + backend := filepath.Join(pluginDir, pluginId, "backend.exe") + compileGo(t, pluginCode, backend) + + ioutil.WriteFile(filepath.Join(pluginDir, pluginId, "plugin.json"), []byte(pluginManifest), 0600) + env.Activate(pluginId) + + app.Plugins = env +} + func TestPluginAPIUpdateUserStatus(t *testing.T) { th := Setup().InitBasic() defer th.TearDown() @@ -30,3 +54,124 @@ func TestPluginAPIUpdateUserStatus(t *testing.T) { assert.NotNil(t, err) assert.Nil(t, status) } + +func TestPluginAPILoadPluginConfiguration(t *testing.T) { + th := Setup().InitBasic() + defer th.TearDown() + + var pluginJson map[string]interface{} + if err := json.Unmarshal([]byte(`{"mystringsetting": "str", "MyIntSetting": 32, "myboolsetting": true}`), &pluginJson); err != nil { + t.Fatal(err) + } + th.App.UpdateConfig(func(cfg *model.Config) { + cfg.PluginSettings.Plugins["testloadpluginconfig"] = pluginJson + }) + setupPluginApiTest(t, + ` + package main + + import ( + "github.com/mattermost/mattermost-server/plugin" + "github.com/mattermost/mattermost-server/model" + "fmt" + ) + + type MyPlugin struct { + plugin.MattermostPlugin + + MyStringSetting string + MyIntSetting int + MyBoolSetting bool + } + + func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { + return nil, fmt.Sprintf("%v%v%v", p.MyStringSetting, p.MyIntSetting, p.MyBoolSetting) + } + + func main() { + plugin.ClientMain(&MyPlugin{}) + } + `, + `{"id": "testloadpluginconfig", "backend": {"executable": "backend.exe"}, "settings_schema": { + "settings": [ + { + "key": "MyStringSetting", + "type": "text" + }, + { + "key": "MyIntSetting", + "type": "text" + }, + { + "key": "MyBoolSetting", + "type": "bool" + } + ] + }}`, "testloadpluginconfig", th.App) + hooks, err := th.App.Plugins.HooksForPlugin("testloadpluginconfig") + assert.NoError(t, err) + _, ret := hooks.MessageWillBePosted(nil, nil) + assert.Equal(t, "str32true", ret) +} + +func TestPluginAPILoadPluginConfigurationDefaults(t *testing.T) { + th := Setup().InitBasic() + defer th.TearDown() + + var pluginJson map[string]interface{} + if err := json.Unmarshal([]byte(`{"mystringsetting": "override"}`), &pluginJson); err != nil { + t.Fatal(err) + } + th.App.UpdateConfig(func(cfg *model.Config) { + cfg.PluginSettings.Plugins["testloadpluginconfig"] = pluginJson + }) + setupPluginApiTest(t, + ` + package main + + import ( + "github.com/mattermost/mattermost-server/plugin" + "github.com/mattermost/mattermost-server/model" + "fmt" + ) + + type MyPlugin struct { + plugin.MattermostPlugin + + MyStringSetting string + MyIntSetting int + MyBoolSetting bool + } + + func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { + return nil, fmt.Sprintf("%v%v%v", p.MyStringSetting, p.MyIntSetting, p.MyBoolSetting) + } + + func main() { + plugin.ClientMain(&MyPlugin{}) + } + `, + `{"id": "testloadpluginconfig", "backend": {"executable": "backend.exe"}, "settings_schema": { + "settings": [ + { + "key": "MyStringSetting", + "type": "text", + "default": "notthis" + }, + { + "key": "MyIntSetting", + "type": "text", + "default": 35 + }, + { + "key": "MyBoolSetting", + "type": "bool", + "default": true + } + ] + }}`, "testloadpluginconfig", th.App) + hooks, err := th.App.Plugins.HooksForPlugin("testloadpluginconfig") + assert.NoError(t, err) + _, ret := hooks.MessageWillBePosted(nil, nil) + assert.Equal(t, "override35true", ret) +} |