github.com/psyb0t/mattermost-server@v4.6.1-0.20180125161845-5503a1351abf+incompatible/api/channel_test.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package api
     5  
     6  import (
     7  	"net/http"
     8  	"strings"
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/mattermost/mattermost-server/model"
    13  	"github.com/mattermost/mattermost-server/store"
    14  	"github.com/mattermost/mattermost-server/store/sqlstore"
    15  	"github.com/mattermost/mattermost-server/utils"
    16  )
    17  
    18  func TestCreateChannel(t *testing.T) {
    19  	th := Setup().InitBasic().InitSystemAdmin()
    20  	defer th.TearDown()
    21  
    22  	Client := th.BasicClient
    23  	SystemAdminClient := th.SystemAdminClient
    24  	team := th.BasicTeam
    25  	th.LoginBasic2()
    26  	team2 := th.CreateTeam(th.BasicClient)
    27  	th.LoginBasic()
    28  	th.BasicClient.SetTeamId(team.Id)
    29  
    30  	channel := model.Channel{DisplayName: "Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
    31  	rchannel, err := Client.CreateChannel(&channel)
    32  	if err != nil {
    33  		t.Fatal(err)
    34  	}
    35  
    36  	if rchannel.Data.(*model.Channel).Name != channel.Name {
    37  		t.Fatal("full name didn't match")
    38  	}
    39  
    40  	rget := Client.Must(Client.GetChannels("")).Data.(*model.ChannelList)
    41  	nameMatch := false
    42  	for _, c := range *rget {
    43  		if c.Name == channel.Name {
    44  			nameMatch = true
    45  		}
    46  	}
    47  
    48  	if !nameMatch {
    49  		t.Fatal("Did not create channel with correct name")
    50  	}
    51  
    52  	if _, err := Client.CreateChannel(rchannel.Data.(*model.Channel)); err == nil {
    53  		t.Fatal("Cannot create an existing")
    54  	}
    55  
    56  	savedId := rchannel.Data.(*model.Channel).Id
    57  
    58  	rchannel.Data.(*model.Channel).Id = ""
    59  	if _, err := Client.CreateChannel(rchannel.Data.(*model.Channel)); err != nil {
    60  		if err.Id != "store.sql_channel.save_channel.exists.app_error" {
    61  			t.Fatal(err)
    62  		}
    63  	}
    64  
    65  	if _, err := Client.DoApiPost(Client.GetTeamRoute()+"/channels/create", "garbage"); err == nil {
    66  		t.Fatal("should have been an error")
    67  	}
    68  
    69  	Client.DeleteChannel(savedId)
    70  	if _, err := Client.CreateChannel(rchannel.Data.(*model.Channel)); err != nil {
    71  		if err.Message != "A channel with that URL was previously created" {
    72  			t.Fatal(err)
    73  		}
    74  	}
    75  
    76  	channel = model.Channel{DisplayName: "Channel on Different Team", Name: "aaaa" + model.NewId() + "abbb", Type: model.CHANNEL_OPEN, TeamId: team2.Id}
    77  
    78  	if _, err := Client.CreateChannel(&channel); err.StatusCode != http.StatusForbidden {
    79  		t.Fatal(err)
    80  	}
    81  
    82  	channel = model.Channel{DisplayName: "Channel With No TeamId", Name: "aaaa" + model.NewId() + "abbb", Type: model.CHANNEL_OPEN, TeamId: ""}
    83  
    84  	if _, err := Client.CreateChannel(&channel); err != nil {
    85  		t.Fatal(err)
    86  	}
    87  
    88  	channel = model.Channel{DisplayName: "Test API Name", Name: model.NewId() + "__" + model.NewId(), Type: model.CHANNEL_OPEN, TeamId: team.Id}
    89  
    90  	if _, err := Client.CreateChannel(&channel); err == nil {
    91  		t.Fatal("Should have errored out on invalid '__' character")
    92  	}
    93  
    94  	channel = model.Channel{DisplayName: "Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_DIRECT, TeamId: team.Id}
    95  
    96  	if _, err := Client.CreateChannel(&channel); err == nil {
    97  		t.Fatal("Should have errored out on direct channel type")
    98  	}
    99  
   100  	isLicensed := utils.IsLicensed()
   101  	license := utils.License()
   102  	restrictPublicChannel := *th.App.Config().TeamSettings.RestrictPublicChannelManagement
   103  	restrictPrivateChannel := *th.App.Config().TeamSettings.RestrictPrivateChannelManagement
   104  	defer func() {
   105  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelManagement = restrictPublicChannel })
   106  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManagement = restrictPrivateChannel })
   107  		utils.SetIsLicensed(isLicensed)
   108  		utils.SetLicense(license)
   109  		th.App.SetDefaultRolesBasedOnConfig()
   110  	}()
   111  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_ALL })
   112  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_ALL })
   113  	th.App.SetDefaultRolesBasedOnConfig()
   114  	utils.SetIsLicensed(true)
   115  	utils.SetLicense(&model.License{Features: &model.Features{}})
   116  	utils.License().Features.SetDefaults()
   117  
   118  	channel2 := &model.Channel{DisplayName: "Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
   119  	channel3 := &model.Channel{DisplayName: "Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
   120  	if _, err := Client.CreateChannel(channel2); err != nil {
   121  		t.Fatal(err)
   122  	}
   123  	if _, err := Client.CreateChannel(channel3); err != nil {
   124  		t.Fatal(err)
   125  	}
   126  
   127  	th.App.UpdateConfig(func(cfg *model.Config) {
   128  		*cfg.TeamSettings.RestrictPublicChannelCreation = model.PERMISSIONS_TEAM_ADMIN
   129  	})
   130  	th.App.UpdateConfig(func(cfg *model.Config) {
   131  		*cfg.TeamSettings.RestrictPrivateChannelCreation = model.PERMISSIONS_TEAM_ADMIN
   132  	})
   133  	th.App.SetDefaultRolesBasedOnConfig()
   134  
   135  	th.LoginBasic2()
   136  	channel2.Name = "zz" + model.NewId() + "a"
   137  	channel3.Name = "zz" + model.NewId() + "a"
   138  	if _, err := Client.CreateChannel(channel2); err == nil {
   139  		t.Fatal("should have errored not team admin")
   140  	}
   141  	if _, err := Client.CreateChannel(channel3); err == nil {
   142  		t.Fatal("should have errored not team admin")
   143  	}
   144  
   145  	th.UpdateUserToTeamAdmin(th.BasicUser, team)
   146  	Client.Logout()
   147  	th.LoginBasic()
   148  	Client.SetTeamId(team.Id)
   149  
   150  	if _, err := Client.CreateChannel(channel2); err != nil {
   151  		t.Fatal(err)
   152  	}
   153  	if _, err := Client.CreateChannel(channel3); err != nil {
   154  		t.Fatal(err)
   155  	}
   156  
   157  	th.App.UpdateConfig(func(cfg *model.Config) {
   158  		*cfg.TeamSettings.RestrictPublicChannelCreation = model.PERMISSIONS_SYSTEM_ADMIN
   159  	})
   160  	th.App.UpdateConfig(func(cfg *model.Config) {
   161  		*cfg.TeamSettings.RestrictPrivateChannelCreation = model.PERMISSIONS_SYSTEM_ADMIN
   162  	})
   163  	th.App.SetDefaultRolesBasedOnConfig()
   164  
   165  	channel2.Name = "zz" + model.NewId() + "a"
   166  	channel3.Name = "zz" + model.NewId() + "a"
   167  	if _, err := Client.CreateChannel(channel2); err == nil {
   168  		t.Fatal("should have errored not system admin")
   169  	}
   170  	if _, err := Client.CreateChannel(channel3); err == nil {
   171  		t.Fatal("should have errored not system admin")
   172  	}
   173  
   174  	th.LinkUserToTeam(th.SystemAdminUser, team)
   175  
   176  	if _, err := SystemAdminClient.CreateChannel(channel2); err != nil {
   177  		t.Fatal(err)
   178  	}
   179  	if _, err := SystemAdminClient.CreateChannel(channel3); err != nil {
   180  		t.Fatal(err)
   181  	}
   182  
   183  	// Check that if unlicensed the policy restriction is not enforced.
   184  	utils.SetIsLicensed(false)
   185  	utils.SetLicense(nil)
   186  	th.App.SetDefaultRolesBasedOnConfig()
   187  
   188  	channel4 := model.Channel{DisplayName: "Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
   189  	channel5 := model.Channel{DisplayName: "Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
   190  	if _, err := Client.CreateChannel(&channel4); err != nil {
   191  		t.Fatal("should have succeeded")
   192  	}
   193  	if _, err := Client.CreateChannel(&channel5); err != nil {
   194  		t.Fatal("should have succeeded")
   195  	}
   196  
   197  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelCreation = model.PERMISSIONS_ALL })
   198  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelCreation = model.PERMISSIONS_ALL })
   199  	th.App.SetDefaultRolesBasedOnConfig()
   200  }
   201  
   202  func TestCreateDirectChannel(t *testing.T) {
   203  	th := Setup().InitBasic()
   204  	defer th.TearDown()
   205  
   206  	Client := th.BasicClient
   207  	user := th.BasicUser
   208  	user2 := th.BasicUser2
   209  
   210  	var channel *model.Channel
   211  	if result, err := Client.CreateDirectChannel(th.BasicUser2.Id); err != nil {
   212  		t.Fatal(err)
   213  	} else {
   214  		channel = result.Data.(*model.Channel)
   215  	}
   216  
   217  	channelName := ""
   218  	if user2.Id > user.Id {
   219  		channelName = user.Id + "__" + user2.Id
   220  	} else {
   221  		channelName = user2.Id + "__" + user.Id
   222  	}
   223  
   224  	if channel.Name != channelName {
   225  		t.Fatal("channel name didn't match")
   226  	}
   227  
   228  	if channel.Type != model.CHANNEL_DIRECT {
   229  		t.Fatal("channel type was not direct")
   230  	}
   231  
   232  	// Don't fail on direct channels already existing and return the original channel again
   233  	if result, err := Client.CreateDirectChannel(th.BasicUser2.Id); err != nil {
   234  		t.Fatal(err)
   235  	} else if result.Data.(*model.Channel).Id != channel.Id {
   236  		t.Fatal("didn't return original direct channel when saving a duplicate")
   237  	}
   238  
   239  	if _, err := Client.CreateDirectChannel("junk"); err == nil {
   240  		t.Fatal("should have failed with bad user id")
   241  	}
   242  
   243  	if _, err := Client.CreateDirectChannel("12345678901234567890123456"); err == nil {
   244  		t.Fatal("should have failed with non-existent user")
   245  	}
   246  }
   247  
   248  func TestCreateGroupChannel(t *testing.T) {
   249  	th := Setup().InitBasic()
   250  	defer th.TearDown()
   251  
   252  	Client := th.BasicClient
   253  	user := th.BasicUser
   254  	user2 := th.BasicUser2
   255  	user3 := th.CreateUser(Client)
   256  
   257  	userIds := []string{user.Id, user2.Id, user3.Id}
   258  
   259  	var channel *model.Channel
   260  	if result, err := Client.CreateGroupChannel(userIds); err != nil {
   261  		t.Fatal(err)
   262  	} else {
   263  		channel = result.Data.(*model.Channel)
   264  	}
   265  
   266  	if channel.Type != model.CHANNEL_GROUP {
   267  		t.Fatal("channel type was not group")
   268  	}
   269  
   270  	// Don't fail on group channels already existing and return the original channel again
   271  	if result, err := Client.CreateGroupChannel(userIds); err != nil {
   272  		t.Fatal(err)
   273  	} else if result.Data.(*model.Channel).Id != channel.Id {
   274  		t.Fatal("didn't return original group channel when saving a duplicate")
   275  	}
   276  
   277  	if _, err := Client.CreateGroupChannel([]string{user.Id}); err == nil {
   278  		t.Fatal("should have failed with not enough users")
   279  	}
   280  
   281  	if _, err := Client.CreateGroupChannel([]string{}); err == nil {
   282  		t.Fatal("should have failed with not enough users")
   283  	}
   284  
   285  	if _, err := Client.CreateGroupChannel([]string{user.Id, user2.Id, user3.Id, "junk"}); err == nil {
   286  		t.Fatal("should have failed with non-existent user")
   287  	}
   288  }
   289  
   290  func TestUpdateChannel(t *testing.T) {
   291  	th := Setup().InitBasic().InitSystemAdmin()
   292  	defer th.TearDown()
   293  
   294  	Client := th.SystemAdminClient
   295  	team := th.SystemAdminTeam
   296  	sysAdminUser := th.SystemAdminUser
   297  	user := th.CreateUser(Client)
   298  	th.LinkUserToTeam(user, team)
   299  	user2 := th.CreateUser(Client)
   300  	th.LinkUserToTeam(user2, team)
   301  
   302  	Client.Login(user.Email, user.Password)
   303  
   304  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
   305  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
   306  
   307  	Client.AddChannelMember(channel1.Id, user.Id)
   308  
   309  	header := "zz" + model.NewId() + "a"
   310  	purpose := "zz" + model.NewId() + "a"
   311  	upChannel1 := &model.Channel{Id: channel1.Id, Header: header, Purpose: purpose}
   312  	upChannel1 = Client.Must(Client.UpdateChannel(upChannel1)).Data.(*model.Channel)
   313  
   314  	if upChannel1.Header != header {
   315  		t.Fatal("Channel admin failed to update header")
   316  	}
   317  
   318  	if upChannel1.Purpose != purpose {
   319  		t.Fatal("Channel admin failed to update purpose")
   320  	}
   321  
   322  	if upChannel1.DisplayName != channel1.DisplayName {
   323  		t.Fatal("Channel admin failed to skip displayName")
   324  	}
   325  
   326  	rget := Client.Must(Client.GetChannels(""))
   327  	channels := rget.Data.(*model.ChannelList)
   328  	for _, c := range *channels {
   329  		if c.Name == model.DEFAULT_CHANNEL {
   330  			c.Header = "new header"
   331  			c.Name = "pseudo-square"
   332  			if _, err := Client.UpdateChannel(c); err == nil {
   333  				t.Fatal("should have errored on updating default channel name")
   334  			}
   335  			break
   336  		}
   337  	}
   338  
   339  	Client.Login(user2.Email, user2.Password)
   340  
   341  	if _, err := Client.UpdateChannel(upChannel1); err == nil {
   342  		t.Fatal("Standard User should have failed to update")
   343  	}
   344  
   345  	Client.Must(Client.JoinChannel(channel1.Id))
   346  	th.UpdateUserToTeamAdmin(user2, team)
   347  
   348  	Client.Logout()
   349  	Client.Login(user2.Email, user2.Password)
   350  	Client.SetTeamId(team.Id)
   351  
   352  	if _, err := Client.UpdateChannel(upChannel1); err != nil {
   353  		t.Fatal(err)
   354  	}
   355  
   356  	Client.Login(sysAdminUser.Email, sysAdminUser.Password)
   357  	th.LinkUserToTeam(sysAdminUser, team)
   358  	Client.Must(Client.JoinChannel(channel1.Id))
   359  
   360  	if _, err := Client.UpdateChannel(upChannel1); err != nil {
   361  		t.Fatal(err)
   362  	}
   363  
   364  	Client.Must(Client.DeleteChannel(channel1.Id))
   365  
   366  	if _, err := Client.UpdateChannel(upChannel1); err == nil {
   367  		t.Fatal("should have failed - channel deleted")
   368  	}
   369  
   370  	isLicensed := utils.IsLicensed()
   371  	license := utils.License()
   372  	restrictPublicChannel := *th.App.Config().TeamSettings.RestrictPublicChannelManagement
   373  	restrictPrivateChannel := *th.App.Config().TeamSettings.RestrictPrivateChannelManagement
   374  	defer func() {
   375  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelManagement = restrictPublicChannel })
   376  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManagement = restrictPrivateChannel })
   377  		utils.SetIsLicensed(isLicensed)
   378  		utils.SetLicense(license)
   379  		th.App.SetDefaultRolesBasedOnConfig()
   380  	}()
   381  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_ALL })
   382  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_ALL })
   383  	utils.SetIsLicensed(true)
   384  	utils.SetLicense(&model.License{Features: &model.Features{}})
   385  	utils.License().Features.SetDefaults()
   386  	th.App.SetDefaultRolesBasedOnConfig()
   387  
   388  	channel2 := th.CreateChannel(Client, team)
   389  	channel3 := th.CreatePrivateChannel(Client, team)
   390  
   391  	th.LinkUserToTeam(th.BasicUser, team)
   392  
   393  	Client.Must(Client.AddChannelMember(channel2.Id, th.BasicUser.Id))
   394  	Client.Must(Client.AddChannelMember(channel3.Id, th.BasicUser.Id))
   395  
   396  	Client.Login(th.BasicUser.Email, th.BasicUser.Password)
   397  
   398  	if _, err := Client.UpdateChannel(channel2); err != nil {
   399  		t.Fatal(err)
   400  	}
   401  	if _, err := Client.UpdateChannel(channel3); err != nil {
   402  		t.Fatal(err)
   403  	}
   404  
   405  	th.App.UpdateConfig(func(cfg *model.Config) {
   406  		*cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_CHANNEL_ADMIN
   407  	})
   408  	th.App.UpdateConfig(func(cfg *model.Config) {
   409  		*cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_CHANNEL_ADMIN
   410  	})
   411  	utils.SetIsLicensed(true)
   412  	utils.SetLicense(&model.License{Features: &model.Features{}})
   413  	utils.License().Features.SetDefaults()
   414  	th.App.SetDefaultRolesBasedOnConfig()
   415  	th.MakeUserChannelUser(th.BasicUser, channel2)
   416  	th.MakeUserChannelUser(th.BasicUser, channel3)
   417  	sqlstore.ClearChannelCaches()
   418  
   419  	if _, err := Client.UpdateChannel(channel2); err == nil {
   420  		t.Fatal("should have errored not channel admin")
   421  	}
   422  	if _, err := Client.UpdateChannel(channel3); err == nil {
   423  		t.Fatal("should have errored not channel admin")
   424  	}
   425  
   426  	th.UpdateUserToTeamAdmin(th.BasicUser, team)
   427  	th.App.InvalidateAllCaches()
   428  	if _, err := Client.UpdateChannel(channel2); err != nil {
   429  		t.Fatal(err)
   430  	}
   431  	if _, err := Client.UpdateChannel(channel3); err != nil {
   432  		t.Fatal(err)
   433  	}
   434  	th.UpdateUserToNonTeamAdmin(th.BasicUser, team)
   435  	th.App.InvalidateAllCaches()
   436  
   437  	th.MakeUserChannelAdmin(th.BasicUser, channel2)
   438  	th.MakeUserChannelAdmin(th.BasicUser, channel3)
   439  	sqlstore.ClearChannelCaches()
   440  
   441  	if _, err := Client.UpdateChannel(channel2); err != nil {
   442  		t.Fatal(err)
   443  	}
   444  	if _, err := Client.UpdateChannel(channel3); err != nil {
   445  		t.Fatal(err)
   446  	}
   447  
   448  	th.App.UpdateConfig(func(cfg *model.Config) {
   449  		*cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_TEAM_ADMIN
   450  	})
   451  	th.App.UpdateConfig(func(cfg *model.Config) {
   452  		*cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_TEAM_ADMIN
   453  	})
   454  	utils.SetIsLicensed(true)
   455  	utils.SetLicense(&model.License{Features: &model.Features{}})
   456  	utils.License().Features.SetDefaults()
   457  	th.App.SetDefaultRolesBasedOnConfig()
   458  
   459  	if _, err := Client.UpdateChannel(channel2); err == nil {
   460  		t.Fatal("should have errored not team admin")
   461  	}
   462  	if _, err := Client.UpdateChannel(channel3); err == nil {
   463  		t.Fatal("should have errored not team admin")
   464  	}
   465  
   466  	th.UpdateUserToTeamAdmin(th.BasicUser, team)
   467  	Client.Logout()
   468  	Client.Login(th.BasicUser.Email, th.BasicUser.Password)
   469  	Client.SetTeamId(team.Id)
   470  
   471  	if _, err := Client.UpdateChannel(channel2); err != nil {
   472  		t.Fatal(err)
   473  	}
   474  	if _, err := Client.UpdateChannel(channel3); err != nil {
   475  		t.Fatal(err)
   476  	}
   477  
   478  	th.App.UpdateConfig(func(cfg *model.Config) {
   479  		*cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_SYSTEM_ADMIN
   480  	})
   481  	th.App.UpdateConfig(func(cfg *model.Config) {
   482  		*cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_SYSTEM_ADMIN
   483  	})
   484  	utils.SetIsLicensed(true)
   485  	utils.SetLicense(&model.License{Features: &model.Features{}})
   486  	utils.License().Features.SetDefaults()
   487  	th.App.SetDefaultRolesBasedOnConfig()
   488  
   489  	if _, err := Client.UpdateChannel(channel2); err == nil {
   490  		t.Fatal("should have errored not system admin")
   491  	}
   492  	if _, err := Client.UpdateChannel(channel3); err == nil {
   493  		t.Fatal("should have errored not system admin")
   494  	}
   495  
   496  	th.LoginSystemAdmin()
   497  
   498  	if _, err := Client.UpdateChannel(channel2); err != nil {
   499  		t.Fatal(err)
   500  	}
   501  	if _, err := Client.UpdateChannel(channel3); err != nil {
   502  		t.Fatal(err)
   503  	}
   504  
   505  	// Check that if unlicensed the policy restriction is not enforced.
   506  	utils.SetIsLicensed(false)
   507  	utils.SetLicense(nil)
   508  	th.App.SetDefaultRolesBasedOnConfig()
   509  
   510  	if _, err := Client.UpdateChannel(channel2); err != nil {
   511  		t.Fatal(err)
   512  	}
   513  	if _, err := Client.UpdateChannel(channel3); err != nil {
   514  		t.Fatal(err)
   515  	}
   516  }
   517  
   518  func TestUpdateChannelDisplayName(t *testing.T) {
   519  	th := Setup().InitBasic().InitSystemAdmin()
   520  	defer th.TearDown()
   521  
   522  	Client := th.SystemAdminClient
   523  	team := th.SystemAdminTeam
   524  	user := th.CreateUser(Client)
   525  	th.LinkUserToTeam(user, team)
   526  
   527  	Client.Login(user.Email, user.Password)
   528  
   529  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
   530  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
   531  
   532  	Client.AddChannelMember(channel1.Id, user.Id)
   533  
   534  	newDisplayName := "a" + channel1.DisplayName + "a"
   535  	channel1.DisplayName = newDisplayName
   536  	channel1 = Client.Must(Client.UpdateChannel(channel1)).Data.(*model.Channel)
   537  
   538  	time.Sleep(100 * time.Millisecond)
   539  
   540  	r1 := Client.Must(Client.GetPosts(channel1.Id, 0, 1, "")).Data.(*model.PostList)
   541  	if len(r1.Order) != 1 {
   542  		t.Fatal("Displayname update system message was not found")
   543  	}
   544  }
   545  
   546  func TestUpdateChannelHeader(t *testing.T) {
   547  	th := Setup().InitBasic().InitSystemAdmin()
   548  	defer th.TearDown()
   549  
   550  	Client := th.BasicClient
   551  	SystemAdminClient := th.SystemAdminClient
   552  	team := th.BasicTeam
   553  
   554  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
   555  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
   556  
   557  	data := make(map[string]string)
   558  	data["channel_id"] = channel1.Id
   559  	data["channel_header"] = "new header"
   560  
   561  	var upChannel1 *model.Channel
   562  	if result, err := Client.UpdateChannelHeader(data); err != nil {
   563  		t.Fatal(err)
   564  	} else {
   565  		upChannel1 = result.Data.(*model.Channel)
   566  	}
   567  
   568  	time.Sleep(100 * time.Millisecond)
   569  
   570  	r1 := Client.Must(Client.GetPosts(channel1.Id, 0, 1, "")).Data.(*model.PostList)
   571  	if len(r1.Order) != 1 {
   572  		t.Fatal("Header update system message was not found")
   573  	} else if val, ok := r1.Posts[r1.Order[0]].Props["old_header"]; !ok || val != "" {
   574  		t.Fatal("Props should contain old_header with old header value")
   575  	} else if val, ok := r1.Posts[r1.Order[0]].Props["new_header"]; !ok || val != "new header" {
   576  		t.Fatal("Props should contain new_header with new header value")
   577  	}
   578  
   579  	if upChannel1.Header != data["channel_header"] {
   580  		t.Fatal("Failed to update header")
   581  	}
   582  
   583  	data["channel_id"] = "junk"
   584  	if _, err := Client.UpdateChannelHeader(data); err == nil {
   585  		t.Fatal("should have errored on junk channel id")
   586  	}
   587  
   588  	data["channel_id"] = "12345678901234567890123456"
   589  	if _, err := Client.UpdateChannelHeader(data); err == nil {
   590  		t.Fatal("should have errored on non-existent channel id")
   591  	}
   592  
   593  	data["channel_id"] = channel1.Id
   594  	data["channel_header"] = strings.Repeat("a", 1050)
   595  	if _, err := Client.UpdateChannelHeader(data); err == nil {
   596  		t.Fatal("should have errored on bad channel header")
   597  	}
   598  
   599  	rchannel := Client.Must(Client.CreateDirectChannel(th.BasicUser2.Id)).Data.(*model.Channel)
   600  	data["channel_id"] = rchannel.Id
   601  	data["channel_header"] = "new header"
   602  	var upChanneld *model.Channel
   603  	if result, err := Client.UpdateChannelHeader(data); err != nil {
   604  		t.Fatal(err)
   605  	} else {
   606  		upChanneld = result.Data.(*model.Channel)
   607  	}
   608  
   609  	if upChanneld.Header != data["channel_header"] {
   610  		t.Fatal("Failed to update header")
   611  	}
   612  
   613  	th.LoginBasic2()
   614  
   615  	data["channel_id"] = channel1.Id
   616  	data["channel_header"] = "new header"
   617  	if _, err := Client.UpdateChannelHeader(data); err == nil {
   618  		t.Fatal("should have errored non-channel member trying to update header")
   619  	}
   620  
   621  	isLicensed := utils.IsLicensed()
   622  	license := utils.License()
   623  	restrictPublicChannel := *th.App.Config().TeamSettings.RestrictPublicChannelManagement
   624  	restrictPrivateChannel := *th.App.Config().TeamSettings.RestrictPrivateChannelManagement
   625  	defer func() {
   626  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelManagement = restrictPublicChannel })
   627  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManagement = restrictPrivateChannel })
   628  		utils.SetIsLicensed(isLicensed)
   629  		utils.SetLicense(license)
   630  		th.App.SetDefaultRolesBasedOnConfig()
   631  	}()
   632  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_ALL })
   633  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_ALL })
   634  	utils.SetIsLicensed(true)
   635  	utils.SetLicense(&model.License{Features: &model.Features{}})
   636  	utils.License().Features.SetDefaults()
   637  	th.App.SetDefaultRolesBasedOnConfig()
   638  
   639  	th.LoginBasic()
   640  	channel2 := th.CreateChannel(Client, team)
   641  	channel3 := th.CreatePrivateChannel(Client, team)
   642  
   643  	data2 := make(map[string]string)
   644  	data2["channel_id"] = channel2.Id
   645  	data2["channel_header"] = "new header"
   646  
   647  	data3 := make(map[string]string)
   648  	data3["channel_id"] = channel3.Id
   649  	data3["channel_header"] = "new header"
   650  
   651  	Client.Login(th.BasicUser.Email, th.BasicUser.Password)
   652  
   653  	if _, err := Client.UpdateChannelHeader(data2); err != nil {
   654  		t.Fatal(err)
   655  	}
   656  	if _, err := Client.UpdateChannelHeader(data3); err != nil {
   657  		t.Fatal(err)
   658  	}
   659  
   660  	th.App.UpdateConfig(func(cfg *model.Config) {
   661  		*cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_CHANNEL_ADMIN
   662  	})
   663  	th.App.UpdateConfig(func(cfg *model.Config) {
   664  		*cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_CHANNEL_ADMIN
   665  	})
   666  	th.App.SetDefaultRolesBasedOnConfig()
   667  	th.MakeUserChannelUser(th.BasicUser, channel2)
   668  	th.MakeUserChannelUser(th.BasicUser, channel3)
   669  	sqlstore.ClearChannelCaches()
   670  
   671  	if _, err := Client.UpdateChannelHeader(data2); err == nil {
   672  		t.Fatal("should have errored not channel admin")
   673  	}
   674  	if _, err := Client.UpdateChannelHeader(data3); err == nil {
   675  		t.Fatal("should have errored not channel admin")
   676  	}
   677  
   678  	th.MakeUserChannelAdmin(th.BasicUser, channel2)
   679  	th.MakeUserChannelAdmin(th.BasicUser, channel3)
   680  	sqlstore.ClearChannelCaches()
   681  
   682  	if _, err := Client.UpdateChannelHeader(data2); err != nil {
   683  		t.Fatal(err)
   684  	}
   685  	if _, err := Client.UpdateChannelHeader(data3); err != nil {
   686  		t.Fatal(err)
   687  	}
   688  
   689  	th.App.UpdateConfig(func(cfg *model.Config) {
   690  		*cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_TEAM_ADMIN
   691  	})
   692  	th.App.UpdateConfig(func(cfg *model.Config) {
   693  		*cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_TEAM_ADMIN
   694  	})
   695  	th.App.SetDefaultRolesBasedOnConfig()
   696  
   697  	if _, err := Client.UpdateChannelHeader(data2); err == nil {
   698  		t.Fatal("should have errored not team admin")
   699  	}
   700  	if _, err := Client.UpdateChannelHeader(data3); err == nil {
   701  		t.Fatal("should have errored not team admin")
   702  	}
   703  
   704  	th.UpdateUserToTeamAdmin(th.BasicUser, team)
   705  	Client.Logout()
   706  	th.LoginBasic()
   707  	Client.SetTeamId(team.Id)
   708  
   709  	if _, err := Client.UpdateChannelHeader(data2); err != nil {
   710  		t.Fatal(err)
   711  	}
   712  	if _, err := Client.UpdateChannelHeader(data3); err != nil {
   713  		t.Fatal(err)
   714  	}
   715  
   716  	th.App.UpdateConfig(func(cfg *model.Config) {
   717  		*cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_SYSTEM_ADMIN
   718  	})
   719  	th.App.UpdateConfig(func(cfg *model.Config) {
   720  		*cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_SYSTEM_ADMIN
   721  	})
   722  	th.App.SetDefaultRolesBasedOnConfig()
   723  
   724  	if _, err := Client.UpdateChannelHeader(data2); err == nil {
   725  		t.Fatal("should have errored not system admin")
   726  	}
   727  	if _, err := Client.UpdateChannelHeader(data3); err == nil {
   728  		t.Fatal("should have errored not system admin")
   729  	}
   730  
   731  	th.LinkUserToTeam(th.SystemAdminUser, team)
   732  	Client.Must(Client.AddChannelMember(channel2.Id, th.SystemAdminUser.Id))
   733  	Client.Must(Client.AddChannelMember(channel3.Id, th.SystemAdminUser.Id))
   734  	th.LoginSystemAdmin()
   735  
   736  	if _, err := SystemAdminClient.UpdateChannelHeader(data2); err != nil {
   737  		t.Fatal(err)
   738  	}
   739  	if _, err := SystemAdminClient.UpdateChannelHeader(data3); err != nil {
   740  		t.Fatal(err)
   741  	}
   742  
   743  	// Check that if unlicensed the policy restriction is not enforced.
   744  	utils.SetIsLicensed(false)
   745  	utils.SetLicense(nil)
   746  	th.App.SetDefaultRolesBasedOnConfig()
   747  
   748  	if _, err := SystemAdminClient.UpdateChannelHeader(data2); err != nil {
   749  		t.Fatal(err)
   750  	}
   751  	if _, err := SystemAdminClient.UpdateChannelHeader(data3); err != nil {
   752  		t.Fatal(err)
   753  	}
   754  }
   755  
   756  func TestUpdateChannelPurpose(t *testing.T) {
   757  	th := Setup().InitBasic().InitSystemAdmin()
   758  	defer th.TearDown()
   759  
   760  	Client := th.BasicClient
   761  	SystemAdminClient := th.SystemAdminClient
   762  	team := th.BasicTeam
   763  
   764  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
   765  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
   766  
   767  	data := make(map[string]string)
   768  	data["channel_id"] = channel1.Id
   769  	data["channel_purpose"] = "new purpose"
   770  
   771  	var upChannel1 *model.Channel
   772  	if result, err := Client.UpdateChannelPurpose(data); err != nil {
   773  		t.Fatal(err)
   774  	} else {
   775  		upChannel1 = result.Data.(*model.Channel)
   776  	}
   777  
   778  	time.Sleep(100 * time.Millisecond)
   779  
   780  	r1 := Client.Must(Client.GetPosts(channel1.Id, 0, 1, "")).Data.(*model.PostList)
   781  	if len(r1.Order) != 1 {
   782  		t.Fatal("Purpose update system message was not found")
   783  	} else if val, ok := r1.Posts[r1.Order[0]].Props["old_purpose"]; !ok || val != "" {
   784  		t.Fatal("Props should contain old_header with old purpose value")
   785  	} else if val, ok := r1.Posts[r1.Order[0]].Props["new_purpose"]; !ok || val != "new purpose" {
   786  		t.Fatal("Props should contain new_header with new purpose value")
   787  	}
   788  
   789  	if upChannel1.Purpose != data["channel_purpose"] {
   790  		t.Fatal("Failed to update purpose")
   791  	}
   792  
   793  	data["channel_id"] = "junk"
   794  	if _, err := Client.UpdateChannelPurpose(data); err == nil {
   795  		t.Fatal("should have errored on junk channel id")
   796  	}
   797  
   798  	data["channel_id"] = "12345678901234567890123456"
   799  	if _, err := Client.UpdateChannelPurpose(data); err == nil {
   800  		t.Fatal("should have errored on non-existent channel id")
   801  	}
   802  
   803  	data["channel_id"] = channel1.Id
   804  	data["channel_purpose"] = strings.Repeat("a", 350)
   805  	if _, err := Client.UpdateChannelPurpose(data); err == nil {
   806  		t.Fatal("should have errored on bad channel purpose")
   807  	}
   808  
   809  	th.LoginBasic2()
   810  
   811  	data["channel_id"] = channel1.Id
   812  	data["channel_purpose"] = "new purpose"
   813  	if _, err := Client.UpdateChannelPurpose(data); err == nil {
   814  		t.Fatal("should have errored non-channel member trying to update purpose")
   815  	}
   816  
   817  	isLicensed := utils.IsLicensed()
   818  	license := utils.License()
   819  	restrictPublicChannel := *th.App.Config().TeamSettings.RestrictPublicChannelManagement
   820  	restrictPrivateChannel := *th.App.Config().TeamSettings.RestrictPrivateChannelManagement
   821  	defer func() {
   822  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelManagement = restrictPublicChannel })
   823  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManagement = restrictPrivateChannel })
   824  		utils.SetIsLicensed(isLicensed)
   825  		utils.SetLicense(license)
   826  		th.App.SetDefaultRolesBasedOnConfig()
   827  	}()
   828  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_ALL })
   829  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_ALL })
   830  	utils.SetIsLicensed(true)
   831  	utils.SetLicense(&model.License{Features: &model.Features{}})
   832  	utils.License().Features.SetDefaults()
   833  	th.App.SetDefaultRolesBasedOnConfig()
   834  
   835  	th.LoginBasic()
   836  	channel2 := th.CreateChannel(Client, team)
   837  	channel3 := th.CreatePrivateChannel(Client, team)
   838  
   839  	data2 := make(map[string]string)
   840  	data2["channel_id"] = channel2.Id
   841  	data2["channel_purpose"] = "new purpose"
   842  
   843  	data3 := make(map[string]string)
   844  	data3["channel_id"] = channel3.Id
   845  	data3["channel_purpose"] = "new purpose"
   846  
   847  	Client.Login(th.BasicUser.Email, th.BasicUser.Password)
   848  
   849  	if _, err := Client.UpdateChannelPurpose(data2); err != nil {
   850  		t.Fatal(err)
   851  	}
   852  	if _, err := Client.UpdateChannelPurpose(data3); err != nil {
   853  		t.Fatal(err)
   854  	}
   855  
   856  	th.App.UpdateConfig(func(cfg *model.Config) {
   857  		*cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_CHANNEL_ADMIN
   858  	})
   859  	th.App.UpdateConfig(func(cfg *model.Config) {
   860  		*cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_CHANNEL_ADMIN
   861  	})
   862  	th.App.SetDefaultRolesBasedOnConfig()
   863  	th.MakeUserChannelUser(th.BasicUser, channel2)
   864  	th.MakeUserChannelUser(th.BasicUser, channel3)
   865  	sqlstore.ClearChannelCaches()
   866  
   867  	if _, err := Client.UpdateChannelPurpose(data2); err == nil {
   868  		t.Fatal("should have errored not channel admin")
   869  	}
   870  	if _, err := Client.UpdateChannelPurpose(data3); err == nil {
   871  		t.Fatal("should have errored not channel admin")
   872  	}
   873  
   874  	th.MakeUserChannelAdmin(th.BasicUser, channel2)
   875  	th.MakeUserChannelAdmin(th.BasicUser, channel3)
   876  	sqlstore.ClearChannelCaches()
   877  
   878  	if _, err := Client.UpdateChannelPurpose(data2); err != nil {
   879  		t.Fatal(err)
   880  	}
   881  	if _, err := Client.UpdateChannelPurpose(data3); err != nil {
   882  		t.Fatal(err)
   883  	}
   884  
   885  	th.App.UpdateConfig(func(cfg *model.Config) {
   886  		*cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_TEAM_ADMIN
   887  	})
   888  	th.App.UpdateConfig(func(cfg *model.Config) {
   889  		*cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_TEAM_ADMIN
   890  	})
   891  	th.App.SetDefaultRolesBasedOnConfig()
   892  
   893  	if _, err := Client.UpdateChannelPurpose(data2); err == nil {
   894  		t.Fatal("should have errored not team admin")
   895  	}
   896  	if _, err := Client.UpdateChannelPurpose(data3); err == nil {
   897  		t.Fatal("should have errored not team admin")
   898  	}
   899  
   900  	th.UpdateUserToTeamAdmin(th.BasicUser, team)
   901  	Client.Logout()
   902  	th.LoginBasic()
   903  	Client.SetTeamId(team.Id)
   904  
   905  	if _, err := Client.UpdateChannelPurpose(data2); err != nil {
   906  		t.Fatal(err)
   907  	}
   908  	if _, err := Client.UpdateChannelPurpose(data3); err != nil {
   909  		t.Fatal(err)
   910  	}
   911  
   912  	th.App.UpdateConfig(func(cfg *model.Config) {
   913  		*cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_SYSTEM_ADMIN
   914  	})
   915  	th.App.UpdateConfig(func(cfg *model.Config) {
   916  		*cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_SYSTEM_ADMIN
   917  	})
   918  	th.App.SetDefaultRolesBasedOnConfig()
   919  
   920  	if _, err := Client.UpdateChannelPurpose(data2); err == nil {
   921  		t.Fatal("should have errored not system admin")
   922  	}
   923  	if _, err := Client.UpdateChannelPurpose(data3); err == nil {
   924  		t.Fatal("should have errored not system admin")
   925  	}
   926  
   927  	th.LinkUserToTeam(th.SystemAdminUser, team)
   928  	Client.Must(Client.AddChannelMember(channel2.Id, th.SystemAdminUser.Id))
   929  	Client.Must(Client.AddChannelMember(channel3.Id, th.SystemAdminUser.Id))
   930  	th.LoginSystemAdmin()
   931  
   932  	if _, err := SystemAdminClient.UpdateChannelPurpose(data2); err != nil {
   933  		t.Fatal(err)
   934  	}
   935  	if _, err := SystemAdminClient.UpdateChannelPurpose(data3); err != nil {
   936  		t.Fatal(err)
   937  	}
   938  
   939  	// Check that if unlicensed the policy restriction is not enforced.
   940  	utils.SetIsLicensed(false)
   941  	utils.SetLicense(nil)
   942  	th.App.SetDefaultRolesBasedOnConfig()
   943  	if _, err := SystemAdminClient.UpdateChannelHeader(data2); err != nil {
   944  		t.Fatal(err)
   945  	}
   946  	if _, err := SystemAdminClient.UpdateChannelHeader(data3); err != nil {
   947  		t.Fatal(err)
   948  	}
   949  }
   950  
   951  func TestGetChannel(t *testing.T) {
   952  	th := Setup().InitBasic()
   953  	defer th.TearDown()
   954  
   955  	Client := th.BasicClient
   956  	team := th.BasicTeam
   957  	team2 := th.CreateTeam(Client)
   958  
   959  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
   960  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
   961  
   962  	channel2 := &model.Channel{DisplayName: "B Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
   963  	channel2 = Client.Must(Client.CreateChannel(channel2)).Data.(*model.Channel)
   964  
   965  	rget := Client.Must(Client.GetChannels(""))
   966  	channels := rget.Data.(*model.ChannelList)
   967  
   968  	if (*channels)[0].DisplayName != channel1.DisplayName {
   969  		t.Fatal("full name didn't match")
   970  	}
   971  
   972  	if (*channels)[1].DisplayName != channel2.DisplayName {
   973  		t.Fatal("full name didn't match")
   974  	}
   975  
   976  	// test etag caching
   977  	if cache_result, err := Client.GetChannels(rget.Etag); err != nil {
   978  		t.Fatal(err)
   979  	} else if cache_result.Data.(*model.ChannelList) != nil {
   980  		t.Log(cache_result.Data)
   981  		t.Fatal("cache should be empty")
   982  	}
   983  
   984  	view := model.ChannelView{ChannelId: channel2.Id, PrevChannelId: channel1.Id}
   985  	if _, resp := Client.ViewChannel(view); resp.Error != nil {
   986  		t.Fatal(resp.Error)
   987  	}
   988  
   989  	if resp, err := Client.GetChannel(channel1.Id, ""); err != nil {
   990  		t.Fatal(err)
   991  	} else {
   992  		data := resp.Data.(*model.ChannelData)
   993  		if data.Channel.DisplayName != channel1.DisplayName {
   994  			t.Fatal("name didn't match")
   995  		}
   996  
   997  		// test etag caching
   998  		if cache_result, err := Client.GetChannel(channel1.Id, resp.Etag); err != nil {
   999  			t.Fatal(err)
  1000  		} else if cache_result.Data.(*model.ChannelData) != nil {
  1001  			t.Log(cache_result.Data)
  1002  			t.Fatal("cache should be empty")
  1003  		}
  1004  	}
  1005  
  1006  	if _, err := Client.GetChannel("junk", ""); err == nil {
  1007  		t.Fatal("should have failed - bad channel id")
  1008  	}
  1009  
  1010  	th.BasicClient.SetTeamId(team2.Id)
  1011  	if _, err := Client.GetChannel(channel2.Id, ""); err == nil {
  1012  		t.Fatal("should have failed - wrong team")
  1013  	}
  1014  
  1015  	//Test if a wrong team id is supplied should return error
  1016  	if _, err := Client.CreateDirectChannel(th.BasicUser2.Id); err != nil {
  1017  		t.Fatal(err)
  1018  	}
  1019  
  1020  	th.BasicClient.SetTeamId("nonexitingteamid")
  1021  	if _, err := Client.GetChannels(""); err == nil {
  1022  		t.Fatal("should have failed - wrong team id")
  1023  	}
  1024  }
  1025  
  1026  func TestGetMoreChannelsPage(t *testing.T) {
  1027  	th := Setup().InitBasic()
  1028  	defer th.TearDown()
  1029  
  1030  	Client := th.BasicClient
  1031  	team := th.BasicTeam
  1032  
  1033  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1034  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1035  
  1036  	channel2 := &model.Channel{DisplayName: "B Test API Name", Name: "b" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1037  	channel2 = Client.Must(Client.CreateChannel(channel2)).Data.(*model.Channel)
  1038  
  1039  	channel3 := &model.Channel{DisplayName: "C Test API Name", Name: "c" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1040  	channel3 = Client.Must(Client.CreateChannel(channel3)).Data.(*model.Channel)
  1041  
  1042  	th.LoginBasic2()
  1043  
  1044  	if r, err := Client.GetMoreChannelsPage(0, 100); err != nil {
  1045  		t.Fatal(err)
  1046  	} else {
  1047  		channels := r.Data.(*model.ChannelList)
  1048  
  1049  		// 1 for BasicChannel, 1 for PinnedPostChannel, 2 for open channels created above
  1050  		if len(*channels) != 4 {
  1051  			t.Fatal("wrong length")
  1052  		}
  1053  
  1054  		if (*channels)[0].DisplayName != channel1.DisplayName {
  1055  			t.Fatal("full name didn't match")
  1056  		}
  1057  
  1058  		if (*channels)[1].DisplayName != channel2.DisplayName {
  1059  			t.Fatal("full name didn't match")
  1060  		}
  1061  	}
  1062  
  1063  	if r, err := Client.GetMoreChannelsPage(0, 1); err != nil {
  1064  		t.Fatal(err)
  1065  	} else {
  1066  		channels := r.Data.(*model.ChannelList)
  1067  
  1068  		if len(*channels) != 1 {
  1069  			t.Fatal("wrong length")
  1070  		}
  1071  
  1072  		if (*channels)[0].DisplayName != channel1.DisplayName {
  1073  			t.Fatal("full name didn't match")
  1074  		}
  1075  	}
  1076  
  1077  	if r, err := Client.GetMoreChannelsPage(1, 1); err != nil {
  1078  		t.Fatal(err)
  1079  	} else {
  1080  		channels := r.Data.(*model.ChannelList)
  1081  
  1082  		if len(*channels) != 1 {
  1083  			t.Fatal("wrong length")
  1084  		}
  1085  
  1086  		if (*channels)[0].DisplayName != channel2.DisplayName {
  1087  			t.Fatal("full name didn't match")
  1088  		}
  1089  	}
  1090  
  1091  	Client.SetTeamId("junk")
  1092  	if _, err := Client.GetMoreChannelsPage(0, 1); err == nil {
  1093  		t.Fatal("should have failed - bad team id")
  1094  	}
  1095  }
  1096  
  1097  func TestGetChannelCounts(t *testing.T) {
  1098  	th := Setup().InitBasic()
  1099  	defer th.TearDown()
  1100  
  1101  	Client := th.BasicClient
  1102  	team := th.BasicTeam
  1103  
  1104  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1105  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1106  
  1107  	channel2 := &model.Channel{DisplayName: "B Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1108  	channel2 = Client.Must(Client.CreateChannel(channel2)).Data.(*model.Channel)
  1109  
  1110  	if result, err := Client.GetChannelCounts(""); err != nil {
  1111  		t.Fatal(err)
  1112  	} else {
  1113  		counts := result.Data.(*model.ChannelCounts)
  1114  
  1115  		if len(counts.Counts) != 6 {
  1116  			t.Fatal("wrong number of channel counts")
  1117  		}
  1118  
  1119  		if len(counts.UpdateTimes) != 6 {
  1120  			t.Fatal("wrong number of channel update times")
  1121  		}
  1122  
  1123  		if cache_result, err := Client.GetChannelCounts(result.Etag); err != nil {
  1124  			t.Fatal(err)
  1125  		} else if cache_result.Data.(*model.ChannelCounts) != nil {
  1126  			t.Log(cache_result.Data)
  1127  			t.Fatal("result data should be empty")
  1128  		}
  1129  	}
  1130  
  1131  }
  1132  
  1133  func TestGetMyChannelMembers(t *testing.T) {
  1134  	th := Setup().InitBasic()
  1135  	defer th.TearDown()
  1136  
  1137  	Client := th.BasicClient
  1138  	team := th.BasicTeam
  1139  
  1140  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1141  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1142  
  1143  	channel2 := &model.Channel{DisplayName: "B Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1144  	channel2 = Client.Must(Client.CreateChannel(channel2)).Data.(*model.Channel)
  1145  
  1146  	if result, err := Client.GetMyChannelMembers(); err != nil {
  1147  		t.Fatal(err)
  1148  	} else {
  1149  		members := result.Data.(*model.ChannelMembers)
  1150  
  1151  		// town-square, off-topic, basic test channel, pinned post channel, channel1, channel2
  1152  		if len(*members) != 6 {
  1153  			t.Fatal("wrong number of members", len(*members))
  1154  		}
  1155  	}
  1156  
  1157  }
  1158  
  1159  func TestJoinChannelById(t *testing.T) {
  1160  	th := Setup().InitBasic()
  1161  	defer th.TearDown()
  1162  
  1163  	Client := th.BasicClient
  1164  	team := th.BasicTeam
  1165  
  1166  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1167  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1168  
  1169  	channel3 := &model.Channel{DisplayName: "B Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1170  	channel3 = Client.Must(Client.CreateChannel(channel3)).Data.(*model.Channel)
  1171  
  1172  	th.LoginBasic2()
  1173  
  1174  	Client.Must(Client.JoinChannel(channel1.Id))
  1175  
  1176  	if _, err := Client.JoinChannel(channel3.Id); err == nil {
  1177  		t.Fatal("shouldn't be able to join secret group")
  1178  	}
  1179  
  1180  	rchannel := Client.Must(Client.CreateDirectChannel(th.BasicUser.Id)).Data.(*model.Channel)
  1181  
  1182  	user3 := th.CreateUser(th.BasicClient)
  1183  	th.LinkUserToTeam(user3, team)
  1184  	Client.Must(Client.Login(user3.Email, "Password1"))
  1185  
  1186  	if _, err := Client.JoinChannel(rchannel.Id); err == nil {
  1187  		t.Fatal("shoudn't be able to join direct channel")
  1188  	}
  1189  
  1190  	th.LoginBasic()
  1191  
  1192  	if _, err := Client.JoinChannel(channel1.Id); err != nil {
  1193  		t.Fatal("should be able to join public channel that we're a member of")
  1194  	}
  1195  
  1196  	if _, err := Client.JoinChannel(channel3.Id); err != nil {
  1197  		t.Fatal("should be able to join private channel that we're a member of")
  1198  	}
  1199  
  1200  	if _, err := Client.JoinChannel(rchannel.Id); err != nil {
  1201  		t.Fatal("should be able to join direct channel that we're a member of")
  1202  	}
  1203  }
  1204  
  1205  func TestJoinChannelByName(t *testing.T) {
  1206  	th := Setup().InitBasic()
  1207  	defer th.TearDown()
  1208  
  1209  	Client := th.BasicClient
  1210  	team := th.BasicTeam
  1211  
  1212  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1213  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1214  
  1215  	channel3 := &model.Channel{DisplayName: "B Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1216  	channel3 = Client.Must(Client.CreateChannel(channel3)).Data.(*model.Channel)
  1217  
  1218  	th.LoginBasic2()
  1219  
  1220  	Client.Must(Client.JoinChannelByName(channel1.Name))
  1221  
  1222  	if _, err := Client.JoinChannelByName(channel3.Name); err == nil {
  1223  		t.Fatal("shouldn't be able to join secret group")
  1224  	}
  1225  
  1226  	rchannel := Client.Must(Client.CreateDirectChannel(th.BasicUser.Id)).Data.(*model.Channel)
  1227  
  1228  	user3 := th.CreateUser(th.BasicClient)
  1229  	th.LinkUserToTeam(user3, team)
  1230  	Client.Must(Client.Login(user3.Email, "Password1"))
  1231  
  1232  	if _, err := Client.JoinChannelByName(rchannel.Name); err == nil {
  1233  		t.Fatal("shoudn't be able to join direct channel")
  1234  	}
  1235  
  1236  	th.LoginBasic()
  1237  
  1238  	if _, err := Client.JoinChannelByName(channel1.Name); err != nil {
  1239  		t.Fatal("should be able to join public channel that we're a member of")
  1240  	}
  1241  
  1242  	if _, err := Client.JoinChannelByName(channel3.Name); err != nil {
  1243  		t.Fatal("should be able to join private channel that we're a member of")
  1244  	}
  1245  
  1246  	if _, err := Client.JoinChannelByName(rchannel.Name); err != nil {
  1247  		t.Fatal("should be able to join direct channel that we're a member of")
  1248  	}
  1249  }
  1250  
  1251  func TestJoinChannelByNameDisabledUser(t *testing.T) {
  1252  	th := Setup().InitBasic()
  1253  	defer th.TearDown()
  1254  
  1255  	Client := th.BasicClient
  1256  	team := th.BasicTeam
  1257  
  1258  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1259  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1260  
  1261  	Client.Must(th.BasicClient.RemoveUserFromTeam(th.BasicTeam.Id, th.BasicUser.Id))
  1262  
  1263  	if _, err := th.App.AddUserToChannel(th.BasicUser, channel1); err == nil {
  1264  		t.Fatal("shoudn't be able to join channel")
  1265  	} else {
  1266  		if err.Id != "api.channel.add_user.to.channel.failed.deleted.app_error" {
  1267  			t.Fatal("wrong error")
  1268  		}
  1269  	}
  1270  }
  1271  
  1272  func TestLeaveChannel(t *testing.T) {
  1273  	th := Setup().InitBasic()
  1274  	defer th.TearDown()
  1275  
  1276  	Client := th.BasicClient
  1277  	team := th.BasicTeam
  1278  
  1279  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1280  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1281  
  1282  	channel3 := &model.Channel{DisplayName: "B Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1283  	channel3 = Client.Must(Client.CreateChannel(channel3)).Data.(*model.Channel)
  1284  
  1285  	th.LoginBasic2()
  1286  
  1287  	Client.Must(Client.JoinChannel(channel1.Id))
  1288  
  1289  	// Cannot leave a the private group if you are the only member
  1290  	if _, err := Client.LeaveChannel(channel3.Id); err == nil {
  1291  		t.Fatal("should have errored, cannot leave private group if only one member")
  1292  	}
  1293  
  1294  	rchannel := Client.Must(Client.CreateDirectChannel(th.BasicUser.Id)).Data.(*model.Channel)
  1295  
  1296  	if _, err := Client.LeaveChannel(rchannel.Id); err == nil {
  1297  		t.Fatal("should have errored, cannot leave direct channel")
  1298  	}
  1299  
  1300  	rget := Client.Must(Client.GetChannels(""))
  1301  	cdata := rget.Data.(*model.ChannelList)
  1302  	for _, c := range *cdata {
  1303  		if c.Name == model.DEFAULT_CHANNEL {
  1304  			if _, err := Client.LeaveChannel(c.Id); err == nil {
  1305  				t.Fatal("should have errored on leaving default channel")
  1306  			}
  1307  			break
  1308  		}
  1309  	}
  1310  }
  1311  
  1312  func TestDeleteChannel(t *testing.T) {
  1313  	th := Setup().InitBasic().InitSystemAdmin()
  1314  	defer th.TearDown()
  1315  
  1316  	Client := th.SystemAdminClient
  1317  	team := th.SystemAdminTeam
  1318  	userSystemAdmin := th.SystemAdminUser
  1319  	userTeamAdmin := th.CreateUser(Client)
  1320  	th.LinkUserToTeam(userTeamAdmin, team)
  1321  	user2 := th.CreateUser(Client)
  1322  	th.LinkUserToTeam(user2, team)
  1323  
  1324  	Client.Login(user2.Email, user2.Password)
  1325  
  1326  	channelMadeByCA := &model.Channel{DisplayName: "C Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1327  	channelMadeByCA = Client.Must(Client.CreateChannel(channelMadeByCA)).Data.(*model.Channel)
  1328  
  1329  	Client.AddChannelMember(channelMadeByCA.Id, userTeamAdmin.Id)
  1330  
  1331  	Client.Login(userTeamAdmin.Email, "pwd")
  1332  
  1333  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1334  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1335  
  1336  	channel2 := &model.Channel{DisplayName: "B Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1337  	channel2 = Client.Must(Client.CreateChannel(channel2)).Data.(*model.Channel)
  1338  
  1339  	if _, err := Client.DeleteChannel(channel1.Id); err != nil {
  1340  		t.Fatal(err)
  1341  	}
  1342  
  1343  	if _, err := Client.DeleteChannel(channelMadeByCA.Id); err != nil {
  1344  		t.Fatal("Team admin failed to delete Channel Admin's channel")
  1345  	}
  1346  
  1347  	post1 := &model.Post{ChannelId: channel1.Id, Message: "zz" + model.NewId() + "a"}
  1348  	if _, err := Client.CreatePost(post1); err == nil {
  1349  		t.Fatal("should have failed to post to deleted channel")
  1350  	}
  1351  
  1352  	userStd := th.CreateUser(Client)
  1353  	th.LinkUserToTeam(userStd, team)
  1354  	Client.Login(userStd.Email, userStd.Password)
  1355  
  1356  	if _, err := Client.JoinChannel(channel1.Id); err == nil {
  1357  		t.Fatal("should have failed to join deleted channel")
  1358  	}
  1359  
  1360  	Client.Must(Client.JoinChannel(channel2.Id))
  1361  
  1362  	if _, err := Client.DeleteChannel(channel2.Id); err != nil {
  1363  		t.Fatal(err)
  1364  	}
  1365  
  1366  	rget := Client.Must(Client.GetChannels(""))
  1367  	cdata := rget.Data.(*model.ChannelList)
  1368  	for _, c := range *cdata {
  1369  		if c.Name == model.DEFAULT_CHANNEL {
  1370  			if _, err := Client.DeleteChannel(c.Id); err == nil {
  1371  				t.Fatal("should have errored on deleting default channel")
  1372  			}
  1373  			break
  1374  		}
  1375  	}
  1376  
  1377  	th.UpdateUserToTeamAdmin(userStd, team)
  1378  
  1379  	Client.Logout()
  1380  	Client.Login(userStd.Email, userStd.Password)
  1381  	Client.SetTeamId(team.Id)
  1382  
  1383  	channel2 = th.CreateChannel(Client, team)
  1384  
  1385  	if _, err := Client.DeleteChannel(channel2.Id); err != nil {
  1386  		t.Fatal(err)
  1387  	}
  1388  
  1389  	channel3 := &model.Channel{DisplayName: "B Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1390  	channel3 = Client.Must(Client.CreateChannel(channel3)).Data.(*model.Channel)
  1391  
  1392  	Client.Login(userSystemAdmin.Email, userSystemAdmin.Password)
  1393  	Client.Must(Client.JoinChannel(channel3.Id))
  1394  
  1395  	if _, err := Client.DeleteChannel(channel3.Id); err != nil {
  1396  		t.Fatal(err)
  1397  	}
  1398  
  1399  	if _, err := Client.DeleteChannel(channel3.Id); err == nil {
  1400  		t.Fatal("should have failed - channel already deleted")
  1401  	}
  1402  
  1403  	isLicensed := utils.IsLicensed()
  1404  	license := utils.License()
  1405  	restrictPublicChannel := *th.App.Config().TeamSettings.RestrictPublicChannelManagement
  1406  	restrictPrivateChannel := *th.App.Config().TeamSettings.RestrictPrivateChannelManagement
  1407  	defer func() {
  1408  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelManagement = restrictPublicChannel })
  1409  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManagement = restrictPrivateChannel })
  1410  		utils.SetIsLicensed(isLicensed)
  1411  		utils.SetLicense(license)
  1412  		th.App.SetDefaultRolesBasedOnConfig()
  1413  	}()
  1414  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelManagement = model.PERMISSIONS_ALL })
  1415  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManagement = model.PERMISSIONS_ALL })
  1416  	utils.SetIsLicensed(true)
  1417  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1418  	utils.License().Features.SetDefaults()
  1419  	th.App.SetDefaultRolesBasedOnConfig()
  1420  
  1421  	th.LoginSystemAdmin()
  1422  	th.LinkUserToTeam(th.BasicUser, team)
  1423  
  1424  	channel2 = th.CreateChannel(Client, team)
  1425  	channel3 = th.CreatePrivateChannel(Client, team)
  1426  	channel4 := th.CreateChannel(Client, team)
  1427  	Client.Must(Client.AddChannelMember(channel2.Id, th.BasicUser.Id))
  1428  	Client.Must(Client.AddChannelMember(channel3.Id, th.BasicUser.Id))
  1429  	Client.Must(Client.AddChannelMember(channel4.Id, th.BasicUser.Id))
  1430  	Client.Must(Client.LeaveChannel(channel4.Id))
  1431  
  1432  	Client.Login(th.BasicUser.Email, th.BasicUser.Password)
  1433  
  1434  	if _, err := Client.DeleteChannel(channel2.Id); err != nil {
  1435  		t.Fatal(err)
  1436  	}
  1437  	if _, err := Client.DeleteChannel(channel3.Id); err != nil {
  1438  		t.Fatal(err)
  1439  	}
  1440  
  1441  	utils.SetIsLicensed(true)
  1442  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1443  	utils.License().Features.SetDefaults()
  1444  	th.App.UpdateConfig(func(cfg *model.Config) {
  1445  		*cfg.TeamSettings.RestrictPublicChannelDeletion = model.PERMISSIONS_CHANNEL_ADMIN
  1446  	})
  1447  	th.App.UpdateConfig(func(cfg *model.Config) {
  1448  		*cfg.TeamSettings.RestrictPrivateChannelDeletion = model.PERMISSIONS_CHANNEL_ADMIN
  1449  	})
  1450  	th.App.SetDefaultRolesBasedOnConfig()
  1451  
  1452  	th.LoginSystemAdmin()
  1453  
  1454  	channel2 = th.CreateChannel(Client, team)
  1455  	channel3 = th.CreatePrivateChannel(Client, team)
  1456  	Client.Must(Client.AddChannelMember(channel2.Id, th.BasicUser.Id))
  1457  	Client.Must(Client.AddChannelMember(channel3.Id, th.BasicUser.Id))
  1458  
  1459  	Client.Login(th.BasicUser.Email, th.BasicUser.Password)
  1460  
  1461  	if _, err := Client.DeleteChannel(channel2.Id); err == nil {
  1462  		t.Fatal("should have errored not channel admin")
  1463  	}
  1464  	if _, err := Client.DeleteChannel(channel3.Id); err == nil {
  1465  		t.Fatal("should have errored not channel admin")
  1466  	}
  1467  
  1468  	th.MakeUserChannelAdmin(th.BasicUser, channel2)
  1469  	th.MakeUserChannelAdmin(th.BasicUser, channel3)
  1470  	sqlstore.ClearChannelCaches()
  1471  
  1472  	if _, err := Client.DeleteChannel(channel2.Id); err != nil {
  1473  		t.Fatal(err)
  1474  	}
  1475  	if _, err := Client.DeleteChannel(channel3.Id); err != nil {
  1476  		t.Fatal(err)
  1477  	}
  1478  
  1479  	th.LoginSystemAdmin()
  1480  
  1481  	channel2 = th.CreateChannel(Client, team)
  1482  	channel3 = th.CreatePrivateChannel(Client, team)
  1483  
  1484  	Client.Must(Client.AddChannelMember(channel2.Id, th.BasicUser.Id))
  1485  	Client.Must(Client.AddChannelMember(channel3.Id, th.BasicUser.Id))
  1486  	th.UpdateUserToTeamAdmin(th.BasicUser, team)
  1487  
  1488  	Client.Login(th.BasicUser.Email, th.BasicUser.Password)
  1489  	th.App.InvalidateAllCaches()
  1490  
  1491  	if _, err := Client.DeleteChannel(channel2.Id); err != nil {
  1492  		t.Fatal(err)
  1493  	}
  1494  	if _, err := Client.DeleteChannel(channel3.Id); err != nil {
  1495  		t.Fatal(err)
  1496  	}
  1497  
  1498  	th.UpdateUserToNonTeamAdmin(th.BasicUser, team)
  1499  	th.App.InvalidateAllCaches()
  1500  
  1501  	utils.SetIsLicensed(true)
  1502  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1503  	utils.License().Features.SetDefaults()
  1504  	th.App.UpdateConfig(func(cfg *model.Config) {
  1505  		*cfg.TeamSettings.RestrictPublicChannelDeletion = model.PERMISSIONS_TEAM_ADMIN
  1506  	})
  1507  	th.App.UpdateConfig(func(cfg *model.Config) {
  1508  		*cfg.TeamSettings.RestrictPrivateChannelDeletion = model.PERMISSIONS_TEAM_ADMIN
  1509  	})
  1510  	th.App.SetDefaultRolesBasedOnConfig()
  1511  
  1512  	th.LoginSystemAdmin()
  1513  
  1514  	channel2 = th.CreateChannel(Client, team)
  1515  	channel3 = th.CreatePrivateChannel(Client, team)
  1516  	Client.Must(Client.AddChannelMember(channel2.Id, th.BasicUser.Id))
  1517  	Client.Must(Client.AddChannelMember(channel3.Id, th.BasicUser.Id))
  1518  
  1519  	Client.Login(th.BasicUser.Email, th.BasicUser.Password)
  1520  
  1521  	if _, err := Client.DeleteChannel(channel2.Id); err == nil {
  1522  		t.Fatal("should have errored not team admin")
  1523  	}
  1524  	if _, err := Client.DeleteChannel(channel3.Id); err == nil {
  1525  		t.Fatal("should have errored not team admin")
  1526  	}
  1527  
  1528  	th.UpdateUserToTeamAdmin(th.BasicUser, team)
  1529  	Client.Logout()
  1530  	Client.Login(th.BasicUser.Email, th.BasicUser.Password)
  1531  	Client.SetTeamId(team.Id)
  1532  
  1533  	if _, err := Client.DeleteChannel(channel2.Id); err != nil {
  1534  		t.Fatal(err)
  1535  	}
  1536  	if _, err := Client.DeleteChannel(channel3.Id); err != nil {
  1537  		t.Fatal(err)
  1538  	}
  1539  
  1540  	utils.SetIsLicensed(true)
  1541  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1542  	utils.License().Features.SetDefaults()
  1543  	th.App.UpdateConfig(func(cfg *model.Config) {
  1544  		*cfg.TeamSettings.RestrictPublicChannelDeletion = model.PERMISSIONS_SYSTEM_ADMIN
  1545  	})
  1546  	th.App.UpdateConfig(func(cfg *model.Config) {
  1547  		*cfg.TeamSettings.RestrictPrivateChannelDeletion = model.PERMISSIONS_SYSTEM_ADMIN
  1548  	})
  1549  	th.App.SetDefaultRolesBasedOnConfig()
  1550  
  1551  	th.LoginSystemAdmin()
  1552  
  1553  	channel2 = th.CreateChannel(Client, team)
  1554  	channel3 = th.CreatePrivateChannel(Client, team)
  1555  	Client.Must(Client.AddChannelMember(channel2.Id, th.BasicUser.Id))
  1556  	Client.Must(Client.AddChannelMember(channel3.Id, th.BasicUser.Id))
  1557  
  1558  	Client.Login(th.BasicUser.Email, th.BasicUser.Password)
  1559  
  1560  	if _, err := Client.DeleteChannel(channel2.Id); err == nil {
  1561  		t.Fatal("should have errored not system admin")
  1562  	}
  1563  	if _, err := Client.DeleteChannel(channel3.Id); err == nil {
  1564  		t.Fatal("should have errored not system admin")
  1565  	}
  1566  
  1567  	if _, err := Client.DeleteChannel(channel4.Id); err == nil {
  1568  		t.Fatal("Should not be able to delete channel, even though only one user is left")
  1569  	}
  1570  
  1571  	th.LoginSystemAdmin()
  1572  
  1573  	if _, err := Client.DeleteChannel(channel2.Id); err != nil {
  1574  		t.Fatal(err)
  1575  	}
  1576  	if _, err := Client.DeleteChannel(channel3.Id); err != nil {
  1577  		t.Fatal(err)
  1578  	}
  1579  
  1580  	// Check that if unlicensed the policy restriction is not enforced.
  1581  	utils.SetIsLicensed(false)
  1582  	utils.SetLicense(nil)
  1583  	th.App.SetDefaultRolesBasedOnConfig()
  1584  
  1585  	channel2 = th.CreateChannel(Client, team)
  1586  	channel3 = th.CreatePrivateChannel(Client, team)
  1587  	Client.Must(Client.AddChannelMember(channel2.Id, th.BasicUser.Id))
  1588  	Client.Must(Client.AddChannelMember(channel3.Id, th.BasicUser.Id))
  1589  
  1590  	Client.Login(th.BasicUser.Email, th.BasicUser.Password)
  1591  
  1592  	if _, err := Client.DeleteChannel(channel2.Id); err != nil {
  1593  		t.Fatal(err)
  1594  	}
  1595  	if _, err := Client.DeleteChannel(channel3.Id); err != nil {
  1596  		t.Fatal(err)
  1597  	}
  1598  
  1599  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPublicChannelDeletion = model.PERMISSIONS_ALL })
  1600  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelDeletion = model.PERMISSIONS_ALL })
  1601  	th.App.SetDefaultRolesBasedOnConfig()
  1602  }
  1603  
  1604  func TestGetChannelStats(t *testing.T) {
  1605  	th := Setup().InitBasic()
  1606  	defer th.TearDown()
  1607  
  1608  	Client := th.BasicClient
  1609  	team := th.BasicTeam
  1610  
  1611  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1612  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1613  
  1614  	rget := Client.Must(Client.GetChannelStats(channel1.Id, ""))
  1615  	data := rget.Data.(*model.ChannelStats)
  1616  	if data.ChannelId != channel1.Id {
  1617  		t.Fatal("couldnt't get extra info")
  1618  	} else if data.MemberCount != 1 {
  1619  		t.Fatal("got incorrect member count")
  1620  	}
  1621  }
  1622  
  1623  func TestAddChannelMember(t *testing.T) {
  1624  	th := Setup().InitBasic().InitSystemAdmin()
  1625  	defer th.TearDown()
  1626  
  1627  	Client := th.BasicClient
  1628  	team := th.BasicTeam
  1629  	user1 := th.BasicUser
  1630  	user2 := th.BasicUser2
  1631  	user3 := th.CreateUser(Client)
  1632  
  1633  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1634  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1635  
  1636  	if _, err := Client.AddChannelMember(channel1.Id, user2.Id); err != nil {
  1637  		t.Fatal(err)
  1638  	}
  1639  
  1640  	if _, err := Client.AddChannelMember(channel1.Id, "dsgsdg"); err == nil {
  1641  		t.Fatal("Should have errored, bad user id")
  1642  	}
  1643  
  1644  	if _, err := Client.AddChannelMember(channel1.Id, "12345678901234567890123456"); err == nil {
  1645  		t.Fatal("Should have errored, bad user id")
  1646  	}
  1647  
  1648  	if _, err := Client.AddChannelMember(channel1.Id, user2.Id); err != nil {
  1649  		t.Fatal(err)
  1650  	}
  1651  
  1652  	if _, err := Client.AddChannelMember("sgdsgsdg", user2.Id); err == nil {
  1653  		t.Fatal("Should have errored, bad channel id")
  1654  	}
  1655  
  1656  	channel2 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1657  	channel2 = Client.Must(Client.CreateChannel(channel2)).Data.(*model.Channel)
  1658  
  1659  	th.LoginBasic2()
  1660  
  1661  	if _, err := Client.AddChannelMember(channel2.Id, user2.Id); err == nil {
  1662  		t.Fatal("Should have errored, user not in channel")
  1663  	}
  1664  
  1665  	th.LoginBasic()
  1666  
  1667  	Client.Must(Client.DeleteChannel(channel2.Id))
  1668  
  1669  	if _, err := Client.AddChannelMember(channel2.Id, user2.Id); err == nil {
  1670  		t.Fatal("Should have errored, channel deleted")
  1671  	}
  1672  
  1673  	if _, err := Client.AddChannelMember(channel1.Id, user3.Id); err == nil {
  1674  		t.Fatal("Should have errored, user not on team")
  1675  	}
  1676  
  1677  	// Test policy does not apply to TE.
  1678  	restrictPrivateChannel := *th.App.Config().TeamSettings.RestrictPrivateChannelManageMembers
  1679  	defer func() {
  1680  		th.App.UpdateConfig(func(cfg *model.Config) {
  1681  			*cfg.TeamSettings.RestrictPrivateChannelManageMembers = restrictPrivateChannel
  1682  		})
  1683  	}()
  1684  	th.App.UpdateConfig(func(cfg *model.Config) {
  1685  		*cfg.TeamSettings.RestrictPrivateChannelManageMembers = model.PERMISSIONS_CHANNEL_ADMIN
  1686  	})
  1687  	th.App.SetDefaultRolesBasedOnConfig()
  1688  
  1689  	channel3 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1690  	channel3 = Client.Must(th.SystemAdminClient.CreateChannel(channel3)).Data.(*model.Channel)
  1691  	Client.Must(th.SystemAdminClient.AddChannelMember(channel3.Id, user1.Id))
  1692  	if _, err := Client.AddChannelMember(channel3.Id, user2.Id); err != nil {
  1693  		t.Fatal(err)
  1694  	}
  1695  
  1696  	// Add a license
  1697  	isLicensed := utils.IsLicensed()
  1698  	license := utils.License()
  1699  	defer func() {
  1700  		utils.SetIsLicensed(isLicensed)
  1701  		utils.SetLicense(license)
  1702  		th.App.SetDefaultRolesBasedOnConfig()
  1703  	}()
  1704  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManageMembers = model.PERMISSIONS_ALL })
  1705  	utils.SetIsLicensed(true)
  1706  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1707  	utils.License().Features.SetDefaults()
  1708  	th.App.SetDefaultRolesBasedOnConfig()
  1709  
  1710  	// Check that a regular channel user can add other users.
  1711  	channel4 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1712  	channel4 = Client.Must(th.SystemAdminClient.CreateChannel(channel4)).Data.(*model.Channel)
  1713  	Client.Must(th.SystemAdminClient.AddChannelMember(channel4.Id, user1.Id))
  1714  	if _, err := Client.AddChannelMember(channel4.Id, user2.Id); err != nil {
  1715  		t.Fatal(err)
  1716  	}
  1717  
  1718  	// Test with CHANNEL_ADMIN level permission.
  1719  	th.App.UpdateConfig(func(cfg *model.Config) {
  1720  		*cfg.TeamSettings.RestrictPrivateChannelManageMembers = model.PERMISSIONS_CHANNEL_ADMIN
  1721  	})
  1722  	utils.SetIsLicensed(true)
  1723  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1724  	utils.License().Features.SetDefaults()
  1725  	th.App.SetDefaultRolesBasedOnConfig()
  1726  
  1727  	channel5 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1728  	channel5 = Client.Must(th.SystemAdminClient.CreateChannel(channel5)).Data.(*model.Channel)
  1729  	Client.Must(th.SystemAdminClient.AddChannelMember(channel5.Id, user1.Id))
  1730  	if _, err := Client.AddChannelMember(channel5.Id, user2.Id); err == nil {
  1731  		t.Fatal("Should have failed due to permissions")
  1732  	}
  1733  
  1734  	th.MakeUserChannelAdmin(user1, channel5)
  1735  	th.App.InvalidateAllCaches()
  1736  	utils.SetIsLicensed(true)
  1737  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1738  	utils.License().Features.SetDefaults()
  1739  	th.App.SetDefaultRolesBasedOnConfig()
  1740  
  1741  	if _, err := Client.AddChannelMember(channel5.Id, user2.Id); err != nil {
  1742  		t.Fatal(err)
  1743  	}
  1744  
  1745  	// Test with TEAM_ADMIN level permission.
  1746  	th.App.UpdateConfig(func(cfg *model.Config) {
  1747  		*cfg.TeamSettings.RestrictPrivateChannelManageMembers = model.PERMISSIONS_TEAM_ADMIN
  1748  	})
  1749  	utils.SetIsLicensed(true)
  1750  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1751  	utils.License().Features.SetDefaults()
  1752  	th.App.SetDefaultRolesBasedOnConfig()
  1753  
  1754  	channel6 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1755  	channel6 = Client.Must(th.SystemAdminClient.CreateChannel(channel6)).Data.(*model.Channel)
  1756  	Client.Must(th.SystemAdminClient.AddChannelMember(channel6.Id, user1.Id))
  1757  	if _, err := Client.AddChannelMember(channel6.Id, user2.Id); err == nil {
  1758  		t.Fatal("Should have failed due to permissions")
  1759  	}
  1760  
  1761  	th.UpdateUserToTeamAdmin(user1, team)
  1762  	th.App.InvalidateAllCaches()
  1763  	utils.SetIsLicensed(true)
  1764  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1765  	utils.License().Features.SetDefaults()
  1766  	th.App.SetDefaultRolesBasedOnConfig()
  1767  
  1768  	if _, err := Client.AddChannelMember(channel6.Id, user2.Id); err != nil {
  1769  		t.Fatal(err)
  1770  	}
  1771  
  1772  	// Test with SYSTEM_ADMIN level permission.
  1773  	th.App.UpdateConfig(func(cfg *model.Config) {
  1774  		*cfg.TeamSettings.RestrictPrivateChannelManageMembers = model.PERMISSIONS_SYSTEM_ADMIN
  1775  	})
  1776  	utils.SetIsLicensed(true)
  1777  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1778  	utils.License().Features.SetDefaults()
  1779  	th.App.SetDefaultRolesBasedOnConfig()
  1780  
  1781  	channel7 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1782  	channel7 = Client.Must(th.SystemAdminClient.CreateChannel(channel7)).Data.(*model.Channel)
  1783  	Client.Must(th.SystemAdminClient.AddChannelMember(channel7.Id, user1.Id))
  1784  	if _, err := Client.AddChannelMember(channel7.Id, user2.Id); err == nil {
  1785  		t.Fatal("Should have failed due to permissions")
  1786  	}
  1787  
  1788  	if _, err := th.SystemAdminClient.AddChannelMember(channel7.Id, user2.Id); err != nil {
  1789  		t.Fatal(err)
  1790  	}
  1791  }
  1792  
  1793  func TestRemoveChannelMember(t *testing.T) {
  1794  	th := Setup().InitBasic().InitSystemAdmin()
  1795  	defer th.TearDown()
  1796  
  1797  	Client := th.BasicClient
  1798  	team := th.BasicTeam
  1799  	user1 := th.BasicUser
  1800  	user2 := th.BasicUser2
  1801  	th.UpdateUserToTeamAdmin(user2, team)
  1802  
  1803  	channelMadeByCA := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1804  	channelMadeByCA = Client.Must(Client.CreateChannel(channelMadeByCA)).Data.(*model.Channel)
  1805  
  1806  	Client.Must(Client.AddChannelMember(channelMadeByCA.Id, user2.Id))
  1807  
  1808  	th.LoginBasic2()
  1809  
  1810  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1811  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1812  
  1813  	userStd := th.CreateUser(th.BasicClient)
  1814  	th.LinkUserToTeam(userStd, team)
  1815  
  1816  	Client.Must(Client.AddChannelMember(channel1.Id, userStd.Id))
  1817  
  1818  	Client.Must(Client.AddChannelMember(channelMadeByCA.Id, userStd.Id))
  1819  
  1820  	if _, err := Client.RemoveChannelMember(channel1.Id, "dsgsdg"); err == nil {
  1821  		t.Fatal("Should have errored, bad user id")
  1822  	}
  1823  
  1824  	if _, err := Client.RemoveChannelMember("sgdsgsdg", userStd.Id); err == nil {
  1825  		t.Fatal("Should have errored, bad channel id")
  1826  	}
  1827  
  1828  	if _, err := Client.RemoveChannelMember(channel1.Id, userStd.Id); err != nil {
  1829  		t.Fatal(err)
  1830  	}
  1831  
  1832  	if _, err := Client.RemoveChannelMember(channelMadeByCA.Id, userStd.Id); err != nil {
  1833  		t.Fatal("Team Admin failed to remove member from Channel Admin's channel")
  1834  	}
  1835  
  1836  	channel2 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1837  	channel2 = Client.Must(Client.CreateChannel(channel2)).Data.(*model.Channel)
  1838  
  1839  	Client.Login(userStd.Email, userStd.Password)
  1840  
  1841  	if _, err := Client.RemoveChannelMember(channel2.Id, userStd.Id); err == nil {
  1842  		t.Fatal("Should have errored, user not channel admin")
  1843  	}
  1844  
  1845  	th.LoginBasic2()
  1846  	Client.Must(Client.AddChannelMember(channel2.Id, userStd.Id))
  1847  
  1848  	Client.Must(Client.DeleteChannel(channel2.Id))
  1849  
  1850  	if _, err := Client.RemoveChannelMember(channel2.Id, userStd.Id); err == nil {
  1851  		t.Fatal("Should have errored, channel deleted")
  1852  	}
  1853  
  1854  	townSquare := Client.Must(Client.GetChannelByName("town-square")).Data.(*model.Channel)
  1855  
  1856  	if _, err := Client.RemoveChannelMember(townSquare.Id, userStd.Id); err == nil {
  1857  		t.Fatal("should have errored, channel is default")
  1858  	}
  1859  
  1860  	th.LoginBasic()
  1861  
  1862  	// Test policy does not apply to TE.
  1863  	restrictPrivateChannel := *th.App.Config().TeamSettings.RestrictPrivateChannelManageMembers
  1864  	defer func() {
  1865  		th.App.UpdateConfig(func(cfg *model.Config) {
  1866  			*cfg.TeamSettings.RestrictPrivateChannelManageMembers = restrictPrivateChannel
  1867  		})
  1868  	}()
  1869  	th.App.UpdateConfig(func(cfg *model.Config) {
  1870  		*cfg.TeamSettings.RestrictPrivateChannelManageMembers = model.PERMISSIONS_CHANNEL_ADMIN
  1871  	})
  1872  	th.App.SetDefaultRolesBasedOnConfig()
  1873  
  1874  	channel3 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1875  	channel3 = Client.Must(th.SystemAdminClient.CreateChannel(channel3)).Data.(*model.Channel)
  1876  	Client.Must(th.SystemAdminClient.AddChannelMember(channel3.Id, user1.Id))
  1877  	Client.Must(th.SystemAdminClient.AddChannelMember(channel3.Id, user2.Id))
  1878  	if _, err := Client.RemoveChannelMember(channel3.Id, user2.Id); err != nil {
  1879  		t.Fatal(err)
  1880  	}
  1881  
  1882  	// Add a license
  1883  	isLicensed := utils.IsLicensed()
  1884  	license := utils.License()
  1885  	defer func() {
  1886  		utils.SetIsLicensed(isLicensed)
  1887  		utils.SetLicense(license)
  1888  		th.App.SetDefaultRolesBasedOnConfig()
  1889  	}()
  1890  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictPrivateChannelManageMembers = model.PERMISSIONS_ALL })
  1891  	utils.SetIsLicensed(true)
  1892  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1893  	utils.License().Features.SetDefaults()
  1894  	th.App.SetDefaultRolesBasedOnConfig()
  1895  
  1896  	// Check that a regular channel user can remove other users.
  1897  	channel4 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1898  	channel4 = Client.Must(th.SystemAdminClient.CreateChannel(channel4)).Data.(*model.Channel)
  1899  	Client.Must(th.SystemAdminClient.AddChannelMember(channel4.Id, user1.Id))
  1900  	Client.Must(th.SystemAdminClient.AddChannelMember(channel4.Id, user2.Id))
  1901  	if _, err := Client.RemoveChannelMember(channel4.Id, user2.Id); err != nil {
  1902  		t.Fatal(err)
  1903  	}
  1904  
  1905  	// Test with CHANNEL_ADMIN level permission.
  1906  	th.App.UpdateConfig(func(cfg *model.Config) {
  1907  		*cfg.TeamSettings.RestrictPrivateChannelManageMembers = model.PERMISSIONS_CHANNEL_ADMIN
  1908  	})
  1909  	utils.SetIsLicensed(true)
  1910  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1911  	utils.License().Features.SetDefaults()
  1912  	th.App.SetDefaultRolesBasedOnConfig()
  1913  
  1914  	channel5 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1915  	channel5 = Client.Must(th.SystemAdminClient.CreateChannel(channel5)).Data.(*model.Channel)
  1916  	Client.Must(th.SystemAdminClient.AddChannelMember(channel5.Id, user1.Id))
  1917  	Client.Must(th.SystemAdminClient.AddChannelMember(channel5.Id, user2.Id))
  1918  	if _, err := Client.RemoveChannelMember(channel5.Id, user2.Id); err == nil {
  1919  		t.Fatal("Should have failed due to permissions")
  1920  	}
  1921  
  1922  	th.MakeUserChannelAdmin(user1, channel5)
  1923  	th.App.InvalidateAllCaches()
  1924  	utils.SetIsLicensed(true)
  1925  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1926  	utils.License().Features.SetDefaults()
  1927  
  1928  	if _, err := Client.RemoveChannelMember(channel5.Id, user2.Id); err != nil {
  1929  		t.Fatal(err)
  1930  	}
  1931  
  1932  	// Test with TEAM_ADMIN level permission.
  1933  	th.App.UpdateConfig(func(cfg *model.Config) {
  1934  		*cfg.TeamSettings.RestrictPrivateChannelManageMembers = model.PERMISSIONS_TEAM_ADMIN
  1935  	})
  1936  	utils.SetIsLicensed(true)
  1937  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1938  	utils.License().Features.SetDefaults()
  1939  	th.App.SetDefaultRolesBasedOnConfig()
  1940  
  1941  	channel6 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1942  	channel6 = Client.Must(th.SystemAdminClient.CreateChannel(channel6)).Data.(*model.Channel)
  1943  	Client.Must(th.SystemAdminClient.AddChannelMember(channel6.Id, user1.Id))
  1944  	Client.Must(th.SystemAdminClient.AddChannelMember(channel6.Id, user2.Id))
  1945  	if _, err := Client.RemoveChannelMember(channel6.Id, user2.Id); err == nil {
  1946  		t.Fatal("Should have failed due to permissions")
  1947  	}
  1948  
  1949  	th.UpdateUserToTeamAdmin(user1, team)
  1950  	th.App.InvalidateAllCaches()
  1951  	utils.SetIsLicensed(true)
  1952  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1953  	utils.License().Features.SetDefaults()
  1954  	th.App.SetDefaultRolesBasedOnConfig()
  1955  
  1956  	if _, err := Client.RemoveChannelMember(channel6.Id, user2.Id); err != nil {
  1957  		t.Fatal(err)
  1958  	}
  1959  
  1960  	// Test with SYSTEM_ADMIN level permission.
  1961  	th.App.UpdateConfig(func(cfg *model.Config) {
  1962  		*cfg.TeamSettings.RestrictPrivateChannelManageMembers = model.PERMISSIONS_SYSTEM_ADMIN
  1963  	})
  1964  	utils.SetIsLicensed(true)
  1965  	utils.SetLicense(&model.License{Features: &model.Features{}})
  1966  	utils.License().Features.SetDefaults()
  1967  	th.App.SetDefaultRolesBasedOnConfig()
  1968  
  1969  	channel7 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  1970  	channel7 = Client.Must(th.SystemAdminClient.CreateChannel(channel7)).Data.(*model.Channel)
  1971  	Client.Must(th.SystemAdminClient.AddChannelMember(channel7.Id, user1.Id))
  1972  	Client.Must(th.SystemAdminClient.AddChannelMember(channel7.Id, user2.Id))
  1973  	if _, err := Client.RemoveChannelMember(channel7.Id, user2.Id); err == nil {
  1974  		t.Fatal("Should have failed due to permissions")
  1975  	}
  1976  
  1977  	if _, err := th.SystemAdminClient.RemoveChannelMember(channel7.Id, user2.Id); err != nil {
  1978  		t.Fatal(err)
  1979  	}
  1980  }
  1981  
  1982  func TestUpdateNotifyProps(t *testing.T) {
  1983  	th := Setup().InitBasic()
  1984  	defer th.TearDown()
  1985  
  1986  	Client := th.BasicClient
  1987  	team := th.BasicTeam
  1988  	user := th.BasicUser
  1989  	user2 := th.BasicUser2
  1990  
  1991  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  1992  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  1993  
  1994  	data := make(map[string]string)
  1995  	data["channel_id"] = channel1.Id
  1996  	data["user_id"] = user.Id
  1997  	data[model.DESKTOP_NOTIFY_PROP] = model.CHANNEL_NOTIFY_MENTION
  1998  
  1999  	//timeBeforeUpdate := model.GetMillis()
  2000  	time.Sleep(100 * time.Millisecond)
  2001  
  2002  	// test updating desktop
  2003  	if result, err := Client.UpdateNotifyProps(data); err != nil {
  2004  		t.Fatal(err)
  2005  	} else if notifyProps := result.Data.(map[string]string); notifyProps[model.DESKTOP_NOTIFY_PROP] != model.CHANNEL_NOTIFY_MENTION {
  2006  		t.Fatal("NotifyProps[\"desktop\"] did not update properly")
  2007  	} else if notifyProps[model.MARK_UNREAD_NOTIFY_PROP] != model.CHANNEL_MARK_UNREAD_ALL {
  2008  		t.Fatalf("NotifyProps[\"mark_unread\"] changed to %v", notifyProps[model.MARK_UNREAD_NOTIFY_PROP])
  2009  	}
  2010  
  2011  	// test an empty update
  2012  	delete(data, model.DESKTOP_NOTIFY_PROP)
  2013  
  2014  	if result, err := Client.UpdateNotifyProps(data); err != nil {
  2015  		t.Fatal(err)
  2016  	} else if notifyProps := result.Data.(map[string]string); notifyProps[model.MARK_UNREAD_NOTIFY_PROP] != model.CHANNEL_MARK_UNREAD_ALL {
  2017  		t.Fatalf("NotifyProps[\"mark_unread\"] changed to %v", notifyProps[model.MARK_UNREAD_NOTIFY_PROP])
  2018  	} else if notifyProps[model.DESKTOP_NOTIFY_PROP] != model.CHANNEL_NOTIFY_MENTION {
  2019  		t.Fatalf("NotifyProps[\"desktop\"] changed to %v", notifyProps[model.DESKTOP_NOTIFY_PROP])
  2020  	}
  2021  
  2022  	// test updating mark unread
  2023  	data[model.MARK_UNREAD_NOTIFY_PROP] = model.CHANNEL_MARK_UNREAD_MENTION
  2024  
  2025  	if result, err := Client.UpdateNotifyProps(data); err != nil {
  2026  		t.Fatal(err)
  2027  	} else if notifyProps := result.Data.(map[string]string); notifyProps[model.MARK_UNREAD_NOTIFY_PROP] != model.CHANNEL_MARK_UNREAD_MENTION {
  2028  		t.Fatal("NotifyProps[\"mark_unread\"] did not update properly")
  2029  	} else if notifyProps[model.DESKTOP_NOTIFY_PROP] != model.CHANNEL_NOTIFY_MENTION {
  2030  		t.Fatalf("NotifyProps[\"desktop\"] changed to %v", notifyProps[model.DESKTOP_NOTIFY_PROP])
  2031  	}
  2032  
  2033  	// test updating both
  2034  	data[model.DESKTOP_NOTIFY_PROP] = model.CHANNEL_NOTIFY_NONE
  2035  	data[model.MARK_UNREAD_NOTIFY_PROP] = model.CHANNEL_MARK_UNREAD_MENTION
  2036  
  2037  	if result, err := Client.UpdateNotifyProps(data); err != nil {
  2038  		t.Fatal(err)
  2039  	} else if notifyProps := result.Data.(map[string]string); notifyProps[model.DESKTOP_NOTIFY_PROP] != model.CHANNEL_NOTIFY_NONE {
  2040  		t.Fatal("NotifyProps[\"desktop\"] did not update properly")
  2041  	} else if notifyProps[model.MARK_UNREAD_NOTIFY_PROP] != model.CHANNEL_MARK_UNREAD_MENTION {
  2042  		t.Fatal("NotifyProps[\"mark_unread\"] did not update properly")
  2043  	}
  2044  
  2045  	// test updating push notification preferences
  2046  	delete(data, model.DESKTOP_NOTIFY_PROP)
  2047  	delete(data, model.MARK_UNREAD_NOTIFY_PROP)
  2048  	data[model.PUSH_NOTIFY_PROP] = model.CHANNEL_NOTIFY_MENTION
  2049  	if result, err := Client.UpdateNotifyProps(data); err != nil {
  2050  		t.Fatal(err)
  2051  	} else if notifyProps := result.Data.(map[string]string); notifyProps[model.PUSH_NOTIFY_PROP] != model.CHANNEL_NOTIFY_MENTION {
  2052  		t.Fatal("NotifyProps[\"push\"] did not update properly")
  2053  	}
  2054  
  2055  	// test updating email preferences
  2056  	delete(data, model.PUSH_NOTIFY_PROP)
  2057  	data[model.EMAIL_NOTIFY_PROP] = "true"
  2058  	if result, err := Client.UpdateNotifyProps(data); err != nil {
  2059  		t.Fatal(err)
  2060  	} else if notifyProps := result.Data.(map[string]string); notifyProps[model.EMAIL_NOTIFY_PROP] != "true" {
  2061  		t.Fatal("NotifyProps[\"email\"] did not update properly")
  2062  	}
  2063  
  2064  	// test error cases
  2065  	data["user_id"] = "junk"
  2066  	if _, err := Client.UpdateNotifyProps(data); err == nil {
  2067  		t.Fatal("Should have errored - bad user id")
  2068  	}
  2069  
  2070  	data["user_id"] = "12345678901234567890123456"
  2071  	if _, err := Client.UpdateNotifyProps(data); err == nil {
  2072  		t.Fatal("Should have errored - bad user id")
  2073  	}
  2074  
  2075  	data["user_id"] = user.Id
  2076  	data["channel_id"] = "junk"
  2077  	if _, err := Client.UpdateNotifyProps(data); err == nil {
  2078  		t.Fatal("Should have errored - bad channel id")
  2079  	}
  2080  
  2081  	data["channel_id"] = "12345678901234567890123456"
  2082  	if _, err := Client.UpdateNotifyProps(data); err == nil {
  2083  		t.Fatal("Should have errored - bad channel id")
  2084  	}
  2085  
  2086  	data[model.DESKTOP_NOTIFY_PROP] = "junk"
  2087  	data[model.MARK_UNREAD_NOTIFY_PROP] = model.CHANNEL_MARK_UNREAD_ALL
  2088  	if _, err := Client.UpdateNotifyProps(data); err == nil {
  2089  		t.Fatal("Should have errored - bad desktop notify level")
  2090  	}
  2091  
  2092  	data[model.DESKTOP_NOTIFY_PROP] = model.CHANNEL_NOTIFY_ALL
  2093  	data[model.MARK_UNREAD_NOTIFY_PROP] = "junk"
  2094  	if _, err := Client.UpdateNotifyProps(data); err == nil {
  2095  		t.Fatal("Should have errored - bad mark unread level")
  2096  	}
  2097  
  2098  	data[model.DESKTOP_NOTIFY_PROP] = model.CHANNEL_NOTIFY_ALL
  2099  	data[model.MARK_UNREAD_NOTIFY_PROP] = model.CHANNEL_MARK_UNREAD_ALL
  2100  	data[model.PUSH_NOTIFY_PROP] = "junk"
  2101  	data[model.EMAIL_NOTIFY_PROP] = "true"
  2102  	if _, err := Client.UpdateNotifyProps(data); err == nil {
  2103  		t.Fatal("Should have errored - bad push level")
  2104  	}
  2105  
  2106  	data[model.PUSH_NOTIFY_PROP] = model.CHANNEL_NOTIFY_ALL
  2107  	data[model.EMAIL_NOTIFY_PROP] = "junk"
  2108  	if _, err := Client.UpdateNotifyProps(data); err == nil {
  2109  		t.Fatal("Should have errored - bad email notification option")
  2110  	}
  2111  
  2112  	th.LoginBasic2()
  2113  
  2114  	data["channel_id"] = channel1.Id
  2115  	data["user_id"] = user2.Id
  2116  	data[model.DESKTOP_NOTIFY_PROP] = model.CHANNEL_NOTIFY_MENTION
  2117  	data[model.MARK_UNREAD_NOTIFY_PROP] = model.CHANNEL_MARK_UNREAD_MENTION
  2118  	if _, err := Client.UpdateNotifyProps(data); err == nil {
  2119  		t.Fatal("Should have errored - user not in channel")
  2120  	}
  2121  }
  2122  
  2123  func TestFuzzyChannel(t *testing.T) {
  2124  	th := Setup().InitBasic()
  2125  	defer th.TearDown()
  2126  
  2127  	Client := th.BasicClient
  2128  	team := th.BasicTeam
  2129  
  2130  	// Strings that should pass as acceptable channel names
  2131  	var fuzzyStringsPass = []string{
  2132  		"*", "?", ".", "}{][)(><", "{}[]()<>",
  2133  
  2134  		"qahwah ( قهوة)",
  2135  		"שָׁלוֹם עֲלֵיכֶם",
  2136  		"Ramen チャーシュー chāshū",
  2137  		"言而无信",
  2138  		"Ṫ͌ó̍ ̍͂̓̍̍̀i̊ͯ͒",
  2139  		"&amp; &lt; &qu",
  2140  
  2141  		"' or '1'='1' -- ",
  2142  		"' or '1'='1' ({ ",
  2143  		"' or '1'='1' /* ",
  2144  		"1;DROP TABLE users",
  2145  
  2146  		"<b><i><u><strong><em>",
  2147  
  2148  		"sue@thatmightbe",
  2149  		"sue@thatmightbe.",
  2150  		"sue@thatmightbe.c",
  2151  		"sue@thatmightbe.co",
  2152  		"su+san@thatmightbe.com",
  2153  		"a@b.中国",
  2154  		"1@2.am",
  2155  		"a@b.co.uk",
  2156  		"a@b.cancerresearch",
  2157  		"local@[127.0.0.1]",
  2158  	}
  2159  
  2160  	for i := 0; i < len(fuzzyStringsPass); i++ {
  2161  		channel := model.Channel{DisplayName: fuzzyStringsPass[i], Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  2162  
  2163  		_, err := Client.CreateChannel(&channel)
  2164  		if err != nil {
  2165  			t.Fatal(err)
  2166  		}
  2167  	}
  2168  }
  2169  
  2170  func TestGetChannelMember(t *testing.T) {
  2171  	th := Setup().InitBasic()
  2172  	defer th.TearDown()
  2173  
  2174  	Client := th.BasicClient
  2175  	team := th.BasicTeam
  2176  
  2177  	channel1 := &model.Channel{DisplayName: "A Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  2178  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  2179  
  2180  	if result, err := Client.GetChannelMember(channel1.Id, th.BasicUser.Id); err != nil {
  2181  		t.Fatal(err)
  2182  	} else {
  2183  		cm := result.Data.(*model.ChannelMember)
  2184  
  2185  		if cm.UserId != th.BasicUser.Id {
  2186  			t.Fatal("user ids didn't match")
  2187  		}
  2188  		if cm.ChannelId != channel1.Id {
  2189  			t.Fatal("channel ids didn't match")
  2190  		}
  2191  	}
  2192  
  2193  	if _, err := Client.GetChannelMember(channel1.Id, th.BasicUser2.Id); err == nil {
  2194  		t.Fatal("should have failed - user not in channel")
  2195  	}
  2196  
  2197  	if _, err := Client.GetChannelMember("junk", th.BasicUser2.Id); err == nil {
  2198  		t.Fatal("should have failed - bad channel id")
  2199  	}
  2200  
  2201  	if _, err := Client.GetChannelMember(channel1.Id, "junk"); err == nil {
  2202  		t.Fatal("should have failed - bad user id")
  2203  	}
  2204  
  2205  	if _, err := Client.GetChannelMember("junk", "junk"); err == nil {
  2206  		t.Fatal("should have failed - bad channel and user id")
  2207  	}
  2208  }
  2209  
  2210  func TestSearchMoreChannels(t *testing.T) {
  2211  	th := Setup().InitBasic()
  2212  	defer th.TearDown()
  2213  
  2214  	Client := th.BasicClient
  2215  	team := th.BasicTeam
  2216  
  2217  	channel1 := &model.Channel{DisplayName: "TestAPINameA", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  2218  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  2219  
  2220  	channel2 := &model.Channel{DisplayName: "TestAPINameB", Name: "b" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  2221  	channel2 = Client.Must(Client.CreateChannel(channel2)).Data.(*model.Channel)
  2222  
  2223  	th.LoginBasic2()
  2224  
  2225  	if result, err := Client.SearchMoreChannels(model.ChannelSearch{Term: "TestAPIName"}); err != nil {
  2226  		t.Fatal(err)
  2227  	} else {
  2228  		channels := result.Data.(*model.ChannelList)
  2229  
  2230  		if (*channels)[0].DisplayName != channel1.DisplayName {
  2231  			t.Fatal("full name didn't match")
  2232  		}
  2233  
  2234  		if (*channels)[1].DisplayName != channel2.DisplayName {
  2235  			t.Fatal("full name didn't match")
  2236  		}
  2237  	}
  2238  
  2239  	if result, err := Client.SearchMoreChannels(model.ChannelSearch{Term: "TestAPINameA"}); err != nil {
  2240  		t.Fatal(err)
  2241  	} else {
  2242  		channels := result.Data.(*model.ChannelList)
  2243  
  2244  		if (*channels)[0].DisplayName != channel1.DisplayName {
  2245  			t.Fatal("full name didn't match")
  2246  		}
  2247  	}
  2248  
  2249  	if result, err := Client.SearchMoreChannels(model.ChannelSearch{Term: "TestAPINameB"}); err != nil {
  2250  		t.Fatal(err)
  2251  	} else {
  2252  		channels := result.Data.(*model.ChannelList)
  2253  
  2254  		if (*channels)[0].DisplayName != channel2.DisplayName {
  2255  			t.Fatal("full name didn't match")
  2256  		}
  2257  	}
  2258  
  2259  	if result, err := Client.SearchMoreChannels(model.ChannelSearch{Term: channel1.Name}); err != nil {
  2260  		t.Fatal(err)
  2261  	} else {
  2262  		channels := result.Data.(*model.ChannelList)
  2263  
  2264  		if (*channels)[0].DisplayName != channel1.DisplayName {
  2265  			t.Fatal("full name didn't match")
  2266  		}
  2267  	}
  2268  
  2269  	if _, err := Client.SearchMoreChannels(model.ChannelSearch{Term: ""}); err == nil {
  2270  		t.Fatal("should have errored - empty term")
  2271  	}
  2272  
  2273  	if result, err := Client.SearchMoreChannels(model.ChannelSearch{Term: "blargh"}); err != nil {
  2274  		t.Fatal(err)
  2275  	} else {
  2276  		channels := result.Data.(*model.ChannelList)
  2277  
  2278  		if len(*channels) != 0 {
  2279  			t.Fatal("should have no channels")
  2280  		}
  2281  	}
  2282  
  2283  	Client.SetTeamId("junk")
  2284  	if _, err := Client.SearchMoreChannels(model.ChannelSearch{Term: "blargh"}); err == nil {
  2285  		t.Fatal("should have errored - bad team id")
  2286  	}
  2287  }
  2288  
  2289  func TestAutocompleteChannels(t *testing.T) {
  2290  	th := Setup().InitBasic().InitSystemAdmin()
  2291  	defer th.TearDown()
  2292  
  2293  	Client := th.BasicClient
  2294  	team := th.BasicTeam
  2295  
  2296  	channel1 := &model.Channel{DisplayName: "TestAPINameA", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  2297  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
  2298  
  2299  	channel2 := &model.Channel{DisplayName: "TestAPINameB", Name: "b" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
  2300  	channel2 = Client.Must(Client.CreateChannel(channel2)).Data.(*model.Channel)
  2301  
  2302  	channel3 := &model.Channel{DisplayName: "BadChannelC", Name: "c" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: model.NewId()}
  2303  	if _, err := th.SystemAdminClient.CreateChannel(channel3); err == nil {
  2304  		t.Fatal("channel must have valid team id")
  2305  	}
  2306  
  2307  	channel4 := &model.Channel{DisplayName: "BadChannelD", Name: "d" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
  2308  	channel4 = Client.Must(Client.CreateChannel(channel4)).Data.(*model.Channel)
  2309  
  2310  	if result, err := Client.AutocompleteChannels("TestAPIName"); err != nil {
  2311  		t.Fatal(err)
  2312  	} else {
  2313  		channels := result.Data.(*model.ChannelList)
  2314  
  2315  		if (*channels)[0].DisplayName != channel1.DisplayName {
  2316  			t.Fatal("full name didn't match")
  2317  		}
  2318  
  2319  		if (*channels)[1].DisplayName != channel2.DisplayName {
  2320  			t.Fatal("full name didn't match")
  2321  		}
  2322  	}
  2323  
  2324  	if result, err := Client.AutocompleteChannels(channel1.Name); err != nil {
  2325  		t.Fatal(err)
  2326  	} else {
  2327  		channels := result.Data.(*model.ChannelList)
  2328  
  2329  		if (*channels)[0].DisplayName != channel1.DisplayName {
  2330  			t.Fatal("full name didn't match")
  2331  		}
  2332  	}
  2333  
  2334  	if result, err := Client.AutocompleteChannels("BadChannelC"); err != nil {
  2335  		t.Fatal(err)
  2336  	} else {
  2337  		channels := result.Data.(*model.ChannelList)
  2338  
  2339  		if len(*channels) != 0 {
  2340  			t.Fatal("should have been empty")
  2341  		}
  2342  	}
  2343  
  2344  	if result, err := Client.AutocompleteChannels("BadChannelD"); err != nil {
  2345  		t.Fatal(err)
  2346  	} else {
  2347  		channels := result.Data.(*model.ChannelList)
  2348  
  2349  		if len(*channels) != 0 {
  2350  			t.Fatal("should have been empty")
  2351  		}
  2352  	}
  2353  
  2354  	Client.SetTeamId("junk")
  2355  
  2356  	if _, err := Client.AutocompleteChannels("BadChannelD"); err == nil {
  2357  		t.Fatal("should have failed - bad team id")
  2358  	}
  2359  }
  2360  
  2361  func TestGetChannelByName(t *testing.T) {
  2362  	th := Setup().InitBasic()
  2363  	defer th.TearDown()
  2364  
  2365  	Client := th.BasicClient
  2366  
  2367  	if result, err := Client.GetChannelByName(th.BasicChannel.Name); err != nil {
  2368  		t.Fatal("Failed to get channel")
  2369  	} else {
  2370  		channel := result.Data.(*model.Channel)
  2371  		if channel.Name != th.BasicChannel.Name {
  2372  			t.Fatal("channel names did not match")
  2373  		}
  2374  	}
  2375  
  2376  	if _, err := Client.GetChannelByName("InvalidChannelName"); err == nil {
  2377  		t.Fatal("Failed to get team")
  2378  	}
  2379  
  2380  	Client.Must(Client.Logout())
  2381  
  2382  	user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Jabba the Hutt", Password: "passwd1"}
  2383  	user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User)
  2384  	store.Must(th.App.Srv.Store.User().VerifyEmail(user2.Id))
  2385  
  2386  	Client.SetTeamId(th.BasicTeam.Id)
  2387  
  2388  	Client.Login(user2.Email, "passwd1")
  2389  
  2390  	if _, err := Client.GetChannelByName(th.BasicChannel.Name); err == nil {
  2391  		t.Fatal("Should fail due to not enough permissions")
  2392  	}
  2393  }
  2394  
  2395  func TestViewChannel(t *testing.T) {
  2396  	th := Setup().InitBasic()
  2397  	defer th.TearDown()
  2398  
  2399  	Client := th.BasicClient
  2400  
  2401  	view := model.ChannelView{
  2402  		ChannelId: th.BasicChannel.Id,
  2403  	}
  2404  
  2405  	if _, resp := Client.ViewChannel(view); resp.Error != nil {
  2406  		t.Fatal(resp.Error)
  2407  	}
  2408  
  2409  	view.PrevChannelId = th.BasicChannel.Id
  2410  
  2411  	if _, resp := Client.ViewChannel(view); resp.Error != nil {
  2412  		t.Fatal(resp.Error)
  2413  	}
  2414  
  2415  	view.PrevChannelId = ""
  2416  
  2417  	if _, resp := Client.ViewChannel(view); resp.Error != nil {
  2418  		t.Fatal(resp.Error)
  2419  	}
  2420  
  2421  	view.PrevChannelId = "junk"
  2422  
  2423  	if _, resp := Client.ViewChannel(view); resp.Error != nil {
  2424  		t.Fatal(resp.Error)
  2425  	}
  2426  
  2427  	rdata := Client.Must(Client.GetChannel(th.BasicChannel.Id, "")).Data.(*model.ChannelData)
  2428  
  2429  	if rdata.Channel.TotalMsgCount != rdata.Member.MsgCount {
  2430  		t.Log(rdata.Channel.Id)
  2431  		t.Log(rdata.Member.UserId)
  2432  		t.Log(rdata.Channel.TotalMsgCount)
  2433  		t.Log(rdata.Member.MsgCount)
  2434  		t.Fatal("message counts don't match")
  2435  	}
  2436  
  2437  	if _, err := Client.DoApiPost(Client.GetTeamRoute()+"/channels/view", "garbage"); err == nil {
  2438  		t.Fatal("should have been an error")
  2439  	}
  2440  }
  2441  
  2442  func TestGetChannelMembersByIds(t *testing.T) {
  2443  	th := Setup().InitBasic()
  2444  	defer th.TearDown()
  2445  
  2446  	if _, err := th.App.AddUserToChannel(th.BasicUser2, th.BasicChannel); err != nil {
  2447  		t.Fatal("Could not add second user to channel")
  2448  	}
  2449  
  2450  	if result, err := th.BasicClient.GetChannelMembersByIds(th.BasicChannel.Id, []string{th.BasicUser.Id}); err != nil {
  2451  		t.Fatal(err)
  2452  	} else {
  2453  		member := (*result.Data.(*model.ChannelMembers))[0]
  2454  		if member.UserId != th.BasicUser.Id {
  2455  			t.Fatal("user id did not match")
  2456  		}
  2457  		if member.ChannelId != th.BasicChannel.Id {
  2458  			t.Fatal("team id did not match")
  2459  		}
  2460  	}
  2461  
  2462  	if result, err := th.BasicClient.GetChannelMembersByIds(th.BasicChannel.Id, []string{th.BasicUser.Id, th.BasicUser2.Id, model.NewId()}); err != nil {
  2463  		t.Fatal(err)
  2464  	} else {
  2465  		members := result.Data.(*model.ChannelMembers)
  2466  		if len(*members) != 2 {
  2467  			t.Fatal("length should have been 2, got ", len(*members))
  2468  		}
  2469  	}
  2470  
  2471  	if _, err := th.BasicClient.GetChannelMembersByIds("junk", []string{th.BasicUser.Id}); err == nil {
  2472  		t.Fatal("should have errored - bad team id")
  2473  	}
  2474  
  2475  	if _, err := th.BasicClient.GetChannelMembersByIds(th.BasicChannel.Id, []string{}); err == nil {
  2476  		t.Fatal("should have errored - empty user ids")
  2477  	}
  2478  }
  2479  
  2480  func TestUpdateChannelRoles(t *testing.T) {
  2481  	th := Setup().InitSystemAdmin().InitBasic()
  2482  	defer th.TearDown()
  2483  
  2484  	th.SystemAdminClient.SetTeamId(th.BasicTeam.Id)
  2485  	th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam)
  2486  
  2487  	const CHANNEL_ADMIN = "channel_admin channel_user"
  2488  	const CHANNEL_MEMBER = "channel_user"
  2489  
  2490  	// User 1 creates a channel, making them channel admin by default.
  2491  	createChannel := model.Channel{
  2492  		DisplayName: "Test API Name",
  2493  		Name:        "zz" + model.NewId() + "a",
  2494  		Type:        model.CHANNEL_OPEN,
  2495  		TeamId:      th.BasicTeam.Id,
  2496  	}
  2497  
  2498  	rchannel, err := th.BasicClient.CreateChannel(&createChannel)
  2499  	if err != nil {
  2500  		t.Fatal("Failed to create channel:", err)
  2501  	}
  2502  	channel := rchannel.Data.(*model.Channel)
  2503  
  2504  	// User 1 adds User 2 to the channel, making them a channel member by default.
  2505  	if _, err := th.BasicClient.AddChannelMember(channel.Id, th.BasicUser2.Id); err != nil {
  2506  		t.Fatal("Failed to add user 2 to the channel:", err)
  2507  	}
  2508  
  2509  	// System Admin can demote User 1 (channel admin).
  2510  	if data, meta := th.SystemAdminClient.UpdateChannelRoles(channel.Id, th.BasicUser.Id, CHANNEL_MEMBER); data == nil {
  2511  		t.Fatal("System Admin failed to demote channel admin to channel member:", meta)
  2512  	}
  2513  
  2514  	// User 1 (channel_member) cannot promote user 2 (channel_member).
  2515  	if data, meta := th.BasicClient.UpdateChannelRoles(channel.Id, th.BasicUser2.Id, CHANNEL_ADMIN); data != nil {
  2516  		t.Fatal("Channel member should not be able to promote another channel member to channel admin:", meta)
  2517  	}
  2518  
  2519  	// System Admin can promote user 1 (channel member).
  2520  	if data, meta := th.SystemAdminClient.UpdateChannelRoles(channel.Id, th.BasicUser.Id, CHANNEL_ADMIN); data == nil {
  2521  		t.Fatal("System Admin failed to promote channel member to channel admin:", meta)
  2522  	}
  2523  
  2524  	// User 1 (channel_admin) can promote User 2 (channel member).
  2525  	if data, meta := th.BasicClient.UpdateChannelRoles(channel.Id, th.BasicUser2.Id, CHANNEL_ADMIN); data == nil {
  2526  		t.Fatal("Channel admin failed to promote channel member to channel admin:", meta)
  2527  	}
  2528  
  2529  	// User 1 (channel admin) can demote User 2 (channel admin).
  2530  	if data, meta := th.BasicClient.UpdateChannelRoles(channel.Id, th.BasicUser2.Id, CHANNEL_MEMBER); data == nil {
  2531  		t.Fatal("Channel admin failed to demote channel admin to channel member:", meta)
  2532  	}
  2533  
  2534  	// User 1 (channel admin) can demote itself.
  2535  	if data, meta := th.BasicClient.UpdateChannelRoles(channel.Id, th.BasicUser.Id, CHANNEL_MEMBER); data == nil {
  2536  		t.Fatal("Channel admin failed to demote itself to channel member:", meta)
  2537  	}
  2538  
  2539  	// Promote User2 again for next test.
  2540  	if data, meta := th.SystemAdminClient.UpdateChannelRoles(channel.Id, th.BasicUser2.Id, CHANNEL_ADMIN); data == nil {
  2541  		t.Fatal("System Admin failed to promote channel member to channel admin:", meta)
  2542  	}
  2543  
  2544  	// User 1 (channel member) cannot demote user 2 (channel admin).
  2545  	if data, meta := th.BasicClient.UpdateChannelRoles(channel.Id, th.BasicUser2.Id, CHANNEL_MEMBER); data != nil {
  2546  		t.Fatal("Channel member should not be able to demote another channel admin to channel member:", meta)
  2547  	}
  2548  
  2549  	// User 1 (channel member) cannot promote itself.
  2550  	if data, meta := th.BasicClient.UpdateChannelRoles(channel.Id, th.BasicUser.Id, CHANNEL_ADMIN); data != nil {
  2551  		t.Fatal("Channel member should not be able to promote itself to channel admin:", meta)
  2552  	}
  2553  }
  2554  
  2555  func TestGetPinnedPosts(t *testing.T) {
  2556  	th := Setup().InitBasic()
  2557  	defer th.TearDown()
  2558  
  2559  	Client := th.BasicClient
  2560  
  2561  	post1 := th.BasicPost
  2562  	r1 := Client.Must(Client.GetPinnedPosts(post1.ChannelId)).Data.(*model.PostList)
  2563  	if len(r1.Order) != 0 {
  2564  		t.Fatal("should not have gotten a pinned post")
  2565  	}
  2566  
  2567  	post2 := th.PinnedPost
  2568  	r2 := Client.Must(Client.GetPinnedPosts(post2.ChannelId)).Data.(*model.PostList)
  2569  	if len(r2.Order) == 0 {
  2570  		t.Fatal("should have gotten a pinned post")
  2571  	}
  2572  
  2573  	if _, ok := r2.Posts[post2.Id]; !ok {
  2574  		t.Fatal("missing pinned post")
  2575  	}
  2576  }