diff options
author | Joram Wilander <jwawilander@gmail.com> | 2017-11-08 11:39:30 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-08 11:39:30 -0500 |
commit | 5ef72775213884f427e170ab6cc960f9544ae6cc (patch) | |
tree | 3b60bb3dacd49672ddb1179373f0c6eaff39904a /model | |
parent | 1d1998c6686e969a6d3fdfcdfa0592ea5945bb9c (diff) | |
download | chat-5ef72775213884f427e170ab6cc960f9544ae6cc.tar.gz chat-5ef72775213884f427e170ab6cc960f9544ae6cc.tar.bz2 chat-5ef72775213884f427e170ab6cc960f9544ae6cc.zip |
PLT-7709 Add UI settings to plugin manifest (#7794)
* Add UI settings to plugin manifest
* Add another test case
* Add options field to setting
* Updates per feedback
* Report diagnostics on if plugins have settings set
* Add regenerate_help_text field
Diffstat (limited to 'model')
-rw-r--r-- | model/manifest.go | 43 | ||||
-rw-r--r-- | model/manifest_test.go | 96 |
2 files changed, 131 insertions, 8 deletions
diff --git a/model/manifest.go b/model/manifest.go index 4352a2bd2..501153982 100644 --- a/model/manifest.go +++ b/model/manifest.go @@ -1,4 +1,4 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information. package model @@ -13,13 +13,42 @@ import ( "gopkg.in/yaml.v2" ) +const ( + PLUGIN_CONFIG_TYPE_TEXT = "text" + PLUGIN_CONFIG_TYPE_BOOL = "bool" + PLUGIN_CONFIG_TYPE_RADIO = "radio" + PLUGIN_CONFIG_TYPE_DROPDOWN = "dropdown" + PLUGIN_CONFIG_TYPE_GENERATED = "generated" +) + +type PluginOption struct { + DisplayName string `json:"display_name" yaml:"display_name"` + Value string `json:"value" yaml:"value"` +} + +type PluginSetting struct { + DisplayName string `json:"display_name" yaml:"display_name"` + Type string `json:"type" yaml:"type"` + HelpText string `json:"help_text" yaml:"help_text"` + RegenerateHelpText string `json:"regenerate_help_text,omitempty" yaml:"regenerate_help_text,omitempty"` + Default interface{} `json:"default" yaml:"default"` + Options []*PluginOption `json:"options,omitempty" yaml:"options,omitempty"` +} + +type PluginSettingsSchema struct { + Header string `json:"header" yaml:"header"` + Footer string `json:"footer" yaml:"footer"` + Settings map[string]*PluginSetting `json:"settings" yaml:"settings"` +} + type Manifest struct { - Id string `json:"id" yaml:"id"` - Name string `json:"name,omitempty" yaml:"name,omitempty"` - Description string `json:"description,omitempty" yaml:"description,omitempty"` - Version string `json:"version" yaml:"version"` - Backend *ManifestBackend `json:"backend,omitempty" yaml:"backend,omitempty"` - Webapp *ManifestWebapp `json:"webapp,omitempty" yaml:"webapp,omitempty"` + Id string `json:"id" yaml:"id"` + Name string `json:"name,omitempty" yaml:"name,omitempty"` + Description string `json:"description,omitempty" yaml:"description,omitempty"` + Version string `json:"version" yaml:"version"` + Backend *ManifestBackend `json:"backend,omitempty" yaml:"backend,omitempty"` + Webapp *ManifestWebapp `json:"webapp,omitempty" yaml:"webapp,omitempty"` + SettingsSchema *PluginSettingsSchema `json:"settings_schema,omitempty" yaml:"settings_schema,omitempty"` } type ManifestBackend struct { diff --git a/model/manifest_test.go b/model/manifest_test.go index 1ec43a217..3f174d3a7 100644 --- a/model/manifest_test.go +++ b/model/manifest_test.go @@ -1,3 +1,6 @@ +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + package model import ( @@ -64,6 +67,25 @@ func TestManifestUnmarshal(t *testing.T) { Webapp: &ManifestWebapp{ BundlePath: "thebundlepath", }, + SettingsSchema: &PluginSettingsSchema{ + Header: "theheadertext", + Footer: "thefootertext", + Settings: map[string]*PluginSetting{ + "thesetting": &PluginSetting{ + DisplayName: "thedisplayname", + Type: PLUGIN_CONFIG_TYPE_DROPDOWN, + HelpText: "thehelptext", + RegenerateHelpText: "theregeneratehelptext", + Options: []*PluginOption{ + &PluginOption{ + DisplayName: "theoptiondisplayname", + Value: "thevalue", + }, + }, + Default: "thedefault", + }, + }, + }, } var yamlResult Manifest @@ -73,6 +95,19 @@ backend: executable: theexecutable webapp: bundle_path: thebundlepath +settings_schema: + header: theheadertext + footer: thefootertext + settings: + thesetting: + display_name: thedisplayname + type: dropdown + help_text: thehelptext + regenerate_help_text: theregeneratehelptext + options: + - display_name: theoptiondisplayname + value: thevalue + default: thedefault `), &yamlResult)) assert.Equal(t, expected, yamlResult) @@ -84,7 +119,26 @@ webapp: }, "webapp": { "bundle_path": "thebundlepath" - } + }, + "settings_schema": { + "header": "theheadertext", + "footer": "thefootertext", + "settings": { + "thesetting": { + "display_name": "thedisplayname", + "type": "dropdown", + "help_text": "thehelptext", + "regenerate_help_text": "theregeneratehelptext", + "options": [ + { + "display_name": "theoptiondisplayname", + "value": "thevalue" + } + ], + "default": "thedefault" + } + } + } }`), &jsonResult)) assert.Equal(t, expected, jsonResult) } @@ -115,6 +169,25 @@ func TestManifestJson(t *testing.T) { Webapp: &ManifestWebapp{ BundlePath: "thebundlepath", }, + SettingsSchema: &PluginSettingsSchema{ + Header: "theheadertext", + Footer: "thefootertext", + Settings: map[string]*PluginSetting{ + "thesetting": &PluginSetting{ + DisplayName: "thedisplayname", + Type: PLUGIN_CONFIG_TYPE_DROPDOWN, + HelpText: "thehelptext", + RegenerateHelpText: "theregeneratehelptext", + Options: []*PluginOption{ + &PluginOption{ + DisplayName: "theoptiondisplayname", + Value: "thevalue", + }, + }, + Default: "thedefault", + }, + }, + }, } json := manifest.ToJson() @@ -159,6 +232,25 @@ func TestManifestClientManifest(t *testing.T) { Webapp: &ManifestWebapp{ BundlePath: "thebundlepath", }, + SettingsSchema: &PluginSettingsSchema{ + Header: "theheadertext", + Footer: "thefootertext", + Settings: map[string]*PluginSetting{ + "thesetting": &PluginSetting{ + DisplayName: "thedisplayname", + Type: PLUGIN_CONFIG_TYPE_DROPDOWN, + HelpText: "thehelptext", + RegenerateHelpText: "theregeneratehelptext", + Options: []*PluginOption{ + &PluginOption{ + DisplayName: "theoptiondisplayname", + Value: "thevalue", + }, + }, + Default: "thedefault", + }, + }, + }, } sanitized := manifest.ClientManifest() @@ -166,6 +258,7 @@ func TestManifestClientManifest(t *testing.T) { assert.NotEmpty(t, sanitized.Id) assert.NotEmpty(t, sanitized.Version) assert.NotEmpty(t, sanitized.Webapp) + assert.NotEmpty(t, sanitized.SettingsSchema) assert.Empty(t, sanitized.Name) assert.Empty(t, sanitized.Description) assert.Empty(t, sanitized.Backend) @@ -176,4 +269,5 @@ func TestManifestClientManifest(t *testing.T) { assert.NotEmpty(t, manifest.Name) assert.NotEmpty(t, manifest.Description) assert.NotEmpty(t, manifest.Backend) + assert.NotEmpty(t, manifest.SettingsSchema) } |