summaryrefslogtreecommitdiffstats
path: root/app/plugin_api_test.go
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2018-07-18 16:35:12 -0700
committerGitHub <noreply@github.com>2018-07-18 16:35:12 -0700
commit5a2d46c6cbf992c8a8f155b27eb3b60807d8aed2 (patch)
tree621ce2faf53d998a783891d31bbd46ec40772338 /app/plugin_api_test.go
parent309a3dda605dbda6b9f6f769ea386764671ea5d3 (diff)
downloadchat-5a2d46c6cbf992c8a8f155b27eb3b60807d8aed2.tar.gz
chat-5a2d46c6cbf992c8a8f155b27eb3b60807d8aed2.tar.bz2
chat-5a2d46c6cbf992c8a8f155b27eb3b60807d8aed2.zip
MM-11028 Adding some plugin tests. (#9103)
* Rearranging plugin mocks and moving some common test code out. * Adding tests. * Fixing tests after GoDoc cleanup changes.
Diffstat (limited to 'app/plugin_api_test.go')
-rw-r--r--app/plugin_api_test.go149
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)
+}