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