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