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