diff --git a/app/plugin_api_test.go b/app/plugin_api_test.go index 39ea854259..5948e7cd59 100644 --- a/app/plugin_api_test.go +++ b/app/plugin_api_test.go @@ -70,10 +70,21 @@ func setDefaultPluginConfig(th *TestHelper, pluginId string) { func setupMultiPluginApiTest(t *testing.T, pluginCodes []string, pluginManifests []string, pluginIds []string, app *App) string { pluginDir, err := ioutil.TempDir("", "") require.NoError(t, err) + t.Cleanup(func() { + err = os.RemoveAll(pluginDir) + if err != nil { + t.Logf("Failed to cleanup pluginDir %s", err.Error()) + } + }) + webappPluginDir, err := ioutil.TempDir("", "") require.NoError(t, err) - defer os.RemoveAll(pluginDir) - defer os.RemoveAll(webappPluginDir) + t.Cleanup(func() { + err = os.RemoveAll(webappPluginDir) + if err != nil { + t.Logf("Failed to cleanup webappPluginDir %s", err.Error()) + } + }) env, err := plugin.NewEnvironment(app.NewPluginAPI, pluginDir, webappPluginDir, app.Log(), nil) require.NoError(t, err) @@ -90,6 +101,12 @@ func setupMultiPluginApiTest(t *testing.T, pluginCodes []string, pluginManifests require.Nil(t, reterr) require.NotNil(t, manifest) require.True(t, activated) + + app.UpdateConfig(func(cfg *model.Config) { + cfg.PluginSettings.PluginStates[pluginId] = &model.PluginState{ + Enable: true, + } + }) } app.SetPluginsEnvironment(env) diff --git a/app/plugin_api_tests/test_get_plugin_status_plugin/main.go b/app/plugin_api_tests/test_get_plugin_status_plugin/main.go new file mode 100644 index 0000000000..f81f3da448 --- /dev/null +++ b/app/plugin_api_tests/test_get_plugin_status_plugin/main.go @@ -0,0 +1,39 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +package main + +import ( + "github.com/mattermost/mattermost-server/v5/app/plugin_api_tests" + "github.com/mattermost/mattermost-server/v5/model" + "github.com/mattermost/mattermost-server/v5/plugin" +) + +type MyPlugin struct { + plugin.MattermostPlugin + configuration plugin_api_tests.BasicConfig +} + +func (p *MyPlugin) OnConfigurationChange() error { + if err := p.API.LoadPluginConfiguration(&p.configuration); err != nil { + return err + } + return nil +} + +func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { + status, err := p.API.GetPluginStatus("test_get_plugin_status_plugin") + if err != nil { + return nil, err.Error() + } + + if status.State != model.PluginStateRunning { + return nil, "State is not running" + } + + return nil, "OK" +} + +func main() { + plugin.ClientMain(&MyPlugin{}) +} diff --git a/app/plugin_statuses.go b/app/plugin_statuses.go index 6318ef3966..79245cb785 100644 --- a/app/plugin_statuses.go +++ b/app/plugin_statuses.go @@ -21,13 +21,17 @@ func (s *Server) GetPluginStatus(id string) (*model.PluginStatus, *model.AppErro return nil, model.NewAppError("GetPluginStatus", "app.plugin.get_statuses.app_error", nil, err.Error(), http.StatusInternalServerError) } - // Add our cluster ID for _, status := range pluginStatuses { - if status.PluginId == id && s.Cluster != nil { - status.ClusterId = s.Cluster.GetClusterId() + if status.PluginId == id { + // Add our cluster ID + if s.Cluster != nil { + status.ClusterId = s.Cluster.GetClusterId() + } + return status, nil } } + return nil, model.NewAppError("GetPluginStatus", "app.plugin.not_installed.app_error", nil, "", http.StatusNotFound) }