summaryrefslogtreecommitdiffstats
path: root/api4/channel_test.go
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2017-02-02 09:04:36 -0500
committerGitHub <noreply@github.com>2017-02-02 09:04:36 -0500
commit609d4f43d9eef504d852fbf02af5473b0d1424c8 (patch)
tree63fe24f08d5364501d3afed7c44b6739719d86e3 /api4/channel_test.go
parent2ac4f36587b8b217dcfd53e67c650c8ad27c75df (diff)
downloadchat-609d4f43d9eef504d852fbf02af5473b0d1424c8.tar.gz
chat-609d4f43d9eef504d852fbf02af5473b0d1424c8.tar.bz2
chat-609d4f43d9eef504d852fbf02af5473b0d1424c8.zip
Implement POST /channels endpoint for APIv4 (#5241)
Diffstat (limited to 'api4/channel_test.go')
-rw-r--r--api4/channel_test.go169
1 files changed, 169 insertions, 0 deletions
diff --git a/api4/channel_test.go b/api4/channel_test.go
new file mode 100644
index 000000000..e3d0a85bd
--- /dev/null
+++ b/api4/channel_test.go
@@ -0,0 +1,169 @@
+// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+package api4
+
+import (
+ "net/http"
+ "strconv"
+ "testing"
+
+ "github.com/mattermost/platform/model"
+ "github.com/mattermost/platform/utils"
+)
+
+func TestCreateChannel(t *testing.T) {
+ th := Setup().InitBasic().InitSystemAdmin()
+ Client := th.Client
+ team := th.BasicTeam
+
+ channel := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_OPEN, TeamId: team.Id}
+ private := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
+
+ rchannel, resp := Client.CreateChannel(channel)
+ CheckNoError(t, resp)
+
+ if rchannel.Name != channel.Name {
+ t.Fatal("names did not match")
+ }
+
+ if rchannel.DisplayName != channel.DisplayName {
+ t.Fatal("display names did not match")
+ }
+
+ if rchannel.TeamId != channel.TeamId {
+ t.Fatal("team ids did not match")
+ }
+
+ rprivate, resp := Client.CreateChannel(private)
+ CheckNoError(t, resp)
+
+ if rprivate.Name != private.Name {
+ t.Fatal("names did not match")
+ }
+
+ if rprivate.Type != model.CHANNEL_PRIVATE {
+ t.Fatal("wrong channel type")
+ }
+
+ if rprivate.CreatorId != th.BasicUser.Id {
+ t.Fatal("wrong creator id")
+ }
+
+ _, resp = Client.CreateChannel(channel)
+ CheckErrorMessage(t, resp, "store.sql_channel.save_channel.exists.app_error")
+ CheckBadRequestStatus(t, resp)
+
+ direct := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_DIRECT, TeamId: team.Id}
+ _, resp = Client.CreateChannel(direct)
+ CheckErrorMessage(t, resp, "api.channel.create_channel.direct_channel.app_error")
+ CheckBadRequestStatus(t, resp)
+
+ Client.Logout()
+ _, resp = Client.CreateChannel(channel)
+ CheckUnauthorizedStatus(t, resp)
+
+ userNotOnTeam := th.CreateUser()
+ Client.Login(userNotOnTeam.Email, userNotOnTeam.Password)
+
+ _, resp = Client.CreateChannel(channel)
+ CheckForbiddenStatus(t, resp)
+
+ _, resp = Client.CreateChannel(private)
+ CheckForbiddenStatus(t, resp)
+
+ th.LoginBasic()
+
+ // Check permissions with policy config changes
+ isLicensed := utils.IsLicensed
+ license := utils.License
+ restrictPublicChannel := *utils.Cfg.TeamSettings.RestrictPublicChannelManagement
+ restrictPrivateChannel := *utils.Cfg.TeamSettings.RestrictPrivateChannelManagement
+ defer func() {
+ *utils.Cfg.TeamSettings.RestrictPublicChannelManagement = restrictPublicChannel
+ *utils.Cfg.TeamSettings.RestrictPrivateChannelManagement = restrictPrivateChannel
+ utils.IsLicensed = isLicensed
+ utils.License = license
+ utils.SetDefaultRolesBasedOnConfig()
+ }()
+ *utils.Cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_ALL
+ *utils.Cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_ALL
+ utils.SetDefaultRolesBasedOnConfig()
+ utils.IsLicensed = true
+ utils.License = &model.License{Features: &model.Features{}}
+ utils.License.Features.SetDefaults()
+
+ channel.Name = GenerateTestChannelName()
+ _, resp = Client.CreateChannel(channel)
+ CheckNoError(t, resp)
+
+ private.Name = GenerateTestChannelName()
+ _, resp = Client.CreateChannel(private)
+ CheckNoError(t, resp)
+
+ *utils.Cfg.TeamSettings.RestrictPublicChannelCreation = model.PERMISSIONS_TEAM_ADMIN
+ *utils.Cfg.TeamSettings.RestrictPrivateChannelCreation = model.PERMISSIONS_TEAM_ADMIN
+ utils.SetDefaultRolesBasedOnConfig()
+
+ _, resp = Client.CreateChannel(channel)
+ CheckForbiddenStatus(t, resp)
+
+ _, resp = Client.CreateChannel(private)
+ CheckForbiddenStatus(t, resp)
+
+ th.LoginTeamAdmin()
+
+ channel.Name = GenerateTestChannelName()
+ _, resp = Client.CreateChannel(channel)
+ CheckNoError(t, resp)
+
+ private.Name = GenerateTestChannelName()
+ _, resp = Client.CreateChannel(private)
+ CheckNoError(t, resp)
+
+ channel.Name = GenerateTestChannelName()
+ _, resp = th.SystemAdminClient.CreateChannel(channel)
+ CheckNoError(t, resp)
+
+ private.Name = GenerateTestChannelName()
+ _, resp = th.SystemAdminClient.CreateChannel(private)
+ CheckNoError(t, resp)
+
+ *utils.Cfg.TeamSettings.RestrictPublicChannelCreation = model.PERMISSIONS_SYSTEM_ADMIN
+ *utils.Cfg.TeamSettings.RestrictPrivateChannelCreation = model.PERMISSIONS_SYSTEM_ADMIN
+ utils.SetDefaultRolesBasedOnConfig()
+
+ th.LoginBasic()
+
+ _, resp = Client.CreateChannel(channel)
+ CheckForbiddenStatus(t, resp)
+
+ _, resp = Client.CreateChannel(private)
+ CheckForbiddenStatus(t, resp)
+
+ th.LoginTeamAdmin()
+
+ _, resp = Client.CreateChannel(channel)
+ CheckForbiddenStatus(t, resp)
+
+ _, resp = Client.CreateChannel(private)
+ CheckForbiddenStatus(t, resp)
+
+ channel.Name = GenerateTestChannelName()
+ _, resp = th.SystemAdminClient.CreateChannel(channel)
+ CheckNoError(t, resp)
+
+ private.Name = GenerateTestChannelName()
+ _, resp = th.SystemAdminClient.CreateChannel(private)
+ CheckNoError(t, resp)
+
+ if r, err := Client.DoApiPost("/channels", "garbage"); err == nil {
+ t.Fatal("should have errored")
+ } else {
+ if r.StatusCode != http.StatusBadRequest {
+ t.Log("actual: " + strconv.Itoa(r.StatusCode))
+ t.Log("expected: " + strconv.Itoa(http.StatusBadRequest))
+ t.Fatal("wrong status code")
+ }
+ }
+}