[MM-11861] Design & implement a better way for plugins to update their own configuration (#9712)
* [MM-11861] Design & implement a better way for plugins to update their own configuration Added GetPluginConfig and SavePluginConfig plugin APIs. Added test cases for testing new APIs. * Fixed gofmt error * Minor changes requested in PR
Этот коммит содержится в:
коммит произвёл
Jesse Hallam
родитель
a50e8ac5b9
Коммит
7a6f957638
@@ -63,6 +63,84 @@ func TestPluginAPIUpdateUserStatus(t *testing.T) {
|
||||
assert.Nil(t, status)
|
||||
}
|
||||
|
||||
func TestPluginAPISavePluginConfig(t *testing.T) {
|
||||
th := Setup().InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
manifest := &model.Manifest{
|
||||
Id: "pluginid",
|
||||
SettingsSchema: &model.PluginSettingsSchema{
|
||||
Settings: []*model.PluginSetting{
|
||||
{Key: "MyStringSetting", Type: "text"},
|
||||
{Key: "MyIntSetting", Type: "text"},
|
||||
{Key: "MyBoolSetting", Type: "bool"},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
api := NewPluginAPI(th.App, manifest)
|
||||
|
||||
pluginConfigJsonString := `{"mystringsetting": "str", "MyIntSetting": 32, "myboolsetting": true}`
|
||||
|
||||
var pluginConfig map[string]interface{}
|
||||
if err := json.Unmarshal([]byte(pluginConfigJsonString), &pluginConfig); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := api.SavePluginConfig(pluginConfig); err != nil{
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
type Configuration struct {
|
||||
MyStringSetting string
|
||||
MyIntSetting int
|
||||
MyBoolSetting bool
|
||||
}
|
||||
|
||||
savedConfiguration := new(Configuration)
|
||||
if err := api.LoadPluginConfiguration(savedConfiguration); err != nil{
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
expectedConfiguration := new(Configuration)
|
||||
if err := json.Unmarshal([]byte(pluginConfigJsonString), &expectedConfiguration); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
assert.Equal(t, expectedConfiguration, savedConfiguration)
|
||||
}
|
||||
|
||||
func TestPluginAPIGetPluginConfig(t *testing.T) {
|
||||
th := Setup().InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
manifest := &model.Manifest{
|
||||
Id: "pluginid",
|
||||
SettingsSchema: &model.PluginSettingsSchema{
|
||||
Settings: []*model.PluginSetting{
|
||||
{Key: "MyStringSetting", Type: "text"},
|
||||
{Key: "MyIntSetting", Type: "text"},
|
||||
{Key: "MyBoolSetting", Type: "bool"},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
api := NewPluginAPI(th.App, manifest)
|
||||
|
||||
pluginConfigJsonString := `{"mystringsetting": "str", "MyIntSetting": 32, "myboolsetting": true}`
|
||||
var pluginConfig map[string]interface{}
|
||||
|
||||
if err := json.Unmarshal([]byte(pluginConfigJsonString), &pluginConfig); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
cfg.PluginSettings.Plugins["pluginid"] = pluginConfig
|
||||
})
|
||||
|
||||
savedPluginConfig := api.GetPluginConfig()
|
||||
assert.Equal(t, pluginConfig, savedPluginConfig)
|
||||
}
|
||||
|
||||
func TestPluginAPILoadPluginConfiguration(t *testing.T) {
|
||||
th := Setup().InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
Ссылка в новой задаче
Block a user