github.com/gigforks/mattermost-server@v4.9.1-0.20180619094218-800d97fa55d0+incompatible/api4/team_test.go (about) 1 // Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package api4 5 6 import ( 7 "encoding/binary" 8 "fmt" 9 "net/http" 10 "strconv" 11 "strings" 12 "testing" 13 14 "encoding/base64" 15 16 "github.com/mattermost/mattermost-server/app" 17 "github.com/mattermost/mattermost-server/model" 18 "github.com/mattermost/mattermost-server/utils" 19 "github.com/stretchr/testify/assert" 20 "github.com/stretchr/testify/require" 21 ) 22 23 func TestCreateTeam(t *testing.T) { 24 th := Setup().InitBasic() 25 defer th.TearDown() 26 Client := th.Client 27 28 team := &model.Team{Name: GenerateTestUsername(), DisplayName: "Some Team", Type: model.TEAM_OPEN} 29 rteam, resp := Client.CreateTeam(team) 30 CheckNoError(t, resp) 31 CheckCreatedStatus(t, resp) 32 33 if rteam.Name != team.Name { 34 t.Fatal("names did not match") 35 } 36 37 if rteam.DisplayName != team.DisplayName { 38 t.Fatal("display names did not match") 39 } 40 41 if rteam.Type != team.Type { 42 t.Fatal("types did not match") 43 } 44 45 _, resp = Client.CreateTeam(rteam) 46 CheckBadRequestStatus(t, resp) 47 48 rteam.Id = "" 49 _, resp = Client.CreateTeam(rteam) 50 CheckErrorMessage(t, resp, "store.sql_team.save.domain_exists.app_error") 51 CheckBadRequestStatus(t, resp) 52 53 rteam.Name = "" 54 _, resp = Client.CreateTeam(rteam) 55 CheckErrorMessage(t, resp, "model.team.is_valid.characters.app_error") 56 CheckBadRequestStatus(t, resp) 57 58 if r, err := Client.DoApiPost("/teams", "garbage"); err == nil { 59 t.Fatal("should have errored") 60 } else { 61 if r.StatusCode != http.StatusBadRequest { 62 t.Log("actual: " + strconv.Itoa(r.StatusCode)) 63 t.Log("expected: " + strconv.Itoa(http.StatusBadRequest)) 64 t.Fatal("wrong status code") 65 } 66 } 67 68 Client.Logout() 69 70 _, resp = Client.CreateTeam(rteam) 71 CheckUnauthorizedStatus(t, resp) 72 73 // Check the appropriate permissions are enforced. 74 defaultRolePermissions := th.SaveDefaultRolePermissions() 75 defer func() { 76 th.RestoreDefaultRolePermissions(defaultRolePermissions) 77 }() 78 79 th.RemovePermissionFromRole(model.PERMISSION_CREATE_TEAM.Id, model.SYSTEM_USER_ROLE_ID) 80 th.AddPermissionToRole(model.PERMISSION_CREATE_TEAM.Id, model.SYSTEM_ADMIN_ROLE_ID) 81 82 th.LoginBasic() 83 _, resp = Client.CreateTeam(team) 84 CheckForbiddenStatus(t, resp) 85 } 86 87 func TestCreateTeamSanitization(t *testing.T) { 88 th := Setup().InitBasic().InitSystemAdmin() 89 defer th.TearDown() 90 91 // Non-admin users can create a team, but they become a team admin by doing so 92 93 t.Run("team admin", func(t *testing.T) { 94 team := &model.Team{ 95 DisplayName: t.Name() + "_1", 96 Name: GenerateTestTeamName(), 97 Email: th.GenerateTestEmail(), 98 Type: model.TEAM_OPEN, 99 AllowedDomains: "simulator.amazonses.com", 100 } 101 102 rteam, resp := th.Client.CreateTeam(team) 103 CheckNoError(t, resp) 104 if rteam.Email == "" { 105 t.Fatal("should not have sanitized email") 106 } else if rteam.AllowedDomains == "" { 107 t.Fatal("should not have sanitized allowed domains") 108 } 109 }) 110 111 t.Run("system admin", func(t *testing.T) { 112 team := &model.Team{ 113 DisplayName: t.Name() + "_2", 114 Name: GenerateTestTeamName(), 115 Email: th.GenerateTestEmail(), 116 Type: model.TEAM_OPEN, 117 AllowedDomains: "simulator.amazonses.com", 118 } 119 120 rteam, resp := th.SystemAdminClient.CreateTeam(team) 121 CheckNoError(t, resp) 122 if rteam.Email == "" { 123 t.Fatal("should not have sanitized email") 124 } else if rteam.AllowedDomains == "" { 125 t.Fatal("should not have sanitized allowed domains") 126 } 127 }) 128 } 129 130 func TestGetTeam(t *testing.T) { 131 th := Setup().InitBasic().InitSystemAdmin() 132 defer th.TearDown() 133 Client := th.Client 134 team := th.BasicTeam 135 136 rteam, resp := Client.GetTeam(team.Id, "") 137 CheckNoError(t, resp) 138 139 if rteam.Id != team.Id { 140 t.Fatal("wrong team") 141 } 142 143 _, resp = Client.GetTeam("junk", "") 144 CheckBadRequestStatus(t, resp) 145 146 _, resp = Client.GetTeam("", "") 147 CheckNotFoundStatus(t, resp) 148 149 _, resp = Client.GetTeam(model.NewId(), "") 150 CheckNotFoundStatus(t, resp) 151 152 th.LoginTeamAdmin() 153 154 team2 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: false} 155 rteam2, _ := Client.CreateTeam(team2) 156 157 team3 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_INVITE, AllowOpenInvite: true} 158 rteam3, _ := Client.CreateTeam(team3) 159 160 th.LoginBasic() 161 // AllowInviteOpen is false and team is open, and user is not on team 162 _, resp = Client.GetTeam(rteam2.Id, "") 163 CheckForbiddenStatus(t, resp) 164 165 // AllowInviteOpen is true and team is invite, and user is not on team 166 _, resp = Client.GetTeam(rteam3.Id, "") 167 CheckForbiddenStatus(t, resp) 168 169 Client.Logout() 170 _, resp = Client.GetTeam(team.Id, "") 171 CheckUnauthorizedStatus(t, resp) 172 173 _, resp = th.SystemAdminClient.GetTeam(rteam2.Id, "") 174 CheckNoError(t, resp) 175 } 176 177 func TestGetTeamSanitization(t *testing.T) { 178 th := Setup().InitBasic().InitSystemAdmin() 179 defer th.TearDown() 180 181 team, resp := th.Client.CreateTeam(&model.Team{ 182 DisplayName: t.Name() + "_1", 183 Name: GenerateTestTeamName(), 184 Email: th.GenerateTestEmail(), 185 Type: model.TEAM_OPEN, 186 AllowedDomains: "simulator.amazonses.com", 187 }) 188 CheckNoError(t, resp) 189 190 t.Run("team user", func(t *testing.T) { 191 th.LinkUserToTeam(th.BasicUser2, team) 192 193 client := th.CreateClient() 194 th.LoginBasic2WithClient(client) 195 196 rteam, resp := client.GetTeam(team.Id, "") 197 CheckNoError(t, resp) 198 if rteam.Email != "" { 199 t.Fatal("should've sanitized email") 200 } else if rteam.AllowedDomains != "" { 201 t.Fatal("should've sanitized allowed domains") 202 } 203 }) 204 205 t.Run("team admin", func(t *testing.T) { 206 rteam, resp := th.Client.GetTeam(team.Id, "") 207 CheckNoError(t, resp) 208 if rteam.Email == "" { 209 t.Fatal("should not have sanitized email") 210 } else if rteam.AllowedDomains == "" { 211 t.Fatal("should not have sanitized allowed domains") 212 } 213 }) 214 215 t.Run("system admin", func(t *testing.T) { 216 rteam, resp := th.SystemAdminClient.GetTeam(team.Id, "") 217 CheckNoError(t, resp) 218 if rteam.Email == "" { 219 t.Fatal("should not have sanitized email") 220 } else if rteam.AllowedDomains == "" { 221 t.Fatal("should not have sanitized allowed domains") 222 } 223 }) 224 } 225 226 func TestGetTeamUnread(t *testing.T) { 227 th := Setup().InitBasic().InitSystemAdmin() 228 defer th.TearDown() 229 Client := th.Client 230 231 teamUnread, resp := Client.GetTeamUnread(th.BasicTeam.Id, th.BasicUser.Id) 232 CheckNoError(t, resp) 233 if teamUnread.TeamId != th.BasicTeam.Id { 234 t.Fatal("wrong team id returned for regular user call") 235 } 236 237 _, resp = Client.GetTeamUnread("junk", th.BasicUser.Id) 238 CheckBadRequestStatus(t, resp) 239 240 _, resp = Client.GetTeamUnread(th.BasicTeam.Id, "junk") 241 CheckBadRequestStatus(t, resp) 242 243 _, resp = Client.GetTeamUnread(model.NewId(), th.BasicUser.Id) 244 CheckForbiddenStatus(t, resp) 245 246 _, resp = Client.GetTeamUnread(th.BasicTeam.Id, model.NewId()) 247 CheckForbiddenStatus(t, resp) 248 249 Client.Logout() 250 _, resp = Client.GetTeamUnread(th.BasicTeam.Id, th.BasicUser.Id) 251 CheckUnauthorizedStatus(t, resp) 252 253 teamUnread, resp = th.SystemAdminClient.GetTeamUnread(th.BasicTeam.Id, th.BasicUser.Id) 254 CheckNoError(t, resp) 255 if teamUnread.TeamId != th.BasicTeam.Id { 256 t.Fatal("wrong team id returned") 257 } 258 } 259 260 func TestUpdateTeam(t *testing.T) { 261 th := Setup().InitBasic().InitSystemAdmin() 262 defer th.TearDown() 263 Client := th.Client 264 265 team := &model.Team{DisplayName: "Name", Description: "Some description", AllowOpenInvite: false, InviteId: "inviteid0", Name: "z-z-" + model.NewId() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN} 266 team, _ = Client.CreateTeam(team) 267 268 team.Description = "updated description" 269 uteam, resp := Client.UpdateTeam(team) 270 CheckNoError(t, resp) 271 272 if uteam.Description != "updated description" { 273 t.Fatal("Update failed") 274 } 275 276 team.DisplayName = "Updated Name" 277 uteam, resp = Client.UpdateTeam(team) 278 CheckNoError(t, resp) 279 280 if uteam.DisplayName != "Updated Name" { 281 t.Fatal("Update failed") 282 } 283 284 team.AllowOpenInvite = true 285 uteam, resp = Client.UpdateTeam(team) 286 CheckNoError(t, resp) 287 288 if !uteam.AllowOpenInvite { 289 t.Fatal("Update failed") 290 } 291 292 team.InviteId = "inviteid1" 293 uteam, resp = Client.UpdateTeam(team) 294 CheckNoError(t, resp) 295 296 if uteam.InviteId != "inviteid1" { 297 t.Fatal("Update failed") 298 } 299 300 team.AllowedDomains = "domain" 301 uteam, resp = Client.UpdateTeam(team) 302 CheckNoError(t, resp) 303 304 if uteam.AllowedDomains != "domain" { 305 t.Fatal("Update failed") 306 } 307 308 team.Name = "Updated name" 309 uteam, resp = Client.UpdateTeam(team) 310 CheckNoError(t, resp) 311 312 if uteam.Name == "Updated name" { 313 t.Fatal("Should not update name") 314 } 315 316 team.Email = "test@domain.com" 317 uteam, resp = Client.UpdateTeam(team) 318 CheckNoError(t, resp) 319 320 if uteam.Email == "test@domain.com" { 321 t.Fatal("Should not update email") 322 } 323 324 team.Type = model.TEAM_INVITE 325 uteam, resp = Client.UpdateTeam(team) 326 CheckNoError(t, resp) 327 328 if uteam.Type == model.TEAM_INVITE { 329 t.Fatal("Should not update type") 330 } 331 332 originalTeamId := team.Id 333 team.Id = model.NewId() 334 335 if r, err := Client.DoApiPut(Client.GetTeamRoute(originalTeamId), team.ToJson()); err != nil { 336 t.Fatal(err) 337 } else { 338 uteam = model.TeamFromJson(r.Body) 339 } 340 341 if uteam.Id != originalTeamId { 342 t.Fatal("wrong team id") 343 } 344 345 team.Id = "fake" 346 _, resp = Client.UpdateTeam(team) 347 CheckBadRequestStatus(t, resp) 348 349 Client.Logout() 350 _, resp = Client.UpdateTeam(team) 351 CheckUnauthorizedStatus(t, resp) 352 353 team.Id = originalTeamId 354 _, resp = th.SystemAdminClient.UpdateTeam(team) 355 CheckNoError(t, resp) 356 } 357 358 func TestUpdateTeamSanitization(t *testing.T) { 359 th := Setup().InitBasic().InitSystemAdmin() 360 defer th.TearDown() 361 362 team, resp := th.Client.CreateTeam(&model.Team{ 363 DisplayName: t.Name() + "_1", 364 Name: GenerateTestTeamName(), 365 Email: th.GenerateTestEmail(), 366 Type: model.TEAM_OPEN, 367 AllowedDomains: "simulator.amazonses.com", 368 }) 369 CheckNoError(t, resp) 370 371 // Non-admin users cannot update the team 372 373 t.Run("team admin", func(t *testing.T) { 374 rteam, resp := th.Client.UpdateTeam(team) 375 CheckNoError(t, resp) 376 if rteam.Email == "" { 377 t.Fatal("should not have sanitized email for admin") 378 } else if rteam.AllowedDomains == "" { 379 t.Fatal("should not have sanitized allowed domains") 380 } 381 }) 382 383 t.Run("system admin", func(t *testing.T) { 384 rteam, resp := th.SystemAdminClient.UpdateTeam(team) 385 CheckNoError(t, resp) 386 if rteam.Email == "" { 387 t.Fatal("should not have sanitized email for admin") 388 } else if rteam.AllowedDomains == "" { 389 t.Fatal("should not have sanitized allowed domains") 390 } 391 }) 392 } 393 394 func TestPatchTeam(t *testing.T) { 395 th := Setup().InitBasic().InitSystemAdmin() 396 defer th.TearDown() 397 Client := th.Client 398 399 team := &model.Team{DisplayName: "Name", Description: "Some description", CompanyName: "Some company name", AllowOpenInvite: false, InviteId: "inviteid0", Name: "z-z-" + model.NewId() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN} 400 team, _ = Client.CreateTeam(team) 401 402 patch := &model.TeamPatch{} 403 404 patch.DisplayName = model.NewString("Other name") 405 patch.Description = model.NewString("Other description") 406 patch.CompanyName = model.NewString("Other company name") 407 patch.InviteId = model.NewString("inviteid1") 408 patch.AllowOpenInvite = model.NewBool(true) 409 410 rteam, resp := Client.PatchTeam(team.Id, patch) 411 CheckNoError(t, resp) 412 413 if rteam.DisplayName != "Other name" { 414 t.Fatal("DisplayName did not update properly") 415 } 416 if rteam.Description != "Other description" { 417 t.Fatal("Description did not update properly") 418 } 419 if rteam.CompanyName != "Other company name" { 420 t.Fatal("CompanyName did not update properly") 421 } 422 if rteam.InviteId != "inviteid1" { 423 t.Fatal("InviteId did not update properly") 424 } 425 if !rteam.AllowOpenInvite { 426 t.Fatal("AllowOpenInvite did not update properly") 427 } 428 429 _, resp = Client.PatchTeam("junk", patch) 430 CheckBadRequestStatus(t, resp) 431 432 _, resp = Client.PatchTeam(GenerateTestId(), patch) 433 CheckForbiddenStatus(t, resp) 434 435 if r, err := Client.DoApiPut("/teams/"+team.Id+"/patch", "garbage"); err == nil { 436 t.Fatal("should have errored") 437 } else { 438 if r.StatusCode != http.StatusBadRequest { 439 t.Log("actual: " + strconv.Itoa(r.StatusCode)) 440 t.Log("expected: " + strconv.Itoa(http.StatusBadRequest)) 441 t.Fatal("wrong status code") 442 } 443 } 444 445 Client.Logout() 446 _, resp = Client.PatchTeam(team.Id, patch) 447 CheckUnauthorizedStatus(t, resp) 448 449 th.LoginBasic2() 450 _, resp = Client.PatchTeam(team.Id, patch) 451 CheckForbiddenStatus(t, resp) 452 453 _, resp = th.SystemAdminClient.PatchTeam(team.Id, patch) 454 CheckNoError(t, resp) 455 } 456 457 func TestPatchTeamSanitization(t *testing.T) { 458 th := Setup().InitBasic().InitSystemAdmin() 459 defer th.TearDown() 460 461 team, resp := th.Client.CreateTeam(&model.Team{ 462 DisplayName: t.Name() + "_1", 463 Name: GenerateTestTeamName(), 464 Email: th.GenerateTestEmail(), 465 Type: model.TEAM_OPEN, 466 AllowedDomains: "simulator.amazonses.com", 467 }) 468 CheckNoError(t, resp) 469 470 // Non-admin users cannot update the team 471 472 t.Run("team admin", func(t *testing.T) { 473 rteam, resp := th.Client.PatchTeam(team.Id, &model.TeamPatch{}) 474 CheckNoError(t, resp) 475 if rteam.Email == "" { 476 t.Fatal("should not have sanitized email for admin") 477 } else if rteam.AllowedDomains == "" { 478 t.Fatal("should not have sanitized allowed domains") 479 } 480 }) 481 482 t.Run("system admin", func(t *testing.T) { 483 rteam, resp := th.SystemAdminClient.PatchTeam(team.Id, &model.TeamPatch{}) 484 CheckNoError(t, resp) 485 if rteam.Email == "" { 486 t.Fatal("should not have sanitized email for admin") 487 } else if rteam.AllowedDomains == "" { 488 t.Fatal("should not have sanitized allowed domains") 489 } 490 }) 491 } 492 493 func TestSoftDeleteTeam(t *testing.T) { 494 th := Setup().InitBasic().InitSystemAdmin() 495 defer th.TearDown() 496 Client := th.Client 497 498 team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN} 499 team, _ = Client.CreateTeam(team) 500 501 ok, resp := Client.SoftDeleteTeam(team.Id) 502 CheckNoError(t, resp) 503 504 if !ok { 505 t.Fatal("should have returned true") 506 } 507 508 rteam, err := th.App.GetTeam(team.Id) 509 if err != nil { 510 t.Fatal("should have returned archived team") 511 } 512 if rteam.DeleteAt == 0 { 513 t.Fatal("should have not set to zero") 514 } 515 516 ok, resp = Client.SoftDeleteTeam("junk") 517 CheckBadRequestStatus(t, resp) 518 519 if ok { 520 t.Fatal("should have returned false") 521 } 522 523 otherTeam := th.BasicTeam 524 _, resp = Client.SoftDeleteTeam(otherTeam.Id) 525 CheckForbiddenStatus(t, resp) 526 527 Client.Logout() 528 _, resp = Client.SoftDeleteTeam(otherTeam.Id) 529 CheckUnauthorizedStatus(t, resp) 530 531 _, resp = th.SystemAdminClient.SoftDeleteTeam(otherTeam.Id) 532 CheckNoError(t, resp) 533 } 534 535 func TestPermanentDeleteTeam(t *testing.T) { 536 th := Setup().InitBasic().InitSystemAdmin() 537 defer th.TearDown() 538 Client := th.Client 539 540 team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN} 541 team, _ = Client.CreateTeam(team) 542 543 ok, resp := Client.PermanentDeleteTeam(team.Id) 544 CheckNoError(t, resp) 545 546 if !ok { 547 t.Fatal("should have returned true") 548 } 549 550 // The team is deleted in the background, its only soft deleted at this 551 // time 552 rteam, err := th.App.GetTeam(team.Id) 553 if err != nil { 554 t.Fatal("should have returned archived team") 555 } 556 if rteam.DeleteAt == 0 { 557 t.Fatal("should have not set to zero") 558 } 559 560 ok, resp = Client.PermanentDeleteTeam("junk") 561 CheckBadRequestStatus(t, resp) 562 563 if ok { 564 t.Fatal("should have returned false") 565 } 566 } 567 568 func TestGetAllTeams(t *testing.T) { 569 th := Setup().InitBasic().InitSystemAdmin() 570 defer th.TearDown() 571 Client := th.Client 572 573 team := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: true} 574 _, resp := Client.CreateTeam(team) 575 CheckNoError(t, resp) 576 577 team2 := &model.Team{DisplayName: "Name2", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: true} 578 _, resp = Client.CreateTeam(team2) 579 CheckNoError(t, resp) 580 581 rrteams, resp := Client.GetAllTeams("", 0, 1) 582 CheckNoError(t, resp) 583 584 if len(rrteams) != 1 { 585 t.Log(len(rrteams)) 586 t.Fatal("wrong number of teams - should be 1") 587 } 588 589 for _, rt := range rrteams { 590 if !rt.AllowOpenInvite { 591 t.Fatal("not all teams are open") 592 } 593 } 594 595 rrteams, resp = Client.GetAllTeams("", 0, 10) 596 CheckNoError(t, resp) 597 598 for _, rt := range rrteams { 599 if !rt.AllowOpenInvite { 600 t.Fatal("not all teams are open") 601 } 602 } 603 604 rrteams1, resp := Client.GetAllTeams("", 1, 0) 605 CheckNoError(t, resp) 606 607 if len(rrteams1) != 0 { 608 t.Fatal("wrong number of teams - should be 0") 609 } 610 611 rrteams2, resp := th.SystemAdminClient.GetAllTeams("", 1, 1) 612 CheckNoError(t, resp) 613 614 if len(rrteams2) != 1 { 615 t.Fatal("wrong number of teams - should be 1") 616 } 617 618 rrteams2, resp = Client.GetAllTeams("", 1, 0) 619 CheckNoError(t, resp) 620 621 if len(rrteams2) != 0 { 622 t.Fatal("wrong number of teams - should be 0") 623 } 624 625 rrteams, resp = Client.GetAllTeams("", 0, 2) 626 CheckNoError(t, resp) 627 rrteams2, resp = Client.GetAllTeams("", 1, 2) 628 CheckNoError(t, resp) 629 630 for _, t1 := range rrteams { 631 for _, t2 := range rrteams2 { 632 assert.NotEqual(t, t1.Id, t2.Id, "different pages should not have the same teams") 633 } 634 } 635 636 Client.Logout() 637 _, resp = Client.GetAllTeams("", 1, 10) 638 CheckUnauthorizedStatus(t, resp) 639 } 640 641 func TestGetAllTeamsSanitization(t *testing.T) { 642 th := Setup().InitBasic().InitSystemAdmin() 643 defer th.TearDown() 644 645 team, resp := th.Client.CreateTeam(&model.Team{ 646 DisplayName: t.Name() + "_1", 647 Name: GenerateTestTeamName(), 648 Email: th.GenerateTestEmail(), 649 Type: model.TEAM_OPEN, 650 AllowedDomains: "simulator.amazonses.com", 651 AllowOpenInvite: true, 652 }) 653 CheckNoError(t, resp) 654 team2, resp := th.SystemAdminClient.CreateTeam(&model.Team{ 655 DisplayName: t.Name() + "_2", 656 Name: GenerateTestTeamName(), 657 Email: th.GenerateTestEmail(), 658 Type: model.TEAM_OPEN, 659 AllowedDomains: "simulator.amazonses.com", 660 AllowOpenInvite: true, 661 }) 662 CheckNoError(t, resp) 663 664 // This may not work if the server has over 1000 open teams on it 665 666 t.Run("team admin/non-admin", func(t *testing.T) { 667 teamFound := false 668 team2Found := false 669 670 rteams, resp := th.Client.GetAllTeams("", 0, 1000) 671 CheckNoError(t, resp) 672 for _, rteam := range rteams { 673 if rteam.Id == team.Id { 674 teamFound = true 675 if rteam.Email == "" { 676 t.Fatal("should not have sanitized email for team admin") 677 } else if rteam.AllowedDomains == "" { 678 t.Fatal("should not have sanitized allowed domains for team admin") 679 } 680 } else if rteam.Id == team2.Id { 681 team2Found = true 682 if rteam.Email != "" { 683 t.Fatal("should've sanitized email for non-admin") 684 } else if rteam.AllowedDomains != "" { 685 t.Fatal("should've sanitized allowed domains for non-admin") 686 } 687 } 688 } 689 690 if !teamFound || !team2Found { 691 t.Fatal("wasn't returned the expected teams so the test wasn't run correctly") 692 } 693 }) 694 695 t.Run("system admin", func(t *testing.T) { 696 rteams, resp := th.SystemAdminClient.GetAllTeams("", 0, 1000) 697 CheckNoError(t, resp) 698 for _, rteam := range rteams { 699 if rteam.Id != team.Id && rteam.Id != team2.Id { 700 continue 701 } 702 703 if rteam.Email == "" { 704 t.Fatal("should not have sanitized email") 705 } else if rteam.AllowedDomains == "" { 706 t.Fatal("should not have sanitized allowed domains") 707 } 708 } 709 }) 710 } 711 712 func TestGetTeamByName(t *testing.T) { 713 th := Setup().InitBasic().InitSystemAdmin() 714 defer th.TearDown() 715 Client := th.Client 716 team := th.BasicTeam 717 718 rteam, resp := Client.GetTeamByName(team.Name, "") 719 CheckNoError(t, resp) 720 721 if rteam.Name != team.Name { 722 t.Fatal("wrong team") 723 } 724 725 _, resp = Client.GetTeamByName("junk", "") 726 CheckNotFoundStatus(t, resp) 727 728 _, resp = Client.GetTeamByName("", "") 729 CheckNotFoundStatus(t, resp) 730 731 _, resp = th.SystemAdminClient.GetTeamByName(strings.ToUpper(team.Name), "") 732 CheckNoError(t, resp) 733 734 Client.Logout() 735 _, resp = Client.GetTeamByName(team.Name, "") 736 CheckUnauthorizedStatus(t, resp) 737 738 _, resp = th.SystemAdminClient.GetTeamByName(team.Name, "") 739 CheckNoError(t, resp) 740 741 th.LoginTeamAdmin() 742 743 team2 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: false} 744 rteam2, _ := Client.CreateTeam(team2) 745 746 team3 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_INVITE, AllowOpenInvite: true} 747 rteam3, _ := Client.CreateTeam(team3) 748 749 th.LoginBasic() 750 // AllowInviteOpen is false and team is open, and user is not on team 751 _, resp = Client.GetTeamByName(rteam2.Name, "") 752 CheckForbiddenStatus(t, resp) 753 754 // AllowInviteOpen is true and team is invite only, and user is not on team 755 _, resp = Client.GetTeamByName(rteam3.Name, "") 756 CheckForbiddenStatus(t, resp) 757 } 758 759 func TestGetTeamByNameSanitization(t *testing.T) { 760 th := Setup().InitBasic().InitSystemAdmin() 761 defer th.TearDown() 762 763 team, resp := th.Client.CreateTeam(&model.Team{ 764 DisplayName: t.Name() + "_1", 765 Name: GenerateTestTeamName(), 766 Email: th.GenerateTestEmail(), 767 Type: model.TEAM_OPEN, 768 AllowedDomains: "simulator.amazonses.com", 769 }) 770 CheckNoError(t, resp) 771 772 t.Run("team user", func(t *testing.T) { 773 th.LinkUserToTeam(th.BasicUser2, team) 774 775 client := th.CreateClient() 776 th.LoginBasic2WithClient(client) 777 778 rteam, resp := client.GetTeamByName(team.Name, "") 779 CheckNoError(t, resp) 780 if rteam.Email != "" { 781 t.Fatal("should've sanitized email") 782 } else if rteam.AllowedDomains != "" { 783 t.Fatal("should've sanitized allowed domains") 784 } 785 }) 786 787 t.Run("team admin/non-admin", func(t *testing.T) { 788 rteam, resp := th.Client.GetTeamByName(team.Name, "") 789 CheckNoError(t, resp) 790 if rteam.Email == "" { 791 t.Fatal("should not have sanitized email") 792 } else if rteam.AllowedDomains == "" { 793 t.Fatal("should not have sanitized allowed domains") 794 } 795 }) 796 797 t.Run("system admin", func(t *testing.T) { 798 rteam, resp := th.SystemAdminClient.GetTeamByName(team.Name, "") 799 CheckNoError(t, resp) 800 if rteam.Email == "" { 801 t.Fatal("should not have sanitized email") 802 } else if rteam.AllowedDomains == "" { 803 t.Fatal("should not have sanitized allowed domains") 804 } 805 }) 806 } 807 808 func TestSearchAllTeams(t *testing.T) { 809 th := Setup().InitBasic().InitSystemAdmin() 810 defer th.TearDown() 811 Client := th.Client 812 oTeam := th.BasicTeam 813 oTeam.AllowOpenInvite = true 814 815 if updatedTeam, err := th.App.UpdateTeam(oTeam); err != nil { 816 t.Fatal(err) 817 } else { 818 oTeam.UpdateAt = updatedTeam.UpdateAt 819 } 820 821 pTeam := &model.Team{DisplayName: "PName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_INVITE} 822 Client.CreateTeam(pTeam) 823 824 rteams, resp := Client.SearchTeams(&model.TeamSearch{Term: oTeam.Name}) 825 CheckNoError(t, resp) 826 827 if len(rteams) != 1 { 828 t.Fatal("should have returned 1 team") 829 } 830 831 if oTeam.Id != rteams[0].Id { 832 t.Fatal("invalid team") 833 } 834 835 rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: oTeam.DisplayName}) 836 CheckNoError(t, resp) 837 838 if len(rteams) != 1 { 839 t.Fatal("should have returned 1 team") 840 } 841 842 if rteams[0].Id != oTeam.Id { 843 t.Fatal("invalid team") 844 } 845 846 rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: pTeam.Name}) 847 CheckNoError(t, resp) 848 849 if len(rteams) != 0 { 850 t.Fatal("should have not returned team") 851 } 852 853 rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: pTeam.DisplayName}) 854 CheckNoError(t, resp) 855 856 if len(rteams) != 0 { 857 t.Fatal("should have not returned team") 858 } 859 860 rteams, resp = th.SystemAdminClient.SearchTeams(&model.TeamSearch{Term: oTeam.Name}) 861 CheckNoError(t, resp) 862 863 if len(rteams) != 1 { 864 t.Fatal("should have returned 1 team") 865 } 866 867 rteams, resp = th.SystemAdminClient.SearchTeams(&model.TeamSearch{Term: pTeam.DisplayName}) 868 CheckNoError(t, resp) 869 870 if len(rteams) != 1 { 871 t.Fatal("should have returned 1 team") 872 } 873 874 rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: "junk"}) 875 CheckNoError(t, resp) 876 877 if len(rteams) != 0 { 878 t.Fatal("should have not returned team") 879 } 880 881 Client.Logout() 882 883 rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: pTeam.Name}) 884 CheckUnauthorizedStatus(t, resp) 885 886 rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: pTeam.DisplayName}) 887 CheckUnauthorizedStatus(t, resp) 888 } 889 890 func TestSearchAllTeamsSanitization(t *testing.T) { 891 th := Setup().InitBasic().InitSystemAdmin() 892 defer th.TearDown() 893 894 team, resp := th.Client.CreateTeam(&model.Team{ 895 DisplayName: t.Name() + "_1", 896 Name: GenerateTestTeamName(), 897 Email: th.GenerateTestEmail(), 898 Type: model.TEAM_OPEN, 899 AllowedDomains: "simulator.amazonses.com", 900 }) 901 CheckNoError(t, resp) 902 team2, resp := th.Client.CreateTeam(&model.Team{ 903 DisplayName: t.Name() + "_2", 904 Name: GenerateTestTeamName(), 905 Email: th.GenerateTestEmail(), 906 Type: model.TEAM_OPEN, 907 AllowedDomains: "simulator.amazonses.com", 908 }) 909 CheckNoError(t, resp) 910 911 t.Run("non-team user", func(t *testing.T) { 912 client := th.CreateClient() 913 th.LoginBasic2WithClient(client) 914 915 rteams, resp := client.SearchTeams(&model.TeamSearch{Term: t.Name()}) 916 CheckNoError(t, resp) 917 for _, rteam := range rteams { 918 if rteam.Email != "" { 919 t.Fatal("should've sanitized email") 920 } else if rteam.AllowedDomains != "" { 921 t.Fatal("should've sanitized allowed domains") 922 } 923 } 924 }) 925 926 t.Run("team user", func(t *testing.T) { 927 th.LinkUserToTeam(th.BasicUser2, team) 928 929 client := th.CreateClient() 930 th.LoginBasic2WithClient(client) 931 932 rteams, resp := client.SearchTeams(&model.TeamSearch{Term: t.Name()}) 933 CheckNoError(t, resp) 934 for _, rteam := range rteams { 935 if rteam.Email != "" { 936 t.Fatal("should've sanitized email") 937 } else if rteam.AllowedDomains != "" { 938 t.Fatal("should've sanitized allowed domains") 939 } 940 } 941 }) 942 943 t.Run("team admin", func(t *testing.T) { 944 rteams, resp := th.Client.SearchTeams(&model.TeamSearch{Term: t.Name()}) 945 CheckNoError(t, resp) 946 for _, rteam := range rteams { 947 if rteam.Id == team.Id || rteam.Id == team2.Id || rteam.Id == th.BasicTeam.Id { 948 if rteam.Email == "" { 949 t.Fatal("should not have sanitized email") 950 } else if rteam.AllowedDomains == "" { 951 t.Fatal("should not have sanitized allowed domains") 952 } 953 } 954 } 955 }) 956 957 t.Run("system admin", func(t *testing.T) { 958 rteams, resp := th.SystemAdminClient.SearchTeams(&model.TeamSearch{Term: t.Name()}) 959 CheckNoError(t, resp) 960 for _, rteam := range rteams { 961 if rteam.Email == "" { 962 t.Fatal("should not have sanitized email") 963 } else if rteam.AllowedDomains == "" { 964 t.Fatal("should not have sanitized allowed domains") 965 } 966 } 967 }) 968 } 969 970 func TestGetTeamsForUser(t *testing.T) { 971 th := Setup().InitBasic().InitSystemAdmin() 972 defer th.TearDown() 973 Client := th.Client 974 975 team2 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_INVITE} 976 rteam2, _ := Client.CreateTeam(team2) 977 978 teams, resp := Client.GetTeamsForUser(th.BasicUser.Id, "") 979 CheckNoError(t, resp) 980 981 if len(teams) != 2 { 982 t.Fatal("wrong number of teams") 983 } 984 985 found1 := false 986 found2 := false 987 for _, t := range teams { 988 if t.Id == th.BasicTeam.Id { 989 found1 = true 990 } else if t.Id == rteam2.Id { 991 found2 = true 992 } 993 } 994 995 if !found1 || !found2 { 996 t.Fatal("missing team") 997 } 998 999 _, resp = Client.GetTeamsForUser("junk", "") 1000 CheckBadRequestStatus(t, resp) 1001 1002 _, resp = Client.GetTeamsForUser(model.NewId(), "") 1003 CheckForbiddenStatus(t, resp) 1004 1005 _, resp = Client.GetTeamsForUser(th.BasicUser2.Id, "") 1006 CheckForbiddenStatus(t, resp) 1007 1008 _, resp = th.SystemAdminClient.GetTeamsForUser(th.BasicUser2.Id, "") 1009 CheckNoError(t, resp) 1010 } 1011 1012 func TestGetTeamsForUserSanitization(t *testing.T) { 1013 th := Setup().InitBasic().InitSystemAdmin() 1014 defer th.TearDown() 1015 1016 team, resp := th.Client.CreateTeam(&model.Team{ 1017 DisplayName: t.Name() + "_1", 1018 Name: GenerateTestTeamName(), 1019 Email: th.GenerateTestEmail(), 1020 Type: model.TEAM_OPEN, 1021 AllowedDomains: "simulator.amazonses.com", 1022 }) 1023 CheckNoError(t, resp) 1024 team2, resp := th.Client.CreateTeam(&model.Team{ 1025 DisplayName: t.Name() + "_2", 1026 Name: GenerateTestTeamName(), 1027 Email: th.GenerateTestEmail(), 1028 Type: model.TEAM_OPEN, 1029 AllowedDomains: "simulator.amazonses.com", 1030 }) 1031 CheckNoError(t, resp) 1032 1033 t.Run("team user", func(t *testing.T) { 1034 th.LinkUserToTeam(th.BasicUser2, team) 1035 th.LinkUserToTeam(th.BasicUser2, team2) 1036 1037 client := th.CreateClient() 1038 th.LoginBasic2WithClient(client) 1039 1040 rteams, resp := client.GetTeamsForUser(th.BasicUser2.Id, "") 1041 CheckNoError(t, resp) 1042 for _, rteam := range rteams { 1043 if rteam.Id != team.Id && rteam.Id != team2.Id { 1044 continue 1045 } 1046 1047 if rteam.Email != "" { 1048 t.Fatal("should've sanitized email") 1049 } else if rteam.AllowedDomains != "" { 1050 t.Fatal("should've sanitized allowed domains") 1051 } 1052 } 1053 }) 1054 1055 t.Run("team admin", func(t *testing.T) { 1056 rteams, resp := th.Client.GetTeamsForUser(th.BasicUser.Id, "") 1057 CheckNoError(t, resp) 1058 for _, rteam := range rteams { 1059 if rteam.Id != team.Id && rteam.Id != team2.Id { 1060 continue 1061 } 1062 1063 if rteam.Email == "" { 1064 t.Fatal("should not have sanitized email") 1065 } else if rteam.AllowedDomains == "" { 1066 t.Fatal("should not have sanitized allowed domains") 1067 } 1068 } 1069 }) 1070 1071 t.Run("system admin", func(t *testing.T) { 1072 rteams, resp := th.SystemAdminClient.GetTeamsForUser(th.BasicUser.Id, "") 1073 CheckNoError(t, resp) 1074 for _, rteam := range rteams { 1075 if rteam.Id != team.Id && rteam.Id != team2.Id { 1076 continue 1077 } 1078 1079 if rteam.Email == "" { 1080 t.Fatal("should not have sanitized email") 1081 } else if rteam.AllowedDomains == "" { 1082 t.Fatal("should not have sanitized allowed domains") 1083 } 1084 } 1085 }) 1086 } 1087 1088 func TestGetTeamMember(t *testing.T) { 1089 th := Setup().InitBasic().InitSystemAdmin() 1090 defer th.TearDown() 1091 Client := th.Client 1092 team := th.BasicTeam 1093 user := th.BasicUser 1094 1095 rmember, resp := Client.GetTeamMember(team.Id, user.Id, "") 1096 CheckNoError(t, resp) 1097 1098 if rmember.TeamId != team.Id { 1099 t.Fatal("wrong team id") 1100 } 1101 1102 if rmember.UserId != user.Id { 1103 t.Fatal("wrong team id") 1104 } 1105 1106 _, resp = Client.GetTeamMember("junk", user.Id, "") 1107 CheckBadRequestStatus(t, resp) 1108 1109 _, resp = Client.GetTeamMember(team.Id, "junk", "") 1110 CheckBadRequestStatus(t, resp) 1111 1112 _, resp = Client.GetTeamMember("junk", "junk", "") 1113 CheckBadRequestStatus(t, resp) 1114 1115 _, resp = Client.GetTeamMember(team.Id, model.NewId(), "") 1116 CheckNotFoundStatus(t, resp) 1117 1118 _, resp = Client.GetTeamMember(model.NewId(), user.Id, "") 1119 CheckForbiddenStatus(t, resp) 1120 1121 _, resp = th.SystemAdminClient.GetTeamMember(team.Id, user.Id, "") 1122 CheckNoError(t, resp) 1123 } 1124 1125 func TestGetTeamMembers(t *testing.T) { 1126 th := Setup().InitBasic().InitSystemAdmin() 1127 defer th.TearDown() 1128 Client := th.Client 1129 team := th.BasicTeam 1130 userNotMember := th.CreateUser() 1131 1132 rmembers, resp := Client.GetTeamMembers(team.Id, 0, 100, "") 1133 CheckNoError(t, resp) 1134 1135 t.Logf("rmembers count %v\n", len(rmembers)) 1136 1137 if len(rmembers) == 0 { 1138 t.Fatal("should have results") 1139 } 1140 1141 for _, rmember := range rmembers { 1142 if rmember.TeamId != team.Id || rmember.UserId == userNotMember.Id { 1143 t.Fatal("user should be a member of team") 1144 } 1145 } 1146 1147 rmembers, resp = Client.GetTeamMembers(team.Id, 0, 1, "") 1148 CheckNoError(t, resp) 1149 if len(rmembers) != 1 { 1150 t.Fatal("should be 1 per page") 1151 } 1152 1153 rmembers, resp = Client.GetTeamMembers(team.Id, 1, 1, "") 1154 CheckNoError(t, resp) 1155 if len(rmembers) != 1 { 1156 t.Fatal("should be 1 per page") 1157 } 1158 1159 rmembers, resp = Client.GetTeamMembers(team.Id, 10000, 100, "") 1160 CheckNoError(t, resp) 1161 if len(rmembers) != 0 { 1162 t.Fatal("should be no member") 1163 } 1164 1165 rmembers, resp = Client.GetTeamMembers(team.Id, 0, 2, "") 1166 CheckNoError(t, resp) 1167 rmembers2, resp := Client.GetTeamMembers(team.Id, 1, 2, "") 1168 CheckNoError(t, resp) 1169 1170 for _, tm1 := range rmembers { 1171 for _, tm2 := range rmembers2 { 1172 assert.NotEqual(t, tm1.UserId+tm1.TeamId, tm2.UserId+tm2.TeamId, "different pages should not have the same members") 1173 } 1174 } 1175 1176 _, resp = Client.GetTeamMembers("junk", 0, 100, "") 1177 CheckBadRequestStatus(t, resp) 1178 1179 _, resp = Client.GetTeamMembers(model.NewId(), 0, 100, "") 1180 CheckForbiddenStatus(t, resp) 1181 1182 Client.Logout() 1183 rmembers, resp = Client.GetTeamMembers(team.Id, 0, 1, "") 1184 CheckUnauthorizedStatus(t, resp) 1185 1186 rmembers, resp = th.SystemAdminClient.GetTeamMembers(team.Id, 0, 100, "") 1187 CheckNoError(t, resp) 1188 } 1189 1190 func TestGetTeamMembersForUser(t *testing.T) { 1191 th := Setup().InitBasic().InitSystemAdmin() 1192 defer th.TearDown() 1193 Client := th.Client 1194 1195 members, resp := Client.GetTeamMembersForUser(th.BasicUser.Id, "") 1196 CheckNoError(t, resp) 1197 1198 found := false 1199 for _, m := range members { 1200 if m.TeamId == th.BasicTeam.Id { 1201 found = true 1202 } 1203 } 1204 1205 if !found { 1206 t.Fatal("missing team member") 1207 } 1208 1209 _, resp = Client.GetTeamMembersForUser("junk", "") 1210 CheckBadRequestStatus(t, resp) 1211 1212 _, resp = Client.GetTeamMembersForUser(model.NewId(), "") 1213 CheckForbiddenStatus(t, resp) 1214 1215 Client.Logout() 1216 _, resp = Client.GetTeamMembersForUser(th.BasicUser.Id, "") 1217 CheckUnauthorizedStatus(t, resp) 1218 1219 user := th.CreateUser() 1220 Client.Login(user.Email, user.Password) 1221 _, resp = Client.GetTeamMembersForUser(th.BasicUser.Id, "") 1222 CheckForbiddenStatus(t, resp) 1223 1224 _, resp = th.SystemAdminClient.GetTeamMembersForUser(th.BasicUser.Id, "") 1225 CheckNoError(t, resp) 1226 } 1227 1228 func TestGetTeamMembersByIds(t *testing.T) { 1229 th := Setup().InitBasic() 1230 defer th.TearDown() 1231 Client := th.Client 1232 1233 tm, resp := Client.GetTeamMembersByIds(th.BasicTeam.Id, []string{th.BasicUser.Id}) 1234 CheckNoError(t, resp) 1235 1236 if tm[0].UserId != th.BasicUser.Id { 1237 t.Fatal("returned wrong user") 1238 } 1239 1240 _, resp = Client.GetTeamMembersByIds(th.BasicTeam.Id, []string{}) 1241 CheckBadRequestStatus(t, resp) 1242 1243 tm1, resp := Client.GetTeamMembersByIds(th.BasicTeam.Id, []string{"junk"}) 1244 CheckNoError(t, resp) 1245 if len(tm1) > 0 { 1246 t.Fatal("no users should be returned") 1247 } 1248 1249 tm1, resp = Client.GetTeamMembersByIds(th.BasicTeam.Id, []string{"junk", th.BasicUser.Id}) 1250 CheckNoError(t, resp) 1251 if len(tm1) != 1 { 1252 t.Fatal("1 user should be returned") 1253 } 1254 1255 tm1, resp = Client.GetTeamMembersByIds("junk", []string{th.BasicUser.Id}) 1256 CheckBadRequestStatus(t, resp) 1257 1258 tm1, resp = Client.GetTeamMembersByIds(model.NewId(), []string{th.BasicUser.Id}) 1259 CheckForbiddenStatus(t, resp) 1260 1261 Client.Logout() 1262 _, resp = Client.GetTeamMembersByIds(th.BasicTeam.Id, []string{th.BasicUser.Id}) 1263 CheckUnauthorizedStatus(t, resp) 1264 } 1265 1266 func TestAddTeamMember(t *testing.T) { 1267 th := Setup().InitBasic().InitSystemAdmin() 1268 defer th.TearDown() 1269 Client := th.Client 1270 team := th.BasicTeam 1271 otherUser := th.CreateUser() 1272 1273 if err := th.App.RemoveUserFromTeam(th.BasicTeam.Id, th.BasicUser2.Id, ""); err != nil { 1274 t.Fatalf(err.Error()) 1275 } 1276 1277 // Regular user can't add a member to a team they don't belong to. 1278 th.LoginBasic2() 1279 tm, resp := Client.AddTeamMember(team.Id, otherUser.Id) 1280 CheckForbiddenStatus(t, resp) 1281 if resp.Error == nil { 1282 t.Fatalf("Error is nil") 1283 } 1284 Client.Logout() 1285 1286 // Regular user can add a member to a team they belong to. 1287 th.LoginBasic() 1288 tm, resp = Client.AddTeamMember(team.Id, otherUser.Id) 1289 CheckNoError(t, resp) 1290 CheckCreatedStatus(t, resp) 1291 1292 // Check all the returned data. 1293 if tm == nil { 1294 t.Fatal("should have returned team member") 1295 } 1296 1297 if tm.UserId != otherUser.Id { 1298 t.Fatal("user ids should have matched") 1299 } 1300 1301 if tm.TeamId != team.Id { 1302 t.Fatal("team ids should have matched") 1303 } 1304 1305 // Check with various invalid requests. 1306 tm, resp = Client.AddTeamMember(team.Id, "junk") 1307 CheckBadRequestStatus(t, resp) 1308 1309 if tm != nil { 1310 t.Fatal("should have not returned team member") 1311 } 1312 1313 _, resp = Client.AddTeamMember("junk", otherUser.Id) 1314 CheckBadRequestStatus(t, resp) 1315 1316 _, resp = Client.AddTeamMember(GenerateTestId(), otherUser.Id) 1317 CheckForbiddenStatus(t, resp) 1318 1319 _, resp = Client.AddTeamMember(team.Id, GenerateTestId()) 1320 CheckNotFoundStatus(t, resp) 1321 1322 Client.Logout() 1323 1324 // Check the appropriate permissions are enforced. 1325 defaultRolePermissions := th.SaveDefaultRolePermissions() 1326 defer func() { 1327 th.RestoreDefaultRolePermissions(defaultRolePermissions) 1328 }() 1329 1330 // Set the config so that only team admins can add a user to a team. 1331 th.AddPermissionToRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_ADMIN_ROLE_ID) 1332 th.AddPermissionToRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_ADMIN_ROLE_ID) 1333 th.RemovePermissionFromRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_USER_ROLE_ID) 1334 th.RemovePermissionFromRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_USER_ROLE_ID) 1335 1336 th.LoginBasic() 1337 1338 // Check that a regular user can't add someone to the team. 1339 _, resp = Client.AddTeamMember(team.Id, otherUser.Id) 1340 CheckForbiddenStatus(t, resp) 1341 1342 // Update user to team admin 1343 th.UpdateUserToTeamAdmin(th.BasicUser, th.BasicTeam) 1344 th.App.InvalidateAllCaches() 1345 th.LoginBasic() 1346 1347 // Should work as a team admin. 1348 _, resp = Client.AddTeamMember(team.Id, otherUser.Id) 1349 CheckNoError(t, resp) 1350 1351 // Change permission level to team user 1352 th.AddPermissionToRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_USER_ROLE_ID) 1353 th.AddPermissionToRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_USER_ROLE_ID) 1354 th.RemovePermissionFromRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_ADMIN_ROLE_ID) 1355 th.RemovePermissionFromRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_ADMIN_ROLE_ID) 1356 1357 th.UpdateUserToNonTeamAdmin(th.BasicUser, th.BasicTeam) 1358 th.App.InvalidateAllCaches() 1359 th.LoginBasic() 1360 1361 // Should work as a regular user. 1362 _, resp = Client.AddTeamMember(team.Id, otherUser.Id) 1363 CheckNoError(t, resp) 1364 1365 // by token 1366 Client.Login(otherUser.Email, otherUser.Password) 1367 1368 token := model.NewToken( 1369 app.TOKEN_TYPE_TEAM_INVITATION, 1370 model.MapToJson(map[string]string{"teamId": team.Id}), 1371 ) 1372 <-th.App.Srv.Store.Token().Save(token) 1373 1374 tm, resp = Client.AddTeamMemberFromInvite(token.Token, "") 1375 CheckNoError(t, resp) 1376 1377 if tm == nil { 1378 t.Fatal("should have returned team member") 1379 } 1380 1381 if tm.UserId != otherUser.Id { 1382 t.Fatal("user ids should have matched") 1383 } 1384 1385 if tm.TeamId != team.Id { 1386 t.Fatal("team ids should have matched") 1387 } 1388 1389 if result := <-th.App.Srv.Store.Token().GetByToken(token.Token); result.Err == nil { 1390 t.Fatal("The token must be deleted after be used") 1391 } 1392 1393 tm, resp = Client.AddTeamMemberFromInvite("junk", "") 1394 CheckBadRequestStatus(t, resp) 1395 1396 if tm != nil { 1397 t.Fatal("should have not returned team member") 1398 } 1399 1400 // expired token of more than 50 hours 1401 token = model.NewToken(app.TOKEN_TYPE_TEAM_INVITATION, "") 1402 token.CreateAt = model.GetMillis() - 1000*60*60*50 1403 <-th.App.Srv.Store.Token().Save(token) 1404 1405 tm, resp = Client.AddTeamMemberFromInvite(token.Token, "") 1406 CheckBadRequestStatus(t, resp) 1407 th.App.DeleteToken(token) 1408 1409 // invalid team id 1410 testId := GenerateTestId() 1411 token = model.NewToken( 1412 app.TOKEN_TYPE_TEAM_INVITATION, 1413 model.MapToJson(map[string]string{"teamId": testId}), 1414 ) 1415 <-th.App.Srv.Store.Token().Save(token) 1416 1417 tm, resp = Client.AddTeamMemberFromInvite(token.Token, "") 1418 CheckNotFoundStatus(t, resp) 1419 th.App.DeleteToken(token) 1420 1421 // by invite_id 1422 Client.Login(otherUser.Email, otherUser.Password) 1423 1424 tm, resp = Client.AddTeamMemberFromInvite("", team.InviteId) 1425 CheckNoError(t, resp) 1426 1427 if tm == nil { 1428 t.Fatal("should have returned team member") 1429 } 1430 1431 if tm.UserId != otherUser.Id { 1432 t.Fatal("user ids should have matched") 1433 } 1434 1435 if tm.TeamId != team.Id { 1436 t.Fatal("team ids should have matched") 1437 } 1438 1439 tm, resp = Client.AddTeamMemberFromInvite("", "junk") 1440 CheckNotFoundStatus(t, resp) 1441 1442 if tm != nil { 1443 t.Fatal("should have not returned team member") 1444 } 1445 } 1446 1447 func TestAddTeamMembers(t *testing.T) { 1448 th := Setup().InitBasic().InitSystemAdmin() 1449 defer th.TearDown() 1450 Client := th.Client 1451 team := th.BasicTeam 1452 otherUser := th.CreateUser() 1453 userList := []string{ 1454 otherUser.Id, 1455 } 1456 1457 if err := th.App.RemoveUserFromTeam(th.BasicTeam.Id, th.BasicUser2.Id, ""); err != nil { 1458 t.Fatalf(err.Error()) 1459 } 1460 1461 // Regular user can't add a member to a team they don't belong to. 1462 th.LoginBasic2() 1463 tm, resp := Client.AddTeamMembers(team.Id, userList) 1464 CheckForbiddenStatus(t, resp) 1465 Client.Logout() 1466 1467 // Regular user can add a member to a team they belong to. 1468 th.LoginBasic() 1469 tm, resp = Client.AddTeamMembers(team.Id, userList) 1470 CheckNoError(t, resp) 1471 CheckCreatedStatus(t, resp) 1472 1473 // Check all the returned data. 1474 if tm[0] == nil { 1475 t.Fatal("should have returned team member") 1476 } 1477 1478 if tm[0].UserId != otherUser.Id { 1479 t.Fatal("user ids should have matched") 1480 } 1481 1482 if tm[0].TeamId != team.Id { 1483 t.Fatal("team ids should have matched") 1484 } 1485 1486 // Check with various invalid requests. 1487 _, resp = Client.AddTeamMembers("junk", userList) 1488 CheckBadRequestStatus(t, resp) 1489 1490 _, resp = Client.AddTeamMembers(GenerateTestId(), userList) 1491 CheckForbiddenStatus(t, resp) 1492 1493 testUserList := append(userList, GenerateTestId()) 1494 _, resp = Client.AddTeamMembers(team.Id, testUserList) 1495 CheckNotFoundStatus(t, resp) 1496 1497 // Test with many users. 1498 for i := 0; i < 25; i++ { 1499 testUserList = append(testUserList, GenerateTestId()) 1500 } 1501 _, resp = Client.AddTeamMembers(team.Id, testUserList) 1502 CheckBadRequestStatus(t, resp) 1503 1504 Client.Logout() 1505 1506 // Check the appropriate permissions are enforced. 1507 defaultRolePermissions := th.SaveDefaultRolePermissions() 1508 defer func() { 1509 th.RestoreDefaultRolePermissions(defaultRolePermissions) 1510 }() 1511 1512 // Set the config so that only team admins can add a user to a team. 1513 th.AddPermissionToRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_ADMIN_ROLE_ID) 1514 th.AddPermissionToRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_ADMIN_ROLE_ID) 1515 th.RemovePermissionFromRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_USER_ROLE_ID) 1516 th.RemovePermissionFromRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_USER_ROLE_ID) 1517 1518 th.LoginBasic() 1519 1520 // Check that a regular user can't add someone to the team. 1521 _, resp = Client.AddTeamMembers(team.Id, userList) 1522 CheckForbiddenStatus(t, resp) 1523 1524 // Update user to team admin 1525 th.UpdateUserToTeamAdmin(th.BasicUser, th.BasicTeam) 1526 th.App.InvalidateAllCaches() 1527 th.LoginBasic() 1528 1529 // Should work as a team admin. 1530 _, resp = Client.AddTeamMembers(team.Id, userList) 1531 CheckNoError(t, resp) 1532 1533 // Change permission level to team user 1534 th.AddPermissionToRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_USER_ROLE_ID) 1535 th.AddPermissionToRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_USER_ROLE_ID) 1536 th.RemovePermissionFromRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_ADMIN_ROLE_ID) 1537 th.RemovePermissionFromRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_ADMIN_ROLE_ID) 1538 1539 th.UpdateUserToNonTeamAdmin(th.BasicUser, th.BasicTeam) 1540 th.App.InvalidateAllCaches() 1541 th.LoginBasic() 1542 1543 // Should work as a regular user. 1544 _, resp = Client.AddTeamMembers(team.Id, userList) 1545 CheckNoError(t, resp) 1546 } 1547 1548 func TestRemoveTeamMember(t *testing.T) { 1549 th := Setup().InitBasic().InitSystemAdmin() 1550 defer th.TearDown() 1551 Client := th.Client 1552 1553 pass, resp := Client.RemoveTeamMember(th.BasicTeam.Id, th.BasicUser.Id) 1554 CheckNoError(t, resp) 1555 1556 if !pass { 1557 t.Fatal("should have passed") 1558 } 1559 1560 _, resp = th.SystemAdminClient.AddTeamMember(th.BasicTeam.Id, th.BasicUser.Id) 1561 CheckNoError(t, resp) 1562 1563 _, resp = Client.RemoveTeamMember(th.BasicTeam.Id, "junk") 1564 CheckBadRequestStatus(t, resp) 1565 1566 _, resp = Client.RemoveTeamMember("junk", th.BasicUser2.Id) 1567 CheckBadRequestStatus(t, resp) 1568 1569 _, resp = Client.RemoveTeamMember(th.BasicTeam.Id, th.BasicUser2.Id) 1570 CheckForbiddenStatus(t, resp) 1571 1572 _, resp = Client.RemoveTeamMember(model.NewId(), th.BasicUser.Id) 1573 CheckNotFoundStatus(t, resp) 1574 1575 _, resp = th.SystemAdminClient.RemoveTeamMember(th.BasicTeam.Id, th.BasicUser.Id) 1576 CheckNoError(t, resp) 1577 } 1578 1579 func TestGetTeamStats(t *testing.T) { 1580 th := Setup().InitBasic().InitSystemAdmin() 1581 defer th.TearDown() 1582 Client := th.Client 1583 team := th.BasicTeam 1584 1585 rstats, resp := Client.GetTeamStats(team.Id, "") 1586 CheckNoError(t, resp) 1587 1588 if rstats.TeamId != team.Id { 1589 t.Fatal("wrong team id") 1590 } 1591 1592 if rstats.TotalMemberCount != 3 { 1593 t.Fatal("wrong count") 1594 } 1595 1596 if rstats.ActiveMemberCount != 3 { 1597 t.Fatal("wrong count") 1598 } 1599 1600 _, resp = Client.GetTeamStats("junk", "") 1601 CheckBadRequestStatus(t, resp) 1602 1603 _, resp = Client.GetTeamStats(model.NewId(), "") 1604 CheckForbiddenStatus(t, resp) 1605 1606 _, resp = th.SystemAdminClient.GetTeamStats(team.Id, "") 1607 CheckNoError(t, resp) 1608 1609 // deactivate BasicUser2 1610 th.UpdateActiveUser(th.BasicUser2, false) 1611 1612 rstats, resp = th.SystemAdminClient.GetTeamStats(team.Id, "") 1613 CheckNoError(t, resp) 1614 1615 if rstats.TotalMemberCount != 3 { 1616 t.Fatal("wrong count") 1617 } 1618 1619 if rstats.ActiveMemberCount != 2 { 1620 t.Fatal("wrong count") 1621 } 1622 1623 // login with different user and test if forbidden 1624 user := th.CreateUser() 1625 Client.Login(user.Email, user.Password) 1626 _, resp = Client.GetTeamStats(th.BasicTeam.Id, "") 1627 CheckForbiddenStatus(t, resp) 1628 1629 Client.Logout() 1630 _, resp = Client.GetTeamStats(th.BasicTeam.Id, "") 1631 CheckUnauthorizedStatus(t, resp) 1632 } 1633 1634 func TestUpdateTeamMemberRoles(t *testing.T) { 1635 th := Setup().InitBasic().InitSystemAdmin() 1636 defer th.TearDown() 1637 Client := th.Client 1638 SystemAdminClient := th.SystemAdminClient 1639 1640 const TEAM_MEMBER = "team_user" 1641 const TEAM_ADMIN = "team_user team_admin" 1642 1643 // user 1 tries to promote user 2 1644 ok, resp := Client.UpdateTeamMemberRoles(th.BasicTeam.Id, th.BasicUser2.Id, TEAM_ADMIN) 1645 CheckForbiddenStatus(t, resp) 1646 if ok { 1647 t.Fatal("should have returned false") 1648 } 1649 1650 // user 1 tries to promote himself 1651 _, resp = Client.UpdateTeamMemberRoles(th.BasicTeam.Id, th.BasicUser.Id, TEAM_ADMIN) 1652 CheckForbiddenStatus(t, resp) 1653 1654 // user 1 tries to demote someone 1655 _, resp = Client.UpdateTeamMemberRoles(th.BasicTeam.Id, th.SystemAdminUser.Id, TEAM_MEMBER) 1656 CheckForbiddenStatus(t, resp) 1657 1658 // system admin promotes user 1 1659 ok, resp = SystemAdminClient.UpdateTeamMemberRoles(th.BasicTeam.Id, th.BasicUser.Id, TEAM_ADMIN) 1660 CheckNoError(t, resp) 1661 if !ok { 1662 t.Fatal("should have returned true") 1663 } 1664 1665 // user 1 (team admin) promotes user 2 1666 _, resp = Client.UpdateTeamMemberRoles(th.BasicTeam.Id, th.BasicUser2.Id, TEAM_ADMIN) 1667 CheckNoError(t, resp) 1668 1669 // user 1 (team admin) demotes user 2 (team admin) 1670 _, resp = Client.UpdateTeamMemberRoles(th.BasicTeam.Id, th.BasicUser2.Id, TEAM_MEMBER) 1671 CheckNoError(t, resp) 1672 1673 // user 1 (team admin) tries to demote system admin (not member of a team) 1674 _, resp = Client.UpdateTeamMemberRoles(th.BasicTeam.Id, th.SystemAdminUser.Id, TEAM_MEMBER) 1675 CheckBadRequestStatus(t, resp) 1676 1677 // user 1 (team admin) demotes system admin (member of a team) 1678 th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam) 1679 _, resp = Client.UpdateTeamMemberRoles(th.BasicTeam.Id, th.SystemAdminUser.Id, TEAM_MEMBER) 1680 CheckNoError(t, resp) 1681 // Note from API v3 1682 // Note to anyone who thinks this (above) test is wrong: 1683 // This operation will not affect the system admin's permissions because they have global access to all teams. 1684 // Their team level permissions are irrelevant. A team admin should be able to manage team level permissions. 1685 1686 // System admins should be able to manipulate permission no matter what their team level permissions are. 1687 // system admin promotes user 2 1688 _, resp = SystemAdminClient.UpdateTeamMemberRoles(th.BasicTeam.Id, th.BasicUser2.Id, TEAM_ADMIN) 1689 CheckNoError(t, resp) 1690 1691 // system admin demotes user 2 (team admin) 1692 _, resp = SystemAdminClient.UpdateTeamMemberRoles(th.BasicTeam.Id, th.BasicUser2.Id, TEAM_MEMBER) 1693 CheckNoError(t, resp) 1694 1695 // user 1 (team admin) tries to promote himself to a random team 1696 _, resp = Client.UpdateTeamMemberRoles(model.NewId(), th.BasicUser.Id, TEAM_ADMIN) 1697 CheckForbiddenStatus(t, resp) 1698 1699 // user 1 (team admin) tries to promote a random user 1700 _, resp = Client.UpdateTeamMemberRoles(th.BasicTeam.Id, model.NewId(), TEAM_ADMIN) 1701 CheckBadRequestStatus(t, resp) 1702 1703 // user 1 (team admin) tries to promote invalid team permission 1704 _, resp = Client.UpdateTeamMemberRoles(th.BasicTeam.Id, th.BasicUser.Id, "junk") 1705 CheckBadRequestStatus(t, resp) 1706 1707 // user 1 (team admin) demotes himself 1708 _, resp = Client.UpdateTeamMemberRoles(th.BasicTeam.Id, th.BasicUser.Id, TEAM_MEMBER) 1709 CheckNoError(t, resp) 1710 } 1711 1712 func TestGetMyTeamsUnread(t *testing.T) { 1713 th := Setup().InitBasic().InitSystemAdmin() 1714 defer th.TearDown() 1715 Client := th.Client 1716 1717 user := th.BasicUser 1718 Client.Login(user.Email, user.Password) 1719 1720 teams, resp := Client.GetTeamsUnreadForUser(user.Id, "") 1721 CheckNoError(t, resp) 1722 if len(teams) == 0 { 1723 t.Fatal("should have results") 1724 } 1725 1726 teams, resp = Client.GetTeamsUnreadForUser(user.Id, th.BasicTeam.Id) 1727 CheckNoError(t, resp) 1728 if len(teams) != 0 { 1729 t.Fatal("should not have results") 1730 } 1731 1732 _, resp = Client.GetTeamsUnreadForUser("fail", "") 1733 CheckBadRequestStatus(t, resp) 1734 1735 _, resp = Client.GetTeamsUnreadForUser(model.NewId(), "") 1736 CheckForbiddenStatus(t, resp) 1737 1738 Client.Logout() 1739 _, resp = Client.GetTeamsUnreadForUser(user.Id, "") 1740 CheckUnauthorizedStatus(t, resp) 1741 } 1742 1743 func TestTeamExists(t *testing.T) { 1744 th := Setup().InitBasic().InitSystemAdmin() 1745 defer th.TearDown() 1746 Client := th.Client 1747 team := th.BasicTeam 1748 1749 th.LoginBasic() 1750 1751 exists, resp := Client.TeamExists(team.Name, "") 1752 CheckNoError(t, resp) 1753 if !exists { 1754 t.Fatal("team should exist") 1755 } 1756 1757 exists, resp = Client.TeamExists("testingteam", "") 1758 CheckNoError(t, resp) 1759 if exists { 1760 t.Fatal("team should not exist") 1761 } 1762 1763 Client.Logout() 1764 _, resp = Client.TeamExists(team.Name, "") 1765 CheckUnauthorizedStatus(t, resp) 1766 } 1767 1768 func TestImportTeam(t *testing.T) { 1769 th := Setup().InitBasic().InitSystemAdmin() 1770 defer th.TearDown() 1771 1772 t.Run("ImportTeam", func(t *testing.T) { 1773 var data []byte 1774 var err error 1775 data, err = readTestFile("Fake_Team_Import.zip") 1776 if err != nil && len(data) == 0 { 1777 t.Fatal("Error while reading the test file.") 1778 } 1779 1780 // Import the channels/users/posts 1781 fileResp, resp := th.SystemAdminClient.ImportTeam(data, binary.Size(data), "slack", "Fake_Team_Import.zip", th.BasicTeam.Id) 1782 CheckNoError(t, resp) 1783 1784 fileData, err := base64.StdEncoding.DecodeString(fileResp["results"]) 1785 if err != nil { 1786 t.Fatal("failed to decode base64 results data") 1787 } 1788 1789 fileReturned := fmt.Sprintf("%s", fileData) 1790 if !strings.Contains(fileReturned, "darth.vader@stardeath.com") { 1791 t.Log(fileReturned) 1792 t.Fatal("failed to report the user was imported") 1793 } 1794 1795 // Checking the imported users 1796 importedUser, resp := th.SystemAdminClient.GetUserByUsername("bot_test", "") 1797 CheckNoError(t, resp) 1798 if importedUser.Username != "bot_test" { 1799 t.Fatal("username should match with the imported user") 1800 } 1801 1802 importedUser, resp = th.SystemAdminClient.GetUserByUsername("lordvader", "") 1803 CheckNoError(t, resp) 1804 if importedUser.Username != "lordvader" { 1805 t.Fatal("username should match with the imported user") 1806 } 1807 1808 // Checking the imported Channels 1809 importedChannel, resp := th.SystemAdminClient.GetChannelByName("testchannel", th.BasicTeam.Id, "") 1810 CheckNoError(t, resp) 1811 if importedChannel.Name != "testchannel" { 1812 t.Fatal("names did not match expected: testchannel") 1813 } 1814 1815 importedChannel, resp = th.SystemAdminClient.GetChannelByName("general", th.BasicTeam.Id, "") 1816 CheckNoError(t, resp) 1817 if importedChannel.Name != "general" { 1818 t.Fatal("names did not match expected: general") 1819 } 1820 1821 posts, resp := th.SystemAdminClient.GetPostsForChannel(importedChannel.Id, 0, 60, "") 1822 CheckNoError(t, resp) 1823 if posts.Posts[posts.Order[3]].Message != "This is a test post to test the import process" { 1824 t.Fatal("missing posts in the import process") 1825 } 1826 }) 1827 1828 t.Run("MissingFile", func(t *testing.T) { 1829 _, resp := th.SystemAdminClient.ImportTeam(nil, 4343, "slack", "Fake_Team_Import.zip", th.BasicTeam.Id) 1830 CheckBadRequestStatus(t, resp) 1831 }) 1832 1833 t.Run("WrongPermission", func(t *testing.T) { 1834 var data []byte 1835 var err error 1836 data, err = readTestFile("Fake_Team_Import.zip") 1837 if err != nil && len(data) == 0 { 1838 t.Fatal("Error while reading the test file.") 1839 } 1840 1841 // Import the channels/users/posts 1842 _, resp := th.Client.ImportTeam(data, binary.Size(data), "slack", "Fake_Team_Import.zip", th.BasicTeam.Id) 1843 CheckForbiddenStatus(t, resp) 1844 }) 1845 } 1846 1847 func TestInviteUsersToTeam(t *testing.T) { 1848 th := Setup().InitBasic().InitSystemAdmin() 1849 defer th.TearDown() 1850 1851 user1 := th.GenerateTestEmail() 1852 user2 := th.GenerateTestEmail() 1853 1854 emailList := []string{user1, user2} 1855 1856 //Delete all the messages before check the sample email 1857 utils.DeleteMailBox(user1) 1858 utils.DeleteMailBox(user2) 1859 1860 okMsg, resp := th.SystemAdminClient.InviteUsersToTeam(th.BasicTeam.Id, emailList) 1861 CheckNoError(t, resp) 1862 if !okMsg { 1863 t.Fatal("should return true") 1864 } 1865 1866 nameFormat := *th.App.Config().TeamSettings.TeammateNameDisplay 1867 expectedSubject := utils.T("api.templates.invite_subject", 1868 map[string]interface{}{"SenderName": th.SystemAdminUser.GetDisplayName(nameFormat), 1869 "TeamDisplayName": th.BasicTeam.DisplayName, 1870 "SiteName": th.App.ClientConfig()["SiteName"]}) 1871 1872 //Check if the email was send to the rigth email address 1873 for _, email := range emailList { 1874 var resultsMailbox utils.JSONMessageHeaderInbucket 1875 err := utils.RetryInbucket(5, func() error { 1876 var err error 1877 resultsMailbox, err = utils.GetMailBox(email) 1878 return err 1879 }) 1880 if err != nil { 1881 t.Log(err) 1882 t.Log("No email was received, maybe due load on the server. Disabling this verification") 1883 } 1884 if err == nil && len(resultsMailbox) > 0 { 1885 if !strings.ContainsAny(resultsMailbox[len(resultsMailbox)-1].To[0], email) { 1886 t.Fatal("Wrong To recipient") 1887 } else { 1888 if resultsEmail, err := utils.GetMessageFromMailbox(email, resultsMailbox[len(resultsMailbox)-1].ID); err == nil { 1889 if resultsEmail.Subject != expectedSubject { 1890 t.Log(resultsEmail.Subject) 1891 t.Log(expectedSubject) 1892 t.Fatal("Wrong Subject") 1893 } 1894 } 1895 } 1896 } 1897 } 1898 1899 th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.RestrictCreationToDomains = "@example.com" }) 1900 1901 err := th.App.InviteNewUsersToTeam(emailList, th.BasicTeam.Id, th.BasicUser.Id) 1902 1903 if err == nil { 1904 t.Fatal("Adding users with non-restricted domains was allowed") 1905 } 1906 if err.Where != "InviteNewUsersToTeam" || err.Id != "api.team.invite_members.invalid_email.app_error" { 1907 t.Log(err) 1908 t.Fatal("Got wrong error message!") 1909 } 1910 } 1911 1912 func TestGetTeamInviteInfo(t *testing.T) { 1913 th := Setup().InitBasic().InitSystemAdmin() 1914 defer th.TearDown() 1915 Client := th.Client 1916 team := th.BasicTeam 1917 1918 team, resp := Client.GetTeamInviteInfo(team.InviteId) 1919 CheckNoError(t, resp) 1920 1921 if team.DisplayName == "" { 1922 t.Fatal("should not be empty") 1923 } 1924 1925 if team.Email != "" { 1926 t.Fatal("should be empty") 1927 } 1928 1929 team.InviteId = "12345678901234567890123456789012" 1930 team, resp = th.SystemAdminClient.UpdateTeam(team) 1931 CheckNoError(t, resp) 1932 1933 team, resp = Client.GetTeamInviteInfo(team.InviteId) 1934 CheckNoError(t, resp) 1935 1936 _, resp = Client.GetTeamInviteInfo("junk") 1937 CheckNotFoundStatus(t, resp) 1938 } 1939 1940 func TestSetTeamIcon(t *testing.T) { 1941 th := Setup().InitBasic().InitSystemAdmin() 1942 defer th.TearDown() 1943 Client := th.Client 1944 team := th.BasicTeam 1945 1946 data, err := readTestFile("test.png") 1947 if err != nil { 1948 t.Fatal(err) 1949 } 1950 1951 th.LoginTeamAdmin() 1952 1953 ok, resp := Client.SetTeamIcon(team.Id, data) 1954 if !ok { 1955 t.Fatal(resp.Error) 1956 } 1957 CheckNoError(t, resp) 1958 1959 ok, resp = Client.SetTeamIcon(model.NewId(), data) 1960 if ok { 1961 t.Fatal("Should return false, set team icon not allowed") 1962 } 1963 CheckForbiddenStatus(t, resp) 1964 1965 th.LoginBasic() 1966 1967 _, resp = Client.SetTeamIcon(team.Id, data) 1968 if resp.StatusCode == http.StatusForbidden { 1969 CheckForbiddenStatus(t, resp) 1970 } else if resp.StatusCode == http.StatusUnauthorized { 1971 CheckUnauthorizedStatus(t, resp) 1972 } else { 1973 t.Fatal("Should have failed either forbidden or unauthorized") 1974 } 1975 1976 Client.Logout() 1977 1978 _, resp = Client.SetTeamIcon(team.Id, data) 1979 if resp.StatusCode == http.StatusForbidden { 1980 CheckForbiddenStatus(t, resp) 1981 } else if resp.StatusCode == http.StatusUnauthorized { 1982 CheckUnauthorizedStatus(t, resp) 1983 } else { 1984 t.Fatal("Should have failed either forbidden or unauthorized") 1985 } 1986 1987 teamBefore, err := th.App.GetTeam(team.Id) 1988 require.Nil(t, err) 1989 1990 _, resp = th.SystemAdminClient.SetTeamIcon(team.Id, data) 1991 CheckNoError(t, resp) 1992 1993 teamAfter, err := th.App.GetTeam(team.Id) 1994 require.Nil(t, err) 1995 assert.True(t, teamBefore.LastTeamIconUpdate < teamAfter.LastTeamIconUpdate, "LastTeamIconUpdate should have been updated for team") 1996 1997 info := &model.FileInfo{Path: "teams/" + team.Id + "/teamIcon.png"} 1998 if err := th.cleanupTestFile(info); err != nil { 1999 t.Fatal(err) 2000 } 2001 } 2002 2003 func TestGetTeamIcon(t *testing.T) { 2004 th := Setup().InitBasic().InitSystemAdmin() 2005 defer th.TearDown() 2006 Client := th.Client 2007 team := th.BasicTeam 2008 2009 // should always fail because no initial image and no auto creation 2010 _, resp := Client.GetTeamIcon(team.Id, "") 2011 CheckNotFoundStatus(t, resp) 2012 2013 Client.Logout() 2014 2015 _, resp = Client.GetTeamIcon(team.Id, "") 2016 CheckUnauthorizedStatus(t, resp) 2017 } 2018 2019 func TestRemoveTeamIcon(t *testing.T) { 2020 th := Setup().InitBasic().InitSystemAdmin() 2021 defer th.TearDown() 2022 Client := th.Client 2023 team := th.BasicTeam 2024 2025 th.LoginTeamAdmin() 2026 data, _ := readTestFile("test.png") 2027 Client.SetTeamIcon(team.Id, data) 2028 2029 _, resp := Client.RemoveTeamIcon(team.Id) 2030 CheckNoError(t, resp) 2031 teamAfter, _ := th.App.GetTeam(team.Id) 2032 if teamAfter.LastTeamIconUpdate != 0 { 2033 t.Fatal("should update LastTeamIconUpdate to 0") 2034 } 2035 2036 Client.SetTeamIcon(team.Id, data) 2037 2038 _, resp = th.SystemAdminClient.RemoveTeamIcon(team.Id) 2039 CheckNoError(t, resp) 2040 teamAfter, _ = th.App.GetTeam(team.Id) 2041 if teamAfter.LastTeamIconUpdate != 0 { 2042 t.Fatal("should update LastTeamIconUpdate to 0") 2043 } 2044 2045 Client.SetTeamIcon(team.Id, data) 2046 Client.Logout() 2047 2048 _, resp = Client.RemoveTeamIcon(team.Id) 2049 CheckUnauthorizedStatus(t, resp) 2050 2051 th.LoginBasic() 2052 _, resp = Client.RemoveTeamIcon(team.Id) 2053 CheckForbiddenStatus(t, resp) 2054 }