Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Interactive Dialogs example #28

Merged
merged 20 commits into from
Jun 22, 2019
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ endif

## Creates a coverage report for the server code.
.PHONY: coverage
coverage: server/.depensure webapp/.npminstall
coverage: webapp/.npminstall
ifneq ($(HAS_SERVER),)
$(GO) test -race -coverprofile=server/coverage.txt ./server/...
$(GO) tool cover -html=server/coverage.txt
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/mattermost/mattermost-plugin-demo
go 1.12

require (
github.com/blang/semver v3.5.1+incompatible
github.com/blang/semver v3.6.1+incompatible
github.com/go-ldap/ldap v3.0.3+incompatible // indirect
github.com/hashicorp/go-hclog v0.9.0 // indirect
github.com/lib/pq v1.1.1 // indirect
Expand Down
30 changes: 2 additions & 28 deletions go.sum

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions server/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ This demo implementation logs a message to the demo channel whenever a user leav

## [command\_hooks.go](command_hooks.go)


### ExecuteCommand

This demo implementation responds to a `/demo_plugin` command, allowing the user to enable
Expand All @@ -64,6 +65,8 @@ UpdateEphemeralPost, and DeleteEphemeralPost.

The `/crash` command demonstrates crashing the plugin (and the server recovering/restarting the plugin).

The `/dialog` command demonstrates [Interactive Dialogs](https://docs.mattermost.com/developer/interactive-dialogs.html). Use `/dialog help` for its usage in this demo plugin.

## [http\_hooks.go](http_hooks.go)

### ServeHTTP
Expand Down
21 changes: 5 additions & 16 deletions server/activate_hooks.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"github.com/pkg/errors"
)

const minimumServerVersion = "5.11.0"
const minimumServerVersion = "5.12.0"

func (p *Plugin) checkServerVersion() error {
serverVersion, err := semver.Parse(p.API.GetServerVersion())
Expand All @@ -34,6 +34,10 @@ func (p *Plugin) OnActivate() error {

configuration := p.getConfiguration()

if err := p.registerCommands(); err != nil {
return errors.Wrap(err, "failed to register commands")
}

teams, err := p.API.GetTeams()
if err != nil {
return errors.Wrap(err, "failed to query teams OnActivate")
Expand All @@ -50,10 +54,6 @@ func (p *Plugin) OnActivate() error {
if err := p.postPluginMessage(team.Id, msg); err != nil {
return errors.Wrap(err, "failed to post OnActivate message")
}

if err := p.registerCommand(team.Id); err != nil {
return errors.Wrap(err, "failed to register command")
}
}

return nil
Expand Down Expand Up @@ -82,17 +82,6 @@ func (p *Plugin) OnDeactivate() error {
if err := p.postPluginMessage(team.Id, msg); err != nil {
return errors.Wrap(err, "failed to post OnDeactivate message")
}

if err := p.API.UnregisterCommand(team.Id, CommandTriggerPlugin); err != nil {
return errors.Wrap(err, "failed to unregister command")
}
if err := p.API.UnregisterCommand(team.Id, CommandTriggerEphemeral); err != nil {
return errors.Wrap(err, "failed to unregister command")
}

if err := p.API.UnregisterCommand(team.Id, CommandTriggerCrash); err != nil {
return errors.Wrap(err, "failed to unregister command")
}
}

return nil
Expand Down
90 changes: 42 additions & 48 deletions server/activate_hooks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@ package main
import (
"testing"

"github.com/blang/semver"
"github.com/mattermost/mattermost-server/model"
"github.com/mattermost/mattermost-server/plugin/plugintest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)

func TestOnActivate(t *testing.T) {
Expand All @@ -17,87 +19,91 @@ func TestOnActivate(t *testing.T) {
}

for name, test := range map[string]struct {
SetupAPI func() *plugintest.API
SetupAPI func(*plugintest.API) *plugintest.API
ShouldError bool
}{
"GetServerVersion not implemented, returns empty string": {
SetupAPI: func() *plugintest.API {
api := &plugintest.API{}
SetupAPI: func(api *plugintest.API) *plugintest.API {
api.On("GetServerVersion").Return("")

return api
},
ShouldError: true,
},
"below minimum supported version: 5.10.9": {
SetupAPI: func() *plugintest.API {
api := &plugintest.API{}
api.On("GetServerVersion").Return("5.10.9")
},
"lesser minor version than minimumServerVersion": {
SetupAPI: func(api *plugintest.API) *plugintest.API {
v := semver.MustParse(minimumServerVersion)
if v.Minor == 0 {
v.Major--
v.Minor = 0
v.Patch = 0
} else {
v.Minor--
v.Patch = 0
}
api.On("GetServerVersion").Return(v.String())

return api
},
ShouldError: true,
},
"minimum supported version: 5.11.0, but GetTeams fails": {
SetupAPI: func() *plugintest.API {
api := &plugintest.API{}
api.On("GetServerVersion").Return("5.11.0")
api.On("GetTeams").Return(nil, &model.AppError{})
"minimum supported version fullfiled, but RegisterCommand fails": {
SetupAPI: func(api *plugintest.API) *plugintest.API {
api.On("GetServerVersion").Return(minimumServerVersion)
api.On("RegisterCommand", mock.AnythingOfType("*model.Command")).Return(&model.AppError{})

return api
},
ShouldError: true,
},
"minimum supported version: 5.11.0, but CreatePost fails": {
SetupAPI: func() *plugintest.API {
api := &plugintest.API{}
api.On("GetServerVersion").Return("5.11.0")
api.On("GetTeams").Return([]*model.Team{&model.Team{Id: teamId}}, nil)
api.On("CreatePost", mock.AnythingOfType("*model.Post")).Return(nil, &model.AppError{})
"minimum supported version fullfiled, but GetTeams fails": {
SetupAPI: func(api *plugintest.API) *plugintest.API {
api.On("GetServerVersion").Return(minimumServerVersion)
api.On("RegisterCommand", mock.AnythingOfType("*model.Command")).Return(nil)
api.On("GetTeams").Return(nil, &model.AppError{})

return api
},
ShouldError: true,
},
"minimum supported version: 5.11.0, but RegisterCommand fails": {
SetupAPI: func() *plugintest.API {
api := &plugintest.API{}
api.On("GetServerVersion").Return("5.11.0")
"minimum supported version fullfiled, but CreatePost fails": {
SetupAPI: func(api *plugintest.API) *plugintest.API {
api.On("GetServerVersion").Return(minimumServerVersion)
api.On("RegisterCommand", mock.AnythingOfType("*model.Command")).Return(nil)
api.On("GetTeams").Return([]*model.Team{&model.Team{Id: teamId}}, nil)
api.On("CreatePost", mock.AnythingOfType("*model.Post")).Return(&model.Post{}, nil)
api.On("RegisterCommand", mock.AnythingOfType("*model.Command")).Return(&model.AppError{})
api.On("CreatePost", mock.AnythingOfType("*model.Post")).Return(nil, &model.AppError{})

return api
},
ShouldError: true,
},
"minimum supported version: 5.11.0": {
SetupAPI: func() *plugintest.API {
api := &plugintest.API{}
api.On("GetServerVersion").Return("5.11.0")
"minimum supported version fullfiled": {
SetupAPI: func(api *plugintest.API) *plugintest.API {
api.On("GetServerVersion").Return(minimumServerVersion)
api.On("RegisterCommand", mock.AnythingOfType("*model.Command")).Return(nil)
api.On("GetTeams").Return([]*model.Team{&model.Team{Id: teamId}}, nil)
api.On("CreatePost", mock.AnythingOfType("*model.Post")).Return(&model.Post{}, nil)
api.On("RegisterCommand", mock.AnythingOfType("*model.Command")).Return(nil)

return api
},
ShouldError: false,
},
"newer supported version: 5.13.0": {
SetupAPI: func() *plugintest.API {
api := &plugintest.API{}
api.On("GetServerVersion").Return("5.13.0")
"greater minor version than minimumServerVersion": {
SetupAPI: func(api *plugintest.API) *plugintest.API {
v := semver.MustParse(minimumServerVersion)
require.Nil(t, v.IncrementMinor())
api.On("GetServerVersion").Return(v.String())
api.On("RegisterCommand", mock.AnythingOfType("*model.Command")).Return(nil)
api.On("GetTeams").Return([]*model.Team{&model.Team{Id: teamId}}, nil)
api.On("CreatePost", mock.AnythingOfType("*model.Post")).Return(&model.Post{}, nil)
api.On("RegisterCommand", mock.AnythingOfType("*model.Command")).Return(nil)

return api
},
ShouldError: false,
},
} {
t.Run(name, func(t *testing.T) {
api := test.SetupAPI()
api := test.SetupAPI(&plugintest.API{})
defer api.AssertExpectations(t)

p := Plugin{}
Expand Down Expand Up @@ -132,7 +138,6 @@ func TestOnDeactivate(t *testing.T) {
api := &plugintest.API{}
api.On("GetTeams").Return([]*model.Team{&model.Team{Id: teamId}}, nil)
api.On("CreatePost", mock.AnythingOfType("*model.Post")).Return(&model.Post{}, nil)
api.On("UnregisterCommand", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(nil)

return api
},
Expand All @@ -157,17 +162,6 @@ func TestOnDeactivate(t *testing.T) {
},
ShouldError: true,
},
"RegisterCommand fails": {
SetupAPI: func() *plugintest.API {
api := &plugintest.API{}
api.On("GetTeams").Return([]*model.Team{&model.Team{Id: teamId}}, nil)
api.On("CreatePost", mock.AnythingOfType("*model.Post")).Return(&model.Post{}, nil)
api.On("UnregisterCommand", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(&model.AppError{})

return api
},
ShouldError: true,
},
} {
t.Run(name, func(t *testing.T) {
api := test.SetupAPI()
Expand Down
Loading