github.com/mattermost/mattermost-server/v5@v5.39.3/store/storetest/team_store.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package storetest 5 6 import ( 7 "context" 8 "errors" 9 "strings" 10 "testing" 11 "time" 12 13 "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/require" 15 16 "github.com/mattermost/mattermost-server/v5/model" 17 "github.com/mattermost/mattermost-server/v5/store" 18 ) 19 20 func cleanupTeamStore(t *testing.T, ss store.Store) { 21 allTeams, err := ss.Team().GetAll() 22 for _, team := range allTeams { 23 ss.Team().PermanentDelete(team.Id) 24 } 25 assert.NoError(t, err) 26 } 27 28 func TestTeamStore(t *testing.T, ss store.Store) { 29 createDefaultRoles(ss) 30 31 t.Run("Save", func(t *testing.T) { testTeamStoreSave(t, ss) }) 32 t.Run("Update", func(t *testing.T) { testTeamStoreUpdate(t, ss) }) 33 t.Run("Get", func(t *testing.T) { testTeamStoreGet(t, ss) }) 34 t.Run("GetByName", func(t *testing.T) { testTeamStoreGetByName(t, ss) }) 35 t.Run("GetByNames", func(t *testing.T) { testTeamStoreGetByNames(t, ss) }) 36 t.Run("SearchAll", func(t *testing.T) { testTeamStoreSearchAll(t, ss) }) 37 t.Run("SearchOpen", func(t *testing.T) { testTeamStoreSearchOpen(t, ss) }) 38 t.Run("SearchPrivate", func(t *testing.T) { testTeamStoreSearchPrivate(t, ss) }) 39 t.Run("GetByInviteId", func(t *testing.T) { testTeamStoreGetByInviteId(t, ss) }) 40 t.Run("ByUserId", func(t *testing.T) { testTeamStoreByUserId(t, ss) }) 41 t.Run("GetAllTeamListing", func(t *testing.T) { testGetAllTeamListing(t, ss) }) 42 t.Run("GetAllTeamPage", func(t *testing.T) { testTeamStoreGetAllPage(t, ss) }) 43 t.Run("GetAllTeamPageListing", func(t *testing.T) { testGetAllTeamPageListing(t, ss) }) 44 t.Run("GetAllPrivateTeamListing", func(t *testing.T) { testGetAllPrivateTeamListing(t, ss) }) 45 t.Run("GetAllPrivateTeamPageListing", func(t *testing.T) { testGetAllPrivateTeamPageListing(t, ss) }) 46 t.Run("GetAllPublicTeamPageListing", func(t *testing.T) { testGetAllPublicTeamPageListing(t, ss) }) 47 t.Run("Delete", func(t *testing.T) { testDelete(t, ss) }) 48 t.Run("TeamCount", func(t *testing.T) { testTeamCount(t, ss) }) 49 t.Run("TeamPublicCount", func(t *testing.T) { testPublicTeamCount(t, ss) }) 50 t.Run("TeamPrivateCount", func(t *testing.T) { testPrivateTeamCount(t, ss) }) 51 t.Run("TeamMembers", func(t *testing.T) { testTeamMembers(t, ss) }) 52 t.Run("TestGetMembers", func(t *testing.T) { testGetMembers(t, ss) }) 53 t.Run("SaveMember", func(t *testing.T) { testTeamSaveMember(t, ss) }) 54 t.Run("SaveMultipleMembers", func(t *testing.T) { testTeamSaveMultipleMembers(t, ss) }) 55 t.Run("UpdateMember", func(t *testing.T) { testTeamUpdateMember(t, ss) }) 56 t.Run("UpdateMultipleMembers", func(t *testing.T) { testTeamUpdateMultipleMembers(t, ss) }) 57 t.Run("RemoveMember", func(t *testing.T) { testTeamRemoveMember(t, ss) }) 58 t.Run("RemoveMembers", func(t *testing.T) { testTeamRemoveMembers(t, ss) }) 59 t.Run("SaveTeamMemberMaxMembers", func(t *testing.T) { testSaveTeamMemberMaxMembers(t, ss) }) 60 t.Run("GetTeamMember", func(t *testing.T) { testGetTeamMember(t, ss) }) 61 t.Run("GetTeamMembersByIds", func(t *testing.T) { testGetTeamMembersByIds(t, ss) }) 62 t.Run("MemberCount", func(t *testing.T) { testTeamStoreMemberCount(t, ss) }) 63 t.Run("GetChannelUnreadsForAllTeams", func(t *testing.T) { testGetChannelUnreadsForAllTeams(t, ss) }) 64 t.Run("GetChannelUnreadsForTeam", func(t *testing.T) { testGetChannelUnreadsForTeam(t, ss) }) 65 t.Run("UpdateLastTeamIconUpdate", func(t *testing.T) { testUpdateLastTeamIconUpdate(t, ss) }) 66 t.Run("GetTeamsByScheme", func(t *testing.T) { testGetTeamsByScheme(t, ss) }) 67 t.Run("MigrateTeamMembers", func(t *testing.T) { testTeamStoreMigrateTeamMembers(t, ss) }) 68 t.Run("ResetAllTeamSchemes", func(t *testing.T) { testResetAllTeamSchemes(t, ss) }) 69 t.Run("ClearAllCustomRoleAssignments", func(t *testing.T) { testTeamStoreClearAllCustomRoleAssignments(t, ss) }) 70 t.Run("AnalyticsGetTeamCountForScheme", func(t *testing.T) { testTeamStoreAnalyticsGetTeamCountForScheme(t, ss) }) 71 t.Run("GetAllForExportAfter", func(t *testing.T) { testTeamStoreGetAllForExportAfter(t, ss) }) 72 t.Run("GetTeamMembersForExport", func(t *testing.T) { testTeamStoreGetTeamMembersForExport(t, ss) }) 73 t.Run("GetTeamsForUserWithPagination", func(t *testing.T) { testTeamMembersWithPagination(t, ss) }) 74 t.Run("GroupSyncedTeamCount", func(t *testing.T) { testGroupSyncedTeamCount(t, ss) }) 75 } 76 77 func testTeamStoreSave(t *testing.T, ss store.Store) { 78 o1 := model.Team{} 79 o1.DisplayName = "DisplayName" 80 o1.Name = NewTestId() 81 o1.Email = MakeEmail() 82 o1.Type = model.TEAM_OPEN 83 84 _, err := ss.Team().Save(&o1) 85 require.NoError(t, err, "couldn't save item") 86 87 _, err = ss.Team().Save(&o1) 88 require.Error(t, err, "shouldn't be able to update from save") 89 90 o1.Id = "" 91 _, err = ss.Team().Save(&o1) 92 require.Error(t, err, "should be unique domain") 93 } 94 95 func testTeamStoreUpdate(t *testing.T, ss store.Store) { 96 o1 := model.Team{} 97 o1.DisplayName = "DisplayName" 98 o1.Name = NewTestId() 99 o1.Email = MakeEmail() 100 o1.Type = model.TEAM_OPEN 101 _, err := ss.Team().Save(&o1) 102 require.NoError(t, err) 103 104 time.Sleep(100 * time.Millisecond) 105 106 _, err = ss.Team().Update(&o1) 107 require.NoError(t, err) 108 109 o1.Id = "missing" 110 _, err = ss.Team().Update(&o1) 111 require.Error(t, err, "Update should have failed because of missing key") 112 113 o1.Id = model.NewId() 114 _, err = ss.Team().Update(&o1) 115 require.Error(t, err, "Update should have faile because id change") 116 } 117 118 func testTeamStoreGet(t *testing.T, ss store.Store) { 119 o1 := model.Team{} 120 o1.DisplayName = "DisplayName" 121 o1.Name = NewTestId() 122 o1.Email = MakeEmail() 123 o1.Type = model.TEAM_OPEN 124 _, err := ss.Team().Save(&o1) 125 require.NoError(t, err) 126 127 r1, err := ss.Team().Get(o1.Id) 128 require.NoError(t, err) 129 require.Equal(t, r1.ToJson(), o1.ToJson()) 130 131 _, err = ss.Team().Get("") 132 require.Error(t, err, "Missing id should have failed") 133 } 134 135 func testTeamStoreGetByNames(t *testing.T, ss store.Store) { 136 o1 := model.Team{} 137 o1.DisplayName = "DisplayName" 138 o1.Name = NewTestId() 139 o1.Email = MakeEmail() 140 o1.Type = model.TEAM_OPEN 141 142 _, err := ss.Team().Save(&o1) 143 require.NoError(t, err) 144 145 o2 := model.Team{} 146 o2.DisplayName = "DisplayName2" 147 o2.Name = NewTestId() 148 o2.Email = MakeEmail() 149 o2.Type = model.TEAM_OPEN 150 151 _, err = ss.Team().Save(&o2) 152 require.NoError(t, err) 153 154 t.Run("Get empty list", func(t *testing.T) { 155 var teams []*model.Team 156 teams, err = ss.Team().GetByNames([]string{}) 157 require.NoError(t, err) 158 require.Empty(t, teams) 159 }) 160 161 t.Run("Get existing teams", func(t *testing.T) { 162 var teams []*model.Team 163 teams, err = ss.Team().GetByNames([]string{o1.Name, o2.Name}) 164 require.NoError(t, err) 165 teamsIds := []string{} 166 for _, team := range teams { 167 teamsIds = append(teamsIds, team.Id) 168 } 169 assert.Contains(t, teamsIds, o1.Id, "invalid returned team") 170 assert.Contains(t, teamsIds, o2.Id, "invalid returned team") 171 }) 172 173 t.Run("Get existing team and one invalid team name", func(t *testing.T) { 174 _, err = ss.Team().GetByNames([]string{o1.Name, ""}) 175 require.Error(t, err) 176 }) 177 178 t.Run("Get existing team and not existing team", func(t *testing.T) { 179 _, err = ss.Team().GetByNames([]string{o1.Name, "not-existing-team-name"}) 180 require.Error(t, err) 181 }) 182 t.Run("Get not existing teams", func(t *testing.T) { 183 _, err = ss.Team().GetByNames([]string{"not-existing-team-name", "not-existing-team-name-2"}) 184 require.Error(t, err) 185 }) 186 } 187 188 func testTeamStoreGetByName(t *testing.T, ss store.Store) { 189 o1 := model.Team{} 190 o1.DisplayName = "DisplayName" 191 o1.Name = NewTestId() 192 o1.Email = MakeEmail() 193 o1.Type = model.TEAM_OPEN 194 195 _, err := ss.Team().Save(&o1) 196 require.NoError(t, err) 197 198 t.Run("Get existing team", func(t *testing.T) { 199 var team *model.Team 200 team, err = ss.Team().GetByName(o1.Name) 201 require.NoError(t, err) 202 require.Equal(t, *team, o1, "invalid returned team") 203 }) 204 205 t.Run("Get invalid team name", func(t *testing.T) { 206 _, err = ss.Team().GetByName("") 207 require.Error(t, err, "Missing id should have failed") 208 }) 209 210 t.Run("Get not existing team", func(t *testing.T) { 211 _, err = ss.Team().GetByName("not-existing-team-name") 212 require.Error(t, err, "Missing id should have failed") 213 }) 214 } 215 216 func testTeamStoreSearchAll(t *testing.T, ss store.Store) { 217 cleanupTeamStore(t, ss) 218 219 o := model.Team{} 220 o.DisplayName = "ADisplayName" + NewTestId() 221 o.Name = "searchterm-" + NewTestId() 222 o.Email = MakeEmail() 223 o.Type = model.TEAM_OPEN 224 o.AllowOpenInvite = true 225 226 _, err := ss.Team().Save(&o) 227 require.NoError(t, err) 228 229 p := model.Team{} 230 p.DisplayName = "BDisplayName" + NewTestId() 231 p.Name = "searchterm-" + NewTestId() 232 p.Email = MakeEmail() 233 p.Type = model.TEAM_OPEN 234 p.AllowOpenInvite = false 235 236 _, err = ss.Team().Save(&p) 237 require.NoError(t, err) 238 239 g := model.Team{} 240 g.DisplayName = "CDisplayName" + NewTestId() 241 g.Name = "searchterm-" + NewTestId() 242 g.Email = MakeEmail() 243 g.Type = model.TEAM_OPEN 244 g.AllowOpenInvite = false 245 g.GroupConstrained = model.NewBool(true) 246 247 _, err = ss.Team().Save(&g) 248 require.NoError(t, err) 249 250 q := &model.Team{} 251 q.DisplayName = "CHOCOLATE" 252 q.Name = "ilovecake" 253 q.Email = MakeEmail() 254 q.Type = model.TEAM_OPEN 255 q.AllowOpenInvite = false 256 257 q, err = ss.Team().Save(q) 258 require.NoError(t, err) 259 260 _, err = ss.RetentionPolicy().Save(&model.RetentionPolicyWithTeamAndChannelIDs{ 261 RetentionPolicy: model.RetentionPolicy{ 262 DisplayName: "Policy 1", 263 PostDuration: model.NewInt64(20), 264 }, 265 TeamIDs: []string{q.Id}, 266 }) 267 require.NoError(t, err) 268 269 testCases := []struct { 270 Name string 271 Opts *model.TeamSearch 272 ExpectedLenth int 273 ExpectedTeamIds []string 274 }{ 275 { 276 "Search chocolate by display name", 277 &model.TeamSearch{Term: "ocola"}, 278 1, 279 []string{q.Id}, 280 }, 281 { 282 "Search chocolate by display name", 283 &model.TeamSearch{Term: "choc"}, 284 1, 285 []string{q.Id}, 286 }, 287 { 288 "Search chocolate by display name", 289 &model.TeamSearch{Term: "late"}, 290 1, 291 []string{q.Id}, 292 }, 293 { 294 "Search chocolate by name", 295 &model.TeamSearch{Term: "ilov"}, 296 1, 297 []string{q.Id}, 298 }, 299 { 300 "Search chocolate by name", 301 &model.TeamSearch{Term: "ecake"}, 302 1, 303 []string{q.Id}, 304 }, 305 { 306 "Search for open team name", 307 &model.TeamSearch{Term: o.Name}, 308 1, 309 []string{o.Id}, 310 }, 311 { 312 "Search for open team displayName", 313 &model.TeamSearch{Term: o.DisplayName}, 314 1, 315 []string{o.Id}, 316 }, 317 { 318 "Search for open team without results", 319 &model.TeamSearch{Term: "notexists"}, 320 0, 321 []string{}, 322 }, 323 { 324 "Search for private team", 325 &model.TeamSearch{Term: p.DisplayName}, 326 1, 327 []string{p.Id}, 328 }, 329 { 330 "Search for all 3 searchterm teams", 331 &model.TeamSearch{Term: "searchterm"}, 332 3, 333 []string{o.Id, p.Id, g.Id}, 334 }, 335 { 336 "Search for all 3 teams filter by allow open invite", 337 &model.TeamSearch{Term: "searchterm", AllowOpenInvite: model.NewBool(true)}, 338 1, 339 []string{o.Id}, 340 }, 341 { 342 "Search for all 3 teams filter by allow open invite = false", 343 &model.TeamSearch{Term: "searchterm", AllowOpenInvite: model.NewBool(false)}, 344 1, 345 []string{p.Id}, 346 }, 347 { 348 "Search for all 3 teams filter by group constrained", 349 &model.TeamSearch{Term: "searchterm", GroupConstrained: model.NewBool(true)}, 350 1, 351 []string{g.Id}, 352 }, 353 { 354 "Search for all 3 teams filter by group constrained = false", 355 &model.TeamSearch{Term: "searchterm", GroupConstrained: model.NewBool(false)}, 356 2, 357 []string{o.Id, p.Id}, 358 }, 359 { 360 "Search for all 3 teams filter by allow open invite and include group constrained", 361 &model.TeamSearch{Term: "searchterm", AllowOpenInvite: model.NewBool(true), GroupConstrained: model.NewBool(true)}, 362 2, 363 []string{o.Id, g.Id}, 364 }, 365 { 366 "Search for all 3 teams filter by group constrained and not open invite", 367 &model.TeamSearch{Term: "searchterm", GroupConstrained: model.NewBool(true), AllowOpenInvite: model.NewBool(false)}, 368 2, 369 []string{g.Id, p.Id}, 370 }, 371 { 372 "Search for all 3 teams filter by group constrained false and open invite", 373 &model.TeamSearch{Term: "searchterm", GroupConstrained: model.NewBool(false), AllowOpenInvite: model.NewBool(true)}, 374 2, 375 []string{o.Id, p.Id}, 376 }, 377 { 378 "Search for all 3 teams filter by group constrained false and open invite false", 379 &model.TeamSearch{Term: "searchterm", GroupConstrained: model.NewBool(false), AllowOpenInvite: model.NewBool(false)}, 380 2, 381 []string{p.Id, o.Id}, 382 }, 383 { 384 "Search for teams which are not part of a data retention policy", 385 &model.TeamSearch{Term: "", ExcludePolicyConstrained: model.NewBool(true)}, 386 3, 387 []string{o.Id, p.Id, g.Id}, 388 }, 389 } 390 391 for _, tc := range testCases { 392 t.Run(tc.Name, func(t *testing.T) { 393 response, err := ss.Team().SearchAll(tc.Opts) 394 require.NoError(t, err) 395 require.Equal(t, tc.ExpectedLenth, len(response)) 396 responseTeamIds := []string{} 397 for _, team := range response { 398 responseTeamIds = append(responseTeamIds, team.Id) 399 } 400 require.ElementsMatch(t, tc.ExpectedTeamIds, responseTeamIds) 401 }) 402 } 403 } 404 405 func testTeamStoreSearchOpen(t *testing.T, ss store.Store) { 406 o := model.Team{} 407 o.DisplayName = "ADisplayName" + NewTestId() 408 o.Name = NewTestId() 409 o.Email = MakeEmail() 410 o.Type = model.TEAM_OPEN 411 o.AllowOpenInvite = true 412 413 _, err := ss.Team().Save(&o) 414 require.NoError(t, err) 415 416 p := model.Team{} 417 p.DisplayName = "ADisplayName" + NewTestId() 418 p.Name = NewTestId() 419 p.Email = MakeEmail() 420 p.Type = model.TEAM_OPEN 421 p.AllowOpenInvite = false 422 423 _, err = ss.Team().Save(&p) 424 require.NoError(t, err) 425 426 q := model.Team{} 427 q.DisplayName = "PINEAPPLEPIE" 428 q.Name = "ihadsomepineapplepiewithstrawberry" 429 q.Email = MakeEmail() 430 q.Type = model.TEAM_OPEN 431 q.AllowOpenInvite = true 432 433 _, err = ss.Team().Save(&q) 434 require.NoError(t, err) 435 436 testCases := []struct { 437 Name string 438 Term string 439 ExpectedLength int 440 ExpectedFirstId string 441 }{ 442 { 443 "Search PINEAPPLEPIE by display name", 444 "neapplep", 445 1, 446 q.Id, 447 }, 448 { 449 "Search PINEAPPLEPIE by display name", 450 "pine", 451 1, 452 q.Id, 453 }, 454 { 455 "Search PINEAPPLEPIE by display name", 456 "epie", 457 1, 458 q.Id, 459 }, 460 { 461 "Search PINEAPPLEPIE by name", 462 "ihadsome", 463 1, 464 q.Id, 465 }, 466 { 467 "Search PINEAPPLEPIE by name", 468 "pineapplepiewithstrawberry", 469 1, 470 q.Id, 471 }, 472 { 473 "Search for open team name", 474 o.Name, 475 1, 476 o.Id, 477 }, 478 { 479 "Search for open team displayName", 480 o.DisplayName, 481 1, 482 o.Id, 483 }, 484 { 485 "Search for open team without results", 486 "notexists", 487 0, 488 "", 489 }, 490 { 491 "Search for a private team (expected no results)", 492 p.DisplayName, 493 0, 494 "", 495 }, 496 } 497 498 for _, tc := range testCases { 499 t.Run(tc.Name, func(t *testing.T) { 500 r1, err := ss.Team().SearchOpen(&model.TeamSearch{Term: tc.Term}) 501 require.NoError(t, err) 502 results := r1 503 require.Equal(t, tc.ExpectedLength, len(results)) 504 if tc.ExpectedFirstId != "" { 505 assert.Equal(t, tc.ExpectedFirstId, results[0].Id) 506 } 507 }) 508 } 509 } 510 511 func testTeamStoreSearchPrivate(t *testing.T, ss store.Store) { 512 o := model.Team{} 513 o.DisplayName = "ADisplayName" + NewTestId() 514 o.Name = NewTestId() 515 o.Email = MakeEmail() 516 o.Type = model.TEAM_OPEN 517 o.AllowOpenInvite = true 518 519 _, err := ss.Team().Save(&o) 520 require.NoError(t, err) 521 522 p := model.Team{} 523 p.DisplayName = "ADisplayName" + NewTestId() 524 p.Name = NewTestId() 525 p.Email = MakeEmail() 526 p.Type = model.TEAM_OPEN 527 p.AllowOpenInvite = false 528 529 _, err = ss.Team().Save(&p) 530 require.NoError(t, err) 531 532 q := model.Team{} 533 q.DisplayName = "FOOBARDISPLAYNAME" 534 q.Name = "averylongname" 535 q.Email = MakeEmail() 536 q.Type = model.TEAM_OPEN 537 q.AllowOpenInvite = false 538 539 _, err = ss.Team().Save(&q) 540 require.NoError(t, err) 541 542 testCases := []struct { 543 Name string 544 Term string 545 ExpectedLength int 546 ExpectedFirstId string 547 }{ 548 { 549 "Search FooBar by display name from text in the middle of display name", 550 "oobardisplay", 551 1, 552 q.Id, 553 }, 554 { 555 "Search FooBar by display name from text at the beginning of display name", 556 "foobar", 557 1, 558 q.Id, 559 }, 560 { 561 "Search FooBar by display name from text at the end of display name", 562 "bardisplayname", 563 1, 564 q.Id, 565 }, 566 { 567 "Search FooBar by name from text at the beginning name", 568 "averyl", 569 1, 570 q.Id, 571 }, 572 { 573 "Search FooBar by name from text at the end of name", 574 "ongname", 575 1, 576 q.Id, 577 }, 578 { 579 "Search for private team name", 580 p.Name, 581 1, 582 p.Id, 583 }, 584 { 585 "Search for private team displayName", 586 p.DisplayName, 587 1, 588 p.Id, 589 }, 590 { 591 "Search for private team without results", 592 "notexists", 593 0, 594 "", 595 }, 596 { 597 "Search for a open team (expected no results)", 598 o.DisplayName, 599 0, 600 "", 601 }, 602 } 603 604 for _, tc := range testCases { 605 t.Run(tc.Name, func(t *testing.T) { 606 r1, err := ss.Team().SearchPrivate(&model.TeamSearch{Term: tc.Term}) 607 require.NoError(t, err) 608 results := r1 609 require.Equal(t, tc.ExpectedLength, len(results)) 610 if tc.ExpectedFirstId != "" { 611 assert.Equal(t, tc.ExpectedFirstId, results[0].Id) 612 } 613 }) 614 } 615 } 616 617 func testTeamStoreGetByInviteId(t *testing.T, ss store.Store) { 618 o1 := model.Team{} 619 o1.DisplayName = "DisplayName" 620 o1.Name = NewTestId() 621 o1.Email = MakeEmail() 622 o1.Type = model.TEAM_OPEN 623 o1.InviteId = model.NewId() 624 625 save1, err := ss.Team().Save(&o1) 626 require.NoError(t, err) 627 628 o2 := model.Team{} 629 o2.DisplayName = "DisplayName" 630 o2.Name = NewTestId() 631 o2.Email = MakeEmail() 632 o2.Type = model.TEAM_OPEN 633 634 r1, err := ss.Team().GetByInviteId(save1.InviteId) 635 require.NoError(t, err) 636 require.Equal(t, *r1, o1, "invalid returned team") 637 638 _, err = ss.Team().GetByInviteId("") 639 require.Error(t, err, "Missing id should have failed") 640 } 641 642 func testTeamStoreByUserId(t *testing.T, ss store.Store) { 643 o1 := &model.Team{} 644 o1.DisplayName = "DisplayName" 645 o1.Name = NewTestId() 646 o1.Email = MakeEmail() 647 o1.Type = model.TEAM_OPEN 648 o1.InviteId = model.NewId() 649 o1, err := ss.Team().Save(o1) 650 require.NoError(t, err) 651 652 m1 := &model.TeamMember{TeamId: o1.Id, UserId: model.NewId()} 653 _, nErr := ss.Team().SaveMember(m1, -1) 654 require.NoError(t, nErr) 655 656 teams, err := ss.Team().GetTeamsByUserId(m1.UserId) 657 require.NoError(t, err) 658 require.Len(t, teams, 1, "Should return a team") 659 require.Equal(t, teams[0].Id, o1.Id, "should be a member") 660 } 661 662 func testTeamStoreGetAllPage(t *testing.T, ss store.Store) { 663 o := model.Team{} 664 o.DisplayName = "ADisplayName" + model.NewId() 665 o.Name = "zz" + model.NewId() + "a" 666 o.Email = MakeEmail() 667 o.Type = model.TEAM_OPEN 668 o.AllowOpenInvite = true 669 _, err := ss.Team().Save(&o) 670 require.NoError(t, err) 671 672 policy, err := ss.RetentionPolicy().Save(&model.RetentionPolicyWithTeamAndChannelIDs{ 673 RetentionPolicy: model.RetentionPolicy{ 674 DisplayName: "Policy 1", 675 PostDuration: model.NewInt64(30), 676 }, 677 TeamIDs: []string{o.Id}, 678 }) 679 require.NoError(t, err) 680 681 // Without ExcludePolicyConstrained 682 teams, err := ss.Team().GetAllPage(0, 100, nil) 683 require.NoError(t, err) 684 found := false 685 for _, team := range teams { 686 if team.Id == o.Id { 687 found = true 688 require.Nil(t, team.PolicyID) 689 break 690 } 691 } 692 require.True(t, found) 693 694 // With ExcludePolicyConstrained 695 teams, err = ss.Team().GetAllPage(0, 100, &model.TeamSearch{ExcludePolicyConstrained: model.NewBool(true)}) 696 require.NoError(t, err) 697 found = false 698 for _, team := range teams { 699 if team.Id == o.Id { 700 found = true 701 break 702 } 703 } 704 require.False(t, found) 705 706 // With policy ID 707 teams, err = ss.Team().GetAllPage(0, 100, &model.TeamSearch{IncludePolicyID: model.NewBool(true)}) 708 require.NoError(t, err) 709 found = false 710 for _, team := range teams { 711 if team.Id == o.Id { 712 found = true 713 require.Equal(t, *team.PolicyID, policy.ID) 714 break 715 } 716 } 717 require.True(t, found) 718 } 719 720 func testGetAllTeamListing(t *testing.T, ss store.Store) { 721 o1 := model.Team{} 722 o1.DisplayName = "DisplayName" 723 o1.Name = NewTestId() 724 o1.Email = MakeEmail() 725 o1.Type = model.TEAM_OPEN 726 o1.AllowOpenInvite = true 727 _, err := ss.Team().Save(&o1) 728 require.NoError(t, err) 729 730 o2 := model.Team{} 731 o2.DisplayName = "DisplayName" 732 o2.Name = NewTestId() 733 o2.Email = MakeEmail() 734 o2.Type = model.TEAM_OPEN 735 _, err = ss.Team().Save(&o2) 736 require.NoError(t, err) 737 738 o3 := model.Team{} 739 o3.DisplayName = "DisplayName" 740 o3.Name = NewTestId() 741 o3.Email = MakeEmail() 742 o3.Type = model.TEAM_INVITE 743 o3.AllowOpenInvite = true 744 _, err = ss.Team().Save(&o3) 745 require.NoError(t, err) 746 747 o4 := model.Team{} 748 o4.DisplayName = "DisplayName" 749 o4.Name = NewTestId() 750 o4.Email = MakeEmail() 751 o4.Type = model.TEAM_INVITE 752 _, err = ss.Team().Save(&o4) 753 require.NoError(t, err) 754 755 teams, err := ss.Team().GetAllTeamListing() 756 require.NoError(t, err) 757 for _, team := range teams { 758 require.True(t, team.AllowOpenInvite, "should have returned team with AllowOpenInvite as true") 759 } 760 761 require.NotEmpty(t, teams, "failed team listing") 762 } 763 764 func testGetAllTeamPageListing(t *testing.T, ss store.Store) { 765 o1 := model.Team{} 766 o1.DisplayName = "DisplayName" 767 o1.Name = NewTestId() 768 o1.Email = MakeEmail() 769 o1.Type = model.TEAM_OPEN 770 o1.AllowOpenInvite = true 771 _, err := ss.Team().Save(&o1) 772 require.NoError(t, err) 773 774 o2 := model.Team{} 775 o2.DisplayName = "DisplayName" 776 o2.Name = NewTestId() 777 o2.Email = MakeEmail() 778 o2.Type = model.TEAM_OPEN 779 o2.AllowOpenInvite = false 780 _, err = ss.Team().Save(&o2) 781 require.NoError(t, err) 782 783 o3 := model.Team{} 784 o3.DisplayName = "DisplayName" 785 o3.Name = NewTestId() 786 o3.Email = MakeEmail() 787 o3.Type = model.TEAM_INVITE 788 o3.AllowOpenInvite = true 789 _, err = ss.Team().Save(&o3) 790 require.NoError(t, err) 791 792 o4 := model.Team{} 793 o4.DisplayName = "DisplayName" 794 o4.Name = NewTestId() 795 o4.Email = MakeEmail() 796 o4.Type = model.TEAM_INVITE 797 o4.AllowOpenInvite = false 798 _, err = ss.Team().Save(&o4) 799 require.NoError(t, err) 800 801 opts := &model.TeamSearch{AllowOpenInvite: model.NewBool(true)} 802 803 teams, err := ss.Team().GetAllPage(0, 10, opts) 804 require.NoError(t, err) 805 806 for _, team := range teams { 807 require.True(t, team.AllowOpenInvite, "should have returned team with AllowOpenInvite as true") 808 } 809 810 require.LessOrEqual(t, len(teams), 10, "should have returned max of 10 teams") 811 812 o5 := model.Team{} 813 o5.DisplayName = "DisplayName" 814 o5.Name = NewTestId() 815 o5.Email = MakeEmail() 816 o5.Type = model.TEAM_OPEN 817 o5.AllowOpenInvite = true 818 _, err = ss.Team().Save(&o5) 819 require.NoError(t, err) 820 821 teams, err = ss.Team().GetAllPage(0, 4, opts) 822 require.NoError(t, err) 823 824 for _, team := range teams { 825 require.True(t, team.AllowOpenInvite, "should have returned team with AllowOpenInvite as true") 826 } 827 828 require.LessOrEqual(t, len(teams), 4, "should have returned max of 4 teams") 829 830 teams, err = ss.Team().GetAllPage(1, 1, opts) 831 require.NoError(t, err) 832 833 for _, team := range teams { 834 require.True(t, team.AllowOpenInvite, "should have returned team with AllowOpenInvite as true") 835 } 836 837 require.LessOrEqual(t, len(teams), 1, "should have returned max of 1 team") 838 } 839 840 func testGetAllPrivateTeamListing(t *testing.T, ss store.Store) { 841 o1 := model.Team{} 842 o1.DisplayName = "DisplayName" 843 o1.Name = NewTestId() 844 o1.Email = MakeEmail() 845 o1.Type = model.TEAM_OPEN 846 o1.AllowOpenInvite = true 847 _, err := ss.Team().Save(&o1) 848 require.NoError(t, err) 849 850 o2 := model.Team{} 851 o2.DisplayName = "DisplayName" 852 o2.Name = NewTestId() 853 o2.Email = MakeEmail() 854 o2.Type = model.TEAM_OPEN 855 _, err = ss.Team().Save(&o2) 856 require.NoError(t, err) 857 858 o3 := model.Team{} 859 o3.DisplayName = "DisplayName" 860 o3.Name = NewTestId() 861 o3.Email = MakeEmail() 862 o3.Type = model.TEAM_INVITE 863 o3.AllowOpenInvite = true 864 _, err = ss.Team().Save(&o3) 865 require.NoError(t, err) 866 867 o4 := model.Team{} 868 o4.DisplayName = "DisplayName" 869 o4.Name = NewTestId() 870 o4.Email = MakeEmail() 871 o4.Type = model.TEAM_INVITE 872 _, err = ss.Team().Save(&o4) 873 require.NoError(t, err) 874 875 teams, err := ss.Team().GetAllPrivateTeamListing() 876 require.NoError(t, err) 877 require.NotEmpty(t, teams, "failed team listing") 878 879 for _, team := range teams { 880 require.False(t, team.AllowOpenInvite, "should have returned team with AllowOpenInvite as false") 881 } 882 } 883 884 func testGetAllPrivateTeamPageListing(t *testing.T, ss store.Store) { 885 o1 := model.Team{} 886 o1.DisplayName = "DisplayName" 887 o1.Name = NewTestId() 888 o1.Email = MakeEmail() 889 o1.Type = model.TEAM_OPEN 890 o1.AllowOpenInvite = true 891 _, err := ss.Team().Save(&o1) 892 require.NoError(t, err) 893 894 o2 := model.Team{} 895 o2.DisplayName = "DisplayName" 896 o2.Name = NewTestId() 897 o2.Email = MakeEmail() 898 o2.Type = model.TEAM_OPEN 899 o2.AllowOpenInvite = false 900 _, err = ss.Team().Save(&o2) 901 require.NoError(t, err) 902 903 o3 := model.Team{} 904 o3.DisplayName = "DisplayName" 905 o3.Name = NewTestId() 906 o3.Email = MakeEmail() 907 o3.Type = model.TEAM_INVITE 908 o3.AllowOpenInvite = true 909 _, err = ss.Team().Save(&o3) 910 require.NoError(t, err) 911 912 o4 := model.Team{} 913 o4.DisplayName = "DisplayName" 914 o4.Name = NewTestId() 915 o4.Email = MakeEmail() 916 o4.Type = model.TEAM_INVITE 917 o4.AllowOpenInvite = false 918 _, err = ss.Team().Save(&o4) 919 require.NoError(t, err) 920 921 opts := &model.TeamSearch{AllowOpenInvite: model.NewBool(false)} 922 923 teams, listErr := ss.Team().GetAllPage(0, 10, opts) 924 require.NoError(t, listErr) 925 for _, team := range teams { 926 require.False(t, team.AllowOpenInvite, "should have returned team with AllowOpenInvite as false") 927 } 928 929 require.LessOrEqual(t, len(teams), 10, "should have returned max of 10 teams") 930 931 o5 := model.Team{} 932 o5.DisplayName = "DisplayName" 933 o5.Name = NewTestId() 934 o5.Email = MakeEmail() 935 o5.Type = model.TEAM_OPEN 936 o5.AllowOpenInvite = true 937 _, err = ss.Team().Save(&o5) 938 require.NoError(t, err) 939 940 teams, listErr = ss.Team().GetAllPage(0, 4, opts) 941 require.NoError(t, listErr) 942 for _, team := range teams { 943 require.False(t, team.AllowOpenInvite, "should have returned team with AllowOpenInvite as false") 944 } 945 946 require.LessOrEqual(t, len(teams), 4, "should have returned max of 4 teams") 947 948 teams, listErr = ss.Team().GetAllPage(1, 1, opts) 949 require.NoError(t, listErr) 950 for _, team := range teams { 951 require.False(t, team.AllowOpenInvite, "should have returned team with AllowOpenInvite as false") 952 } 953 954 require.LessOrEqual(t, len(teams), 1, "should have returned max of 1 team") 955 } 956 957 func testGetAllPublicTeamPageListing(t *testing.T, ss store.Store) { 958 cleanupTeamStore(t, ss) 959 960 o1 := model.Team{} 961 o1.DisplayName = "DisplayName1" 962 o1.Name = NewTestId() 963 o1.Email = MakeEmail() 964 o1.Type = model.TEAM_OPEN 965 o1.AllowOpenInvite = true 966 t1, err := ss.Team().Save(&o1) 967 require.NoError(t, err) 968 969 o2 := model.Team{} 970 o2.DisplayName = "DisplayName2" 971 o2.Name = NewTestId() 972 o2.Email = MakeEmail() 973 o2.Type = model.TEAM_OPEN 974 o2.AllowOpenInvite = false 975 _, err = ss.Team().Save(&o2) 976 require.NoError(t, err) 977 978 o3 := model.Team{} 979 o3.DisplayName = "DisplayName3" 980 o3.Name = NewTestId() 981 o3.Email = MakeEmail() 982 o3.Type = model.TEAM_INVITE 983 o3.AllowOpenInvite = true 984 t3, err := ss.Team().Save(&o3) 985 require.NoError(t, err) 986 987 o4 := model.Team{} 988 o4.DisplayName = "DisplayName4" 989 o4.Name = NewTestId() 990 o4.Email = MakeEmail() 991 o4.Type = model.TEAM_INVITE 992 o4.AllowOpenInvite = false 993 _, err = ss.Team().Save(&o4) 994 require.NoError(t, err) 995 996 opts := &model.TeamSearch{AllowOpenInvite: model.NewBool(true)} 997 998 teams, err := ss.Team().GetAllPage(0, 10, opts) 999 assert.NoError(t, err) 1000 assert.Equal(t, []*model.Team{t1, t3}, teams) 1001 1002 o5 := model.Team{} 1003 o5.DisplayName = "DisplayName5" 1004 o5.Name = NewTestId() 1005 o5.Email = MakeEmail() 1006 o5.Type = model.TEAM_OPEN 1007 o5.AllowOpenInvite = true 1008 t5, err := ss.Team().Save(&o5) 1009 require.NoError(t, err) 1010 1011 teams, err = ss.Team().GetAllPage(0, 4, opts) 1012 assert.NoError(t, err) 1013 assert.Equal(t, []*model.Team{t1, t3, t5}, teams) 1014 1015 _, err = ss.Team().GetAllPage(1, 1, opts) 1016 assert.NoError(t, err) 1017 } 1018 1019 func testDelete(t *testing.T, ss store.Store) { 1020 o1 := model.Team{} 1021 o1.DisplayName = "DisplayName" 1022 o1.Name = NewTestId() 1023 o1.Email = MakeEmail() 1024 o1.Type = model.TEAM_OPEN 1025 o1.AllowOpenInvite = true 1026 _, err := ss.Team().Save(&o1) 1027 require.NoError(t, err) 1028 1029 o2 := model.Team{} 1030 o2.DisplayName = "DisplayName" 1031 o2.Name = NewTestId() 1032 o2.Email = MakeEmail() 1033 o2.Type = model.TEAM_OPEN 1034 _, err = ss.Team().Save(&o2) 1035 require.NoError(t, err) 1036 1037 r1 := ss.Team().PermanentDelete(o1.Id) 1038 require.NoError(t, r1) 1039 } 1040 1041 func testPublicTeamCount(t *testing.T, ss store.Store) { 1042 cleanupTeamStore(t, ss) 1043 1044 o1 := model.Team{} 1045 o1.DisplayName = "DisplayName" 1046 o1.Name = NewTestId() 1047 o1.Email = MakeEmail() 1048 o1.Type = model.TEAM_OPEN 1049 o1.AllowOpenInvite = true 1050 _, err := ss.Team().Save(&o1) 1051 require.NoError(t, err) 1052 1053 o2 := model.Team{} 1054 o2.DisplayName = "DisplayName" 1055 o2.Name = NewTestId() 1056 o2.Email = MakeEmail() 1057 o2.Type = model.TEAM_OPEN 1058 o2.AllowOpenInvite = false 1059 _, err = ss.Team().Save(&o2) 1060 require.NoError(t, err) 1061 1062 o3 := model.Team{} 1063 o3.DisplayName = "DisplayName" 1064 o3.Name = NewTestId() 1065 o3.Email = MakeEmail() 1066 o3.Type = model.TEAM_OPEN 1067 o3.AllowOpenInvite = true 1068 _, err = ss.Team().Save(&o3) 1069 require.NoError(t, err) 1070 1071 teamCount, err := ss.Team().AnalyticsTeamCount(&model.TeamSearch{AllowOpenInvite: model.NewBool(true)}) 1072 require.NoError(t, err) 1073 require.Equal(t, int64(2), teamCount, "should only be 1 team") 1074 } 1075 1076 func testPrivateTeamCount(t *testing.T, ss store.Store) { 1077 cleanupTeamStore(t, ss) 1078 1079 o1 := model.Team{} 1080 o1.DisplayName = "DisplayName" 1081 o1.Name = NewTestId() 1082 o1.Email = MakeEmail() 1083 o1.Type = model.TEAM_OPEN 1084 o1.AllowOpenInvite = false 1085 _, err := ss.Team().Save(&o1) 1086 require.NoError(t, err) 1087 1088 o2 := model.Team{} 1089 o2.DisplayName = "DisplayName" 1090 o2.Name = NewTestId() 1091 o2.Email = MakeEmail() 1092 o2.Type = model.TEAM_OPEN 1093 o2.AllowOpenInvite = true 1094 _, err = ss.Team().Save(&o2) 1095 require.NoError(t, err) 1096 1097 o3 := model.Team{} 1098 o3.DisplayName = "DisplayName" 1099 o3.Name = NewTestId() 1100 o3.Email = MakeEmail() 1101 o3.Type = model.TEAM_OPEN 1102 o3.AllowOpenInvite = false 1103 _, err = ss.Team().Save(&o3) 1104 require.NoError(t, err) 1105 1106 teamCount, err := ss.Team().AnalyticsTeamCount(&model.TeamSearch{AllowOpenInvite: model.NewBool(false)}) 1107 require.NoError(t, err) 1108 require.Equal(t, int64(2), teamCount, "should only be 1 team") 1109 } 1110 1111 func testTeamCount(t *testing.T, ss store.Store) { 1112 o1 := model.Team{} 1113 o1.DisplayName = "DisplayName" 1114 o1.Name = NewTestId() 1115 o1.Email = MakeEmail() 1116 o1.Type = model.TEAM_OPEN 1117 o1.AllowOpenInvite = true 1118 team, err := ss.Team().Save(&o1) 1119 require.NoError(t, err) 1120 1121 // not including deleted teams 1122 teamCount, err := ss.Team().AnalyticsTeamCount(nil) 1123 require.NoError(t, err) 1124 require.NotEqual(t, 0, int(teamCount), "should be at least 1 team") 1125 1126 // delete the team for the next check 1127 team.DeleteAt = model.GetMillis() 1128 _, err = ss.Team().Update(team) 1129 require.NoError(t, err) 1130 1131 // get the count of teams not including deleted 1132 countNotIncludingDeleted, err := ss.Team().AnalyticsTeamCount(nil) 1133 require.NoError(t, err) 1134 1135 // get the count of teams including deleted 1136 countIncludingDeleted, err := ss.Team().AnalyticsTeamCount(&model.TeamSearch{IncludeDeleted: model.NewBool(true)}) 1137 require.NoError(t, err) 1138 1139 // count including deleted should be one greater than not including deleted 1140 require.Equal(t, countNotIncludingDeleted+1, countIncludingDeleted) 1141 } 1142 1143 func testGetMembers(t *testing.T, ss store.Store) { 1144 // Each user should have a mention count of exactly 1 in the DB at this point. 1145 t.Run("Test GetMembers Order By UserID", func(t *testing.T) { 1146 teamId1 := model.NewId() 1147 teamId2 := model.NewId() 1148 1149 m1 := &model.TeamMember{TeamId: teamId1, UserId: "55555555555555555555555555"} 1150 m2 := &model.TeamMember{TeamId: teamId1, UserId: "11111111111111111111111111"} 1151 m3 := &model.TeamMember{TeamId: teamId1, UserId: "33333333333333333333333333"} 1152 m4 := &model.TeamMember{TeamId: teamId1, UserId: "22222222222222222222222222"} 1153 m5 := &model.TeamMember{TeamId: teamId1, UserId: "44444444444444444444444444"} 1154 m6 := &model.TeamMember{TeamId: teamId2, UserId: "00000000000000000000000000"} 1155 1156 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2, m3, m4, m5, m6}, -1) 1157 require.NoError(t, nErr) 1158 1159 // Gets users ordered by UserId 1160 ms, err := ss.Team().GetMembers(teamId1, 0, 100, nil) 1161 require.NoError(t, err) 1162 assert.Len(t, ms, 5) 1163 assert.Equal(t, "11111111111111111111111111", ms[0].UserId) 1164 assert.Equal(t, "22222222222222222222222222", ms[1].UserId) 1165 assert.Equal(t, "33333333333333333333333333", ms[2].UserId) 1166 assert.Equal(t, "44444444444444444444444444", ms[3].UserId) 1167 assert.Equal(t, "55555555555555555555555555", ms[4].UserId) 1168 }) 1169 1170 t.Run("Test GetMembers Order By Username And Exclude Deleted Members", func(t *testing.T) { 1171 teamId1 := model.NewId() 1172 teamId2 := model.NewId() 1173 1174 u1 := &model.User{Username: "a", Email: MakeEmail(), DeleteAt: int64(1)} 1175 u2 := &model.User{Username: "c", Email: MakeEmail()} 1176 u3 := &model.User{Username: "b", Email: MakeEmail(), DeleteAt: int64(1)} 1177 u4 := &model.User{Username: "f", Email: MakeEmail()} 1178 u5 := &model.User{Username: "e", Email: MakeEmail(), DeleteAt: int64(1)} 1179 u6 := &model.User{Username: "d", Email: MakeEmail()} 1180 1181 u1, err := ss.User().Save(u1) 1182 require.NoError(t, err) 1183 u2, err = ss.User().Save(u2) 1184 require.NoError(t, err) 1185 u3, err = ss.User().Save(u3) 1186 require.NoError(t, err) 1187 u4, err = ss.User().Save(u4) 1188 require.NoError(t, err) 1189 u5, err = ss.User().Save(u5) 1190 require.NoError(t, err) 1191 u6, err = ss.User().Save(u6) 1192 require.NoError(t, err) 1193 1194 m1 := &model.TeamMember{TeamId: teamId1, UserId: u1.Id} 1195 m2 := &model.TeamMember{TeamId: teamId1, UserId: u2.Id} 1196 m3 := &model.TeamMember{TeamId: teamId1, UserId: u3.Id} 1197 m4 := &model.TeamMember{TeamId: teamId1, UserId: u4.Id} 1198 m5 := &model.TeamMember{TeamId: teamId1, UserId: u5.Id} 1199 m6 := &model.TeamMember{TeamId: teamId2, UserId: u6.Id} 1200 1201 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2, m3, m4, m5, m6}, -1) 1202 require.NoError(t, nErr) 1203 1204 // Gets users ordered by UserName 1205 ms, nErr := ss.Team().GetMembers(teamId1, 0, 100, &model.TeamMembersGetOptions{Sort: model.USERNAME}) 1206 require.NoError(t, nErr) 1207 assert.Len(t, ms, 5) 1208 assert.Equal(t, u1.Id, ms[0].UserId) 1209 assert.Equal(t, u3.Id, ms[1].UserId) 1210 assert.Equal(t, u2.Id, ms[2].UserId) 1211 assert.Equal(t, u5.Id, ms[3].UserId) 1212 assert.Equal(t, u4.Id, ms[4].UserId) 1213 1214 // Gets users ordered by UserName and excludes deleted members 1215 ms, nErr = ss.Team().GetMembers(teamId1, 0, 100, &model.TeamMembersGetOptions{Sort: model.USERNAME, ExcludeDeletedUsers: true}) 1216 require.NoError(t, nErr) 1217 assert.Len(t, ms, 2) 1218 assert.Equal(t, u2.Id, ms[0].UserId) 1219 assert.Equal(t, u4.Id, ms[1].UserId) 1220 }) 1221 1222 t.Run("Test GetMembers Excluded Deleted Users", func(t *testing.T) { 1223 teamId1 := model.NewId() 1224 teamId2 := model.NewId() 1225 1226 u1 := &model.User{Email: MakeEmail()} 1227 u2 := &model.User{Email: MakeEmail(), DeleteAt: int64(1)} 1228 u3 := &model.User{Email: MakeEmail()} 1229 u4 := &model.User{Email: MakeEmail(), DeleteAt: int64(3)} 1230 u5 := &model.User{Email: MakeEmail()} 1231 u6 := &model.User{Email: MakeEmail(), DeleteAt: int64(5)} 1232 1233 u1, err := ss.User().Save(u1) 1234 require.NoError(t, err) 1235 u2, err = ss.User().Save(u2) 1236 require.NoError(t, err) 1237 u3, err = ss.User().Save(u3) 1238 require.NoError(t, err) 1239 u4, err = ss.User().Save(u4) 1240 require.NoError(t, err) 1241 u5, err = ss.User().Save(u5) 1242 require.NoError(t, err) 1243 u6, err = ss.User().Save(u6) 1244 require.NoError(t, err) 1245 1246 m1 := &model.TeamMember{TeamId: teamId1, UserId: u1.Id} 1247 m2 := &model.TeamMember{TeamId: teamId1, UserId: u2.Id} 1248 m3 := &model.TeamMember{TeamId: teamId1, UserId: u3.Id} 1249 m4 := &model.TeamMember{TeamId: teamId1, UserId: u4.Id} 1250 m5 := &model.TeamMember{TeamId: teamId1, UserId: u5.Id} 1251 m6 := &model.TeamMember{TeamId: teamId2, UserId: u6.Id} 1252 1253 t1, nErr := ss.Team().SaveMember(m1, -1) 1254 require.NoError(t, nErr) 1255 _, nErr = ss.Team().SaveMember(m2, -1) 1256 require.NoError(t, nErr) 1257 t3, nErr := ss.Team().SaveMember(m3, -1) 1258 require.NoError(t, nErr) 1259 _, nErr = ss.Team().SaveMember(m4, -1) 1260 require.NoError(t, nErr) 1261 t5, nErr := ss.Team().SaveMember(m5, -1) 1262 require.NoError(t, nErr) 1263 _, nErr = ss.Team().SaveMember(m6, -1) 1264 require.NoError(t, nErr) 1265 1266 // Gets users ordered by UserName 1267 ms, nErr := ss.Team().GetMembers(teamId1, 0, 100, &model.TeamMembersGetOptions{ExcludeDeletedUsers: true}) 1268 require.NoError(t, nErr) 1269 assert.Len(t, ms, 3) 1270 require.ElementsMatch(t, ms, [3]*model.TeamMember{t1, t3, t5}) 1271 }) 1272 } 1273 1274 func testTeamMembers(t *testing.T, ss store.Store) { 1275 teamId1 := model.NewId() 1276 teamId2 := model.NewId() 1277 1278 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 1279 m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 1280 m3 := &model.TeamMember{TeamId: teamId2, UserId: model.NewId()} 1281 1282 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2, m3}, -1) 1283 require.NoError(t, nErr) 1284 1285 ms, err := ss.Team().GetMembers(teamId1, 0, 100, nil) 1286 require.NoError(t, err) 1287 assert.Len(t, ms, 2) 1288 1289 ms, err = ss.Team().GetMembers(teamId2, 0, 100, nil) 1290 require.NoError(t, err) 1291 require.Len(t, ms, 1) 1292 require.Equal(t, m3.UserId, ms[0].UserId) 1293 1294 ctx := context.Background() 1295 ms, err = ss.Team().GetTeamsForUser(ctx, m1.UserId) 1296 require.NoError(t, err) 1297 require.Len(t, ms, 1) 1298 require.Equal(t, m1.TeamId, ms[0].TeamId) 1299 1300 err = ss.Team().RemoveMember(teamId1, m1.UserId) 1301 require.NoError(t, err) 1302 1303 ms, err = ss.Team().GetMembers(teamId1, 0, 100, nil) 1304 require.NoError(t, err) 1305 require.Len(t, ms, 1) 1306 require.Equal(t, m2.UserId, ms[0].UserId) 1307 1308 _, nErr = ss.Team().SaveMember(m1, -1) 1309 require.NoError(t, nErr) 1310 1311 err = ss.Team().RemoveAllMembersByTeam(teamId1) 1312 require.NoError(t, err) 1313 1314 ms, err = ss.Team().GetMembers(teamId1, 0, 100, nil) 1315 require.NoError(t, err) 1316 require.Empty(t, ms) 1317 1318 uid := model.NewId() 1319 m4 := &model.TeamMember{TeamId: teamId1, UserId: uid} 1320 m5 := &model.TeamMember{TeamId: teamId2, UserId: uid} 1321 _, nErr = ss.Team().SaveMultipleMembers([]*model.TeamMember{m4, m5}, -1) 1322 require.NoError(t, nErr) 1323 1324 ms, err = ss.Team().GetTeamsForUser(ctx, uid) 1325 require.NoError(t, err) 1326 require.Len(t, ms, 2) 1327 1328 nErr = ss.Team().RemoveAllMembersByUser(uid) 1329 require.NoError(t, nErr) 1330 1331 ms, err = ss.Team().GetTeamsForUser(ctx, m1.UserId) 1332 require.NoError(t, err) 1333 require.Empty(t, ms) 1334 } 1335 1336 func testTeamSaveMember(t *testing.T, ss store.Store) { 1337 u1, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 1338 require.NoError(t, err) 1339 u2, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 1340 require.NoError(t, err) 1341 1342 t.Run("not valid team member", func(t *testing.T) { 1343 member := &model.TeamMember{TeamId: "wrong", UserId: u1.Id} 1344 _, nErr := ss.Team().SaveMember(member, -1) 1345 require.Error(t, nErr) 1346 require.Equal(t, "TeamMember.IsValid: model.team_member.is_valid.team_id.app_error, ", nErr.Error()) 1347 }) 1348 1349 t.Run("too many members", func(t *testing.T) { 1350 member := &model.TeamMember{TeamId: model.NewId(), UserId: u1.Id} 1351 _, nErr := ss.Team().SaveMember(member, 0) 1352 require.Error(t, nErr) 1353 require.Equal(t, "limit exceeded: what: TeamMember count: 1 metadata: team members limit exceeded", nErr.Error()) 1354 }) 1355 1356 t.Run("too many members because previous existing members", func(t *testing.T) { 1357 teamID := model.NewId() 1358 1359 m1 := &model.TeamMember{TeamId: teamID, UserId: u1.Id} 1360 _, nErr := ss.Team().SaveMember(m1, 1) 1361 require.NoError(t, nErr) 1362 m2 := &model.TeamMember{TeamId: teamID, UserId: u2.Id} 1363 _, nErr = ss.Team().SaveMember(m2, 1) 1364 require.Error(t, nErr) 1365 require.Equal(t, "limit exceeded: what: TeamMember count: 2 metadata: team members limit exceeded", nErr.Error()) 1366 }) 1367 1368 t.Run("duplicated entries should fail", func(t *testing.T) { 1369 teamID1 := model.NewId() 1370 m1 := &model.TeamMember{TeamId: teamID1, UserId: u1.Id} 1371 _, nErr := ss.Team().SaveMember(m1, -1) 1372 require.NoError(t, nErr) 1373 m2 := &model.TeamMember{TeamId: teamID1, UserId: u1.Id} 1374 _, nErr = ss.Team().SaveMember(m2, -1) 1375 require.Error(t, nErr) 1376 require.IsType(t, &store.ErrConflict{}, nErr) 1377 }) 1378 1379 t.Run("insert member correctly (in team without scheme)", func(t *testing.T) { 1380 team := &model.Team{ 1381 DisplayName: "Name", 1382 Name: NewTestId(), 1383 Email: MakeEmail(), 1384 Type: model.TEAM_OPEN, 1385 } 1386 1387 team, nErr := ss.Team().Save(team) 1388 require.NoError(t, nErr) 1389 1390 testCases := []struct { 1391 Name string 1392 SchemeGuest bool 1393 SchemeUser bool 1394 SchemeAdmin bool 1395 ExplicitRoles string 1396 ExpectedRoles string 1397 ExpectedExplicitRoles string 1398 ExpectedSchemeGuest bool 1399 ExpectedSchemeUser bool 1400 ExpectedSchemeAdmin bool 1401 }{ 1402 { 1403 Name: "team user implicit", 1404 SchemeUser: true, 1405 ExpectedRoles: "team_user", 1406 ExpectedSchemeUser: true, 1407 }, 1408 { 1409 Name: "team user explicit", 1410 ExplicitRoles: "team_user", 1411 ExpectedRoles: "team_user", 1412 ExpectedSchemeUser: true, 1413 }, 1414 { 1415 Name: "team guest implicit", 1416 SchemeGuest: true, 1417 ExpectedRoles: "team_guest", 1418 ExpectedSchemeGuest: true, 1419 }, 1420 { 1421 Name: "team guest explicit", 1422 ExplicitRoles: "team_guest", 1423 ExpectedRoles: "team_guest", 1424 ExpectedSchemeGuest: true, 1425 }, 1426 { 1427 Name: "team admin implicit", 1428 SchemeUser: true, 1429 SchemeAdmin: true, 1430 ExpectedRoles: "team_user team_admin", 1431 ExpectedSchemeUser: true, 1432 ExpectedSchemeAdmin: true, 1433 }, 1434 { 1435 Name: "team admin explicit", 1436 ExplicitRoles: "team_user team_admin", 1437 ExpectedRoles: "team_user team_admin", 1438 ExpectedSchemeUser: true, 1439 ExpectedSchemeAdmin: true, 1440 }, 1441 { 1442 Name: "team user implicit and explicit custom role", 1443 SchemeUser: true, 1444 ExplicitRoles: "test", 1445 ExpectedRoles: "test team_user", 1446 ExpectedExplicitRoles: "test", 1447 ExpectedSchemeUser: true, 1448 }, 1449 { 1450 Name: "team user explicit and explicit custom role", 1451 ExplicitRoles: "team_user test", 1452 ExpectedRoles: "test team_user", 1453 ExpectedExplicitRoles: "test", 1454 ExpectedSchemeUser: true, 1455 }, 1456 { 1457 Name: "team guest implicit and explicit custom role", 1458 SchemeGuest: true, 1459 ExplicitRoles: "test", 1460 ExpectedRoles: "test team_guest", 1461 ExpectedExplicitRoles: "test", 1462 ExpectedSchemeGuest: true, 1463 }, 1464 { 1465 Name: "team guest explicit and explicit custom role", 1466 ExplicitRoles: "team_guest test", 1467 ExpectedRoles: "test team_guest", 1468 ExpectedExplicitRoles: "test", 1469 ExpectedSchemeGuest: true, 1470 }, 1471 { 1472 Name: "team admin implicit and explicit custom role", 1473 SchemeUser: true, 1474 SchemeAdmin: true, 1475 ExplicitRoles: "test", 1476 ExpectedRoles: "test team_user team_admin", 1477 ExpectedExplicitRoles: "test", 1478 ExpectedSchemeUser: true, 1479 ExpectedSchemeAdmin: true, 1480 }, 1481 { 1482 Name: "team admin explicit and explicit custom role", 1483 ExplicitRoles: "team_user team_admin test", 1484 ExpectedRoles: "test team_user team_admin", 1485 ExpectedExplicitRoles: "test", 1486 ExpectedSchemeUser: true, 1487 ExpectedSchemeAdmin: true, 1488 }, 1489 { 1490 Name: "team member with only explicit custom roles", 1491 ExplicitRoles: "test test2", 1492 ExpectedRoles: "test test2", 1493 ExpectedExplicitRoles: "test test2", 1494 }, 1495 } 1496 1497 for _, tc := range testCases { 1498 t.Run(tc.Name, func(t *testing.T) { 1499 member := &model.TeamMember{ 1500 TeamId: team.Id, 1501 UserId: u1.Id, 1502 SchemeGuest: tc.SchemeGuest, 1503 SchemeUser: tc.SchemeUser, 1504 SchemeAdmin: tc.SchemeAdmin, 1505 ExplicitRoles: tc.ExplicitRoles, 1506 } 1507 member, nErr := ss.Team().SaveMember(member, -1) 1508 require.NoError(t, nErr) 1509 defer ss.Team().RemoveMember(team.Id, u1.Id) 1510 1511 assert.Equal(t, tc.ExpectedRoles, member.Roles) 1512 assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) 1513 assert.Equal(t, tc.ExpectedSchemeGuest, member.SchemeGuest) 1514 assert.Equal(t, tc.ExpectedSchemeUser, member.SchemeUser) 1515 assert.Equal(t, tc.ExpectedSchemeAdmin, member.SchemeAdmin) 1516 }) 1517 } 1518 }) 1519 1520 t.Run("insert member correctly (in team with scheme)", func(t *testing.T) { 1521 ts := &model.Scheme{ 1522 Name: NewTestId(), 1523 DisplayName: NewTestId(), 1524 Description: NewTestId(), 1525 Scope: model.SCHEME_SCOPE_TEAM, 1526 } 1527 ts, nErr := ss.Scheme().Save(ts) 1528 require.NoError(t, nErr) 1529 1530 team := &model.Team{ 1531 DisplayName: "Name", 1532 Name: NewTestId(), 1533 Email: MakeEmail(), 1534 Type: model.TEAM_OPEN, 1535 SchemeId: &ts.Id, 1536 } 1537 1538 team, nErr = ss.Team().Save(team) 1539 require.NoError(t, nErr) 1540 1541 testCases := []struct { 1542 Name string 1543 SchemeGuest bool 1544 SchemeUser bool 1545 SchemeAdmin bool 1546 ExplicitRoles string 1547 ExpectedRoles string 1548 ExpectedExplicitRoles string 1549 ExpectedSchemeGuest bool 1550 ExpectedSchemeUser bool 1551 ExpectedSchemeAdmin bool 1552 }{ 1553 { 1554 Name: "team user implicit", 1555 SchemeUser: true, 1556 ExpectedRoles: ts.DefaultTeamUserRole, 1557 ExpectedSchemeUser: true, 1558 }, 1559 { 1560 Name: "team user explicit", 1561 ExplicitRoles: "team_user", 1562 ExpectedRoles: ts.DefaultTeamUserRole, 1563 ExpectedSchemeUser: true, 1564 }, 1565 { 1566 Name: "team guest implicit", 1567 SchemeGuest: true, 1568 ExpectedRoles: ts.DefaultTeamGuestRole, 1569 ExpectedSchemeGuest: true, 1570 }, 1571 { 1572 Name: "team guest explicit", 1573 ExplicitRoles: "team_guest", 1574 ExpectedRoles: ts.DefaultTeamGuestRole, 1575 ExpectedSchemeGuest: true, 1576 }, 1577 { 1578 Name: "team admin implicit", 1579 SchemeUser: true, 1580 SchemeAdmin: true, 1581 ExpectedRoles: ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 1582 ExpectedSchemeUser: true, 1583 ExpectedSchemeAdmin: true, 1584 }, 1585 { 1586 Name: "team admin explicit", 1587 ExplicitRoles: "team_user team_admin", 1588 ExpectedRoles: ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 1589 ExpectedSchemeUser: true, 1590 ExpectedSchemeAdmin: true, 1591 }, 1592 { 1593 Name: "team user implicit and explicit custom role", 1594 SchemeUser: true, 1595 ExplicitRoles: "test", 1596 ExpectedRoles: "test " + ts.DefaultTeamUserRole, 1597 ExpectedExplicitRoles: "test", 1598 ExpectedSchemeUser: true, 1599 }, 1600 { 1601 Name: "team user explicit and explicit custom role", 1602 ExplicitRoles: "team_user test", 1603 ExpectedRoles: "test " + ts.DefaultTeamUserRole, 1604 ExpectedExplicitRoles: "test", 1605 ExpectedSchemeUser: true, 1606 }, 1607 { 1608 Name: "team guest implicit and explicit custom role", 1609 SchemeGuest: true, 1610 ExplicitRoles: "test", 1611 ExpectedRoles: "test " + ts.DefaultTeamGuestRole, 1612 ExpectedExplicitRoles: "test", 1613 ExpectedSchemeGuest: true, 1614 }, 1615 { 1616 Name: "team guest explicit and explicit custom role", 1617 ExplicitRoles: "team_guest test", 1618 ExpectedRoles: "test " + ts.DefaultTeamGuestRole, 1619 ExpectedExplicitRoles: "test", 1620 ExpectedSchemeGuest: true, 1621 }, 1622 { 1623 Name: "team admin implicit and explicit custom role", 1624 SchemeUser: true, 1625 SchemeAdmin: true, 1626 ExplicitRoles: "test", 1627 ExpectedRoles: "test " + ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 1628 ExpectedExplicitRoles: "test", 1629 ExpectedSchemeUser: true, 1630 ExpectedSchemeAdmin: true, 1631 }, 1632 { 1633 Name: "team admin explicit and explicit custom role", 1634 ExplicitRoles: "team_user team_admin test", 1635 ExpectedRoles: "test " + ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 1636 ExpectedExplicitRoles: "test", 1637 ExpectedSchemeUser: true, 1638 ExpectedSchemeAdmin: true, 1639 }, 1640 { 1641 Name: "team member with only explicit custom roles", 1642 ExplicitRoles: "test test2", 1643 ExpectedRoles: "test test2", 1644 ExpectedExplicitRoles: "test test2", 1645 }, 1646 } 1647 1648 for _, tc := range testCases { 1649 t.Run(tc.Name, func(t *testing.T) { 1650 member := &model.TeamMember{ 1651 TeamId: team.Id, 1652 UserId: u1.Id, 1653 SchemeGuest: tc.SchemeGuest, 1654 SchemeUser: tc.SchemeUser, 1655 SchemeAdmin: tc.SchemeAdmin, 1656 ExplicitRoles: tc.ExplicitRoles, 1657 } 1658 member, nErr := ss.Team().SaveMember(member, -1) 1659 require.NoError(t, nErr) 1660 defer ss.Team().RemoveMember(team.Id, u1.Id) 1661 1662 assert.Equal(t, tc.ExpectedRoles, member.Roles) 1663 assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) 1664 assert.Equal(t, tc.ExpectedSchemeGuest, member.SchemeGuest) 1665 assert.Equal(t, tc.ExpectedSchemeUser, member.SchemeUser) 1666 assert.Equal(t, tc.ExpectedSchemeAdmin, member.SchemeAdmin) 1667 }) 1668 } 1669 }) 1670 } 1671 1672 func testTeamSaveMultipleMembers(t *testing.T, ss store.Store) { 1673 u1, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 1674 require.NoError(t, err) 1675 u2, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 1676 require.NoError(t, err) 1677 u3, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 1678 require.NoError(t, err) 1679 u4, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 1680 require.NoError(t, err) 1681 1682 t.Run("any not valid team member", func(t *testing.T) { 1683 m1 := &model.TeamMember{TeamId: "wrong", UserId: u1.Id} 1684 m2 := &model.TeamMember{TeamId: model.NewId(), UserId: u2.Id} 1685 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2}, -1) 1686 require.Error(t, nErr) 1687 require.Equal(t, "TeamMember.IsValid: model.team_member.is_valid.team_id.app_error, ", nErr.Error()) 1688 }) 1689 1690 t.Run("too many members in one team", func(t *testing.T) { 1691 teamID := model.NewId() 1692 m1 := &model.TeamMember{TeamId: teamID, UserId: u1.Id} 1693 m2 := &model.TeamMember{TeamId: teamID, UserId: u2.Id} 1694 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2}, 0) 1695 require.Error(t, nErr) 1696 require.Equal(t, "limit exceeded: what: TeamMember count: 2 metadata: team members limit exceeded", nErr.Error()) 1697 }) 1698 1699 t.Run("too many members in one team because previous existing members", func(t *testing.T) { 1700 teamID := model.NewId() 1701 m1 := &model.TeamMember{TeamId: teamID, UserId: u1.Id} 1702 m2 := &model.TeamMember{TeamId: teamID, UserId: u2.Id} 1703 m3 := &model.TeamMember{TeamId: teamID, UserId: u3.Id} 1704 m4 := &model.TeamMember{TeamId: teamID, UserId: u4.Id} 1705 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2}, 3) 1706 require.NoError(t, nErr) 1707 1708 _, nErr = ss.Team().SaveMultipleMembers([]*model.TeamMember{m3, m4}, 3) 1709 require.Error(t, nErr) 1710 require.Equal(t, "limit exceeded: what: TeamMember count: 4 metadata: team members limit exceeded", nErr.Error()) 1711 }) 1712 1713 t.Run("too many members, but in different teams", func(t *testing.T) { 1714 teamID1 := model.NewId() 1715 teamID2 := model.NewId() 1716 m1 := &model.TeamMember{TeamId: teamID1, UserId: u1.Id} 1717 m2 := &model.TeamMember{TeamId: teamID1, UserId: u2.Id} 1718 m3 := &model.TeamMember{TeamId: teamID1, UserId: u3.Id} 1719 m4 := &model.TeamMember{TeamId: teamID2, UserId: u1.Id} 1720 m5 := &model.TeamMember{TeamId: teamID2, UserId: u2.Id} 1721 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2, m3, m4, m5}, 2) 1722 require.Error(t, nErr) 1723 require.Equal(t, "limit exceeded: what: TeamMember count: 3 metadata: team members limit exceeded", nErr.Error()) 1724 }) 1725 1726 t.Run("duplicated entries should fail", func(t *testing.T) { 1727 teamID1 := model.NewId() 1728 m1 := &model.TeamMember{TeamId: teamID1, UserId: u1.Id} 1729 m2 := &model.TeamMember{TeamId: teamID1, UserId: u1.Id} 1730 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2}, 10) 1731 require.Error(t, nErr) 1732 require.IsType(t, &store.ErrConflict{}, nErr) 1733 }) 1734 1735 t.Run("insert members correctly (in team without scheme)", func(t *testing.T) { 1736 team := &model.Team{ 1737 DisplayName: "Name", 1738 Name: NewTestId(), 1739 Email: MakeEmail(), 1740 Type: model.TEAM_OPEN, 1741 } 1742 1743 team, nErr := ss.Team().Save(team) 1744 require.NoError(t, nErr) 1745 1746 testCases := []struct { 1747 Name string 1748 SchemeGuest bool 1749 SchemeUser bool 1750 SchemeAdmin bool 1751 ExplicitRoles string 1752 ExpectedRoles string 1753 ExpectedExplicitRoles string 1754 ExpectedSchemeGuest bool 1755 ExpectedSchemeUser bool 1756 ExpectedSchemeAdmin bool 1757 }{ 1758 { 1759 Name: "team user implicit", 1760 SchemeUser: true, 1761 ExpectedRoles: "team_user", 1762 ExpectedSchemeUser: true, 1763 }, 1764 { 1765 Name: "team user explicit", 1766 ExplicitRoles: "team_user", 1767 ExpectedRoles: "team_user", 1768 ExpectedSchemeUser: true, 1769 }, 1770 { 1771 Name: "team guest implicit", 1772 SchemeGuest: true, 1773 ExpectedRoles: "team_guest", 1774 ExpectedSchemeGuest: true, 1775 }, 1776 { 1777 Name: "team guest explicit", 1778 ExplicitRoles: "team_guest", 1779 ExpectedRoles: "team_guest", 1780 ExpectedSchemeGuest: true, 1781 }, 1782 { 1783 Name: "team admin implicit", 1784 SchemeUser: true, 1785 SchemeAdmin: true, 1786 ExpectedRoles: "team_user team_admin", 1787 ExpectedSchemeUser: true, 1788 ExpectedSchemeAdmin: true, 1789 }, 1790 { 1791 Name: "team admin explicit", 1792 ExplicitRoles: "team_user team_admin", 1793 ExpectedRoles: "team_user team_admin", 1794 ExpectedSchemeUser: true, 1795 ExpectedSchemeAdmin: true, 1796 }, 1797 { 1798 Name: "team user implicit and explicit custom role", 1799 SchemeUser: true, 1800 ExplicitRoles: "test", 1801 ExpectedRoles: "test team_user", 1802 ExpectedExplicitRoles: "test", 1803 ExpectedSchemeUser: true, 1804 }, 1805 { 1806 Name: "team user explicit and explicit custom role", 1807 ExplicitRoles: "team_user test", 1808 ExpectedRoles: "test team_user", 1809 ExpectedExplicitRoles: "test", 1810 ExpectedSchemeUser: true, 1811 }, 1812 { 1813 Name: "team guest implicit and explicit custom role", 1814 SchemeGuest: true, 1815 ExplicitRoles: "test", 1816 ExpectedRoles: "test team_guest", 1817 ExpectedExplicitRoles: "test", 1818 ExpectedSchemeGuest: true, 1819 }, 1820 { 1821 Name: "team guest explicit and explicit custom role", 1822 ExplicitRoles: "team_guest test", 1823 ExpectedRoles: "test team_guest", 1824 ExpectedExplicitRoles: "test", 1825 ExpectedSchemeGuest: true, 1826 }, 1827 { 1828 Name: "team admin implicit and explicit custom role", 1829 SchemeUser: true, 1830 SchemeAdmin: true, 1831 ExplicitRoles: "test", 1832 ExpectedRoles: "test team_user team_admin", 1833 ExpectedExplicitRoles: "test", 1834 ExpectedSchemeUser: true, 1835 ExpectedSchemeAdmin: true, 1836 }, 1837 { 1838 Name: "team admin explicit and explicit custom role", 1839 ExplicitRoles: "team_user team_admin test", 1840 ExpectedRoles: "test team_user team_admin", 1841 ExpectedExplicitRoles: "test", 1842 ExpectedSchemeUser: true, 1843 ExpectedSchemeAdmin: true, 1844 }, 1845 { 1846 Name: "team member with only explicit custom roles", 1847 ExplicitRoles: "test test2", 1848 ExpectedRoles: "test test2", 1849 ExpectedExplicitRoles: "test test2", 1850 }, 1851 } 1852 1853 for _, tc := range testCases { 1854 t.Run(tc.Name, func(t *testing.T) { 1855 member := &model.TeamMember{ 1856 TeamId: team.Id, 1857 UserId: u1.Id, 1858 SchemeGuest: tc.SchemeGuest, 1859 SchemeUser: tc.SchemeUser, 1860 SchemeAdmin: tc.SchemeAdmin, 1861 ExplicitRoles: tc.ExplicitRoles, 1862 } 1863 otherMember := &model.TeamMember{ 1864 TeamId: team.Id, 1865 UserId: u2.Id, 1866 SchemeGuest: tc.SchemeGuest, 1867 SchemeUser: tc.SchemeUser, 1868 SchemeAdmin: tc.SchemeAdmin, 1869 ExplicitRoles: tc.ExplicitRoles, 1870 } 1871 var members []*model.TeamMember 1872 members, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{member, otherMember}, -1) 1873 require.NoError(t, nErr) 1874 require.Len(t, members, 2) 1875 member = members[0] 1876 defer ss.Team().RemoveMember(team.Id, u1.Id) 1877 defer ss.Team().RemoveMember(team.Id, u2.Id) 1878 1879 assert.Equal(t, tc.ExpectedRoles, member.Roles) 1880 assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) 1881 assert.Equal(t, tc.ExpectedSchemeGuest, member.SchemeGuest) 1882 assert.Equal(t, tc.ExpectedSchemeUser, member.SchemeUser) 1883 assert.Equal(t, tc.ExpectedSchemeAdmin, member.SchemeAdmin) 1884 }) 1885 } 1886 }) 1887 1888 t.Run("insert members correctly (in team with scheme)", func(t *testing.T) { 1889 ts := &model.Scheme{ 1890 Name: NewTestId(), 1891 DisplayName: NewTestId(), 1892 Description: NewTestId(), 1893 Scope: model.SCHEME_SCOPE_TEAM, 1894 } 1895 ts, nErr := ss.Scheme().Save(ts) 1896 require.NoError(t, nErr) 1897 1898 team := &model.Team{ 1899 DisplayName: "Name", 1900 Name: NewTestId(), 1901 Email: MakeEmail(), 1902 Type: model.TEAM_OPEN, 1903 SchemeId: &ts.Id, 1904 } 1905 1906 team, nErr = ss.Team().Save(team) 1907 require.NoError(t, nErr) 1908 1909 testCases := []struct { 1910 Name string 1911 SchemeGuest bool 1912 SchemeUser bool 1913 SchemeAdmin bool 1914 ExplicitRoles string 1915 ExpectedRoles string 1916 ExpectedExplicitRoles string 1917 ExpectedSchemeGuest bool 1918 ExpectedSchemeUser bool 1919 ExpectedSchemeAdmin bool 1920 }{ 1921 { 1922 Name: "team user implicit", 1923 SchemeUser: true, 1924 ExpectedRoles: ts.DefaultTeamUserRole, 1925 ExpectedSchemeUser: true, 1926 }, 1927 { 1928 Name: "team user explicit", 1929 ExplicitRoles: "team_user", 1930 ExpectedRoles: ts.DefaultTeamUserRole, 1931 ExpectedSchemeUser: true, 1932 }, 1933 { 1934 Name: "team guest implicit", 1935 SchemeGuest: true, 1936 ExpectedRoles: ts.DefaultTeamGuestRole, 1937 ExpectedSchemeGuest: true, 1938 }, 1939 { 1940 Name: "team guest explicit", 1941 ExplicitRoles: "team_guest", 1942 ExpectedRoles: ts.DefaultTeamGuestRole, 1943 ExpectedSchemeGuest: true, 1944 }, 1945 { 1946 Name: "team admin implicit", 1947 SchemeUser: true, 1948 SchemeAdmin: true, 1949 ExpectedRoles: ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 1950 ExpectedSchemeUser: true, 1951 ExpectedSchemeAdmin: true, 1952 }, 1953 { 1954 Name: "team admin explicit", 1955 ExplicitRoles: "team_user team_admin", 1956 ExpectedRoles: ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 1957 ExpectedSchemeUser: true, 1958 ExpectedSchemeAdmin: true, 1959 }, 1960 { 1961 Name: "team user implicit and explicit custom role", 1962 SchemeUser: true, 1963 ExplicitRoles: "test", 1964 ExpectedRoles: "test " + ts.DefaultTeamUserRole, 1965 ExpectedExplicitRoles: "test", 1966 ExpectedSchemeUser: true, 1967 }, 1968 { 1969 Name: "team user explicit and explicit custom role", 1970 ExplicitRoles: "team_user test", 1971 ExpectedRoles: "test " + ts.DefaultTeamUserRole, 1972 ExpectedExplicitRoles: "test", 1973 ExpectedSchemeUser: true, 1974 }, 1975 { 1976 Name: "team guest implicit and explicit custom role", 1977 SchemeGuest: true, 1978 ExplicitRoles: "test", 1979 ExpectedRoles: "test " + ts.DefaultTeamGuestRole, 1980 ExpectedExplicitRoles: "test", 1981 ExpectedSchemeGuest: true, 1982 }, 1983 { 1984 Name: "team guest explicit and explicit custom role", 1985 ExplicitRoles: "team_guest test", 1986 ExpectedRoles: "test " + ts.DefaultTeamGuestRole, 1987 ExpectedExplicitRoles: "test", 1988 ExpectedSchemeGuest: true, 1989 }, 1990 { 1991 Name: "team admin implicit and explicit custom role", 1992 SchemeUser: true, 1993 SchemeAdmin: true, 1994 ExplicitRoles: "test", 1995 ExpectedRoles: "test " + ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 1996 ExpectedExplicitRoles: "test", 1997 ExpectedSchemeUser: true, 1998 ExpectedSchemeAdmin: true, 1999 }, 2000 { 2001 Name: "team admin explicit and explicit custom role", 2002 ExplicitRoles: "team_user team_admin test", 2003 ExpectedRoles: "test " + ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 2004 ExpectedExplicitRoles: "test", 2005 ExpectedSchemeUser: true, 2006 ExpectedSchemeAdmin: true, 2007 }, 2008 { 2009 Name: "team member with only explicit custom roles", 2010 ExplicitRoles: "test test2", 2011 ExpectedRoles: "test test2", 2012 ExpectedExplicitRoles: "test test2", 2013 }, 2014 } 2015 2016 for _, tc := range testCases { 2017 t.Run(tc.Name, func(t *testing.T) { 2018 member := &model.TeamMember{ 2019 TeamId: team.Id, 2020 UserId: u1.Id, 2021 SchemeGuest: tc.SchemeGuest, 2022 SchemeUser: tc.SchemeUser, 2023 SchemeAdmin: tc.SchemeAdmin, 2024 ExplicitRoles: tc.ExplicitRoles, 2025 } 2026 otherMember := &model.TeamMember{ 2027 TeamId: team.Id, 2028 UserId: u2.Id, 2029 SchemeGuest: tc.SchemeGuest, 2030 SchemeUser: tc.SchemeUser, 2031 SchemeAdmin: tc.SchemeAdmin, 2032 ExplicitRoles: tc.ExplicitRoles, 2033 } 2034 members, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{member, otherMember}, -1) 2035 require.NoError(t, nErr) 2036 require.Len(t, members, 2) 2037 member = members[0] 2038 defer ss.Team().RemoveMember(team.Id, u1.Id) 2039 defer ss.Team().RemoveMember(team.Id, u2.Id) 2040 2041 assert.Equal(t, tc.ExpectedRoles, member.Roles) 2042 assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) 2043 assert.Equal(t, tc.ExpectedSchemeGuest, member.SchemeGuest) 2044 assert.Equal(t, tc.ExpectedSchemeUser, member.SchemeUser) 2045 assert.Equal(t, tc.ExpectedSchemeAdmin, member.SchemeAdmin) 2046 }) 2047 } 2048 }) 2049 } 2050 2051 func testTeamUpdateMember(t *testing.T, ss store.Store) { 2052 u1, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 2053 require.NoError(t, err) 2054 2055 t.Run("not valid team member", func(t *testing.T) { 2056 member := &model.TeamMember{TeamId: "wrong", UserId: u1.Id} 2057 _, nErr := ss.Team().UpdateMember(member) 2058 require.Error(t, nErr) 2059 var appErr *model.AppError 2060 require.True(t, errors.As(nErr, &appErr)) 2061 require.Equal(t, "model.team_member.is_valid.team_id.app_error", appErr.Id) 2062 }) 2063 2064 t.Run("insert member correctly (in team without scheme)", func(t *testing.T) { 2065 team := &model.Team{ 2066 DisplayName: "Name", 2067 Name: NewTestId(), 2068 Email: MakeEmail(), 2069 Type: model.TEAM_OPEN, 2070 } 2071 2072 team, nErr := ss.Team().Save(team) 2073 require.NoError(t, nErr) 2074 2075 member := &model.TeamMember{TeamId: team.Id, UserId: u1.Id} 2076 member, nErr = ss.Team().SaveMember(member, -1) 2077 require.NoError(t, nErr) 2078 2079 testCases := []struct { 2080 Name string 2081 SchemeGuest bool 2082 SchemeUser bool 2083 SchemeAdmin bool 2084 ExplicitRoles string 2085 ExpectedRoles string 2086 ExpectedExplicitRoles string 2087 ExpectedSchemeGuest bool 2088 ExpectedSchemeUser bool 2089 ExpectedSchemeAdmin bool 2090 }{ 2091 { 2092 Name: "team user implicit", 2093 SchemeUser: true, 2094 ExpectedRoles: "team_user", 2095 ExpectedSchemeUser: true, 2096 }, 2097 { 2098 Name: "team user explicit", 2099 ExplicitRoles: "team_user", 2100 ExpectedRoles: "team_user", 2101 ExpectedSchemeUser: true, 2102 }, 2103 { 2104 Name: "team guest implicit", 2105 SchemeGuest: true, 2106 ExpectedRoles: "team_guest", 2107 ExpectedSchemeGuest: true, 2108 }, 2109 { 2110 Name: "team guest explicit", 2111 ExplicitRoles: "team_guest", 2112 ExpectedRoles: "team_guest", 2113 ExpectedSchemeGuest: true, 2114 }, 2115 { 2116 Name: "team admin implicit", 2117 SchemeUser: true, 2118 SchemeAdmin: true, 2119 ExpectedRoles: "team_user team_admin", 2120 ExpectedSchemeUser: true, 2121 ExpectedSchemeAdmin: true, 2122 }, 2123 { 2124 Name: "team admin explicit", 2125 ExplicitRoles: "team_user team_admin", 2126 ExpectedRoles: "team_user team_admin", 2127 ExpectedSchemeUser: true, 2128 ExpectedSchemeAdmin: true, 2129 }, 2130 { 2131 Name: "team user implicit and explicit custom role", 2132 SchemeUser: true, 2133 ExplicitRoles: "test", 2134 ExpectedRoles: "test team_user", 2135 ExpectedExplicitRoles: "test", 2136 ExpectedSchemeUser: true, 2137 }, 2138 { 2139 Name: "team user explicit and explicit custom role", 2140 ExplicitRoles: "team_user test", 2141 ExpectedRoles: "test team_user", 2142 ExpectedExplicitRoles: "test", 2143 ExpectedSchemeUser: true, 2144 }, 2145 { 2146 Name: "team guest implicit and explicit custom role", 2147 SchemeGuest: true, 2148 ExplicitRoles: "test", 2149 ExpectedRoles: "test team_guest", 2150 ExpectedExplicitRoles: "test", 2151 ExpectedSchemeGuest: true, 2152 }, 2153 { 2154 Name: "team guest explicit and explicit custom role", 2155 ExplicitRoles: "team_guest test", 2156 ExpectedRoles: "test team_guest", 2157 ExpectedExplicitRoles: "test", 2158 ExpectedSchemeGuest: true, 2159 }, 2160 { 2161 Name: "team admin implicit and explicit custom role", 2162 SchemeUser: true, 2163 SchemeAdmin: true, 2164 ExplicitRoles: "test", 2165 ExpectedRoles: "test team_user team_admin", 2166 ExpectedExplicitRoles: "test", 2167 ExpectedSchemeUser: true, 2168 ExpectedSchemeAdmin: true, 2169 }, 2170 { 2171 Name: "team admin explicit and explicit custom role", 2172 ExplicitRoles: "team_user team_admin test", 2173 ExpectedRoles: "test team_user team_admin", 2174 ExpectedExplicitRoles: "test", 2175 ExpectedSchemeUser: true, 2176 ExpectedSchemeAdmin: true, 2177 }, 2178 { 2179 Name: "team member with only explicit custom roles", 2180 ExplicitRoles: "test test2", 2181 ExpectedRoles: "test test2", 2182 ExpectedExplicitRoles: "test test2", 2183 }, 2184 } 2185 2186 for _, tc := range testCases { 2187 t.Run(tc.Name, func(t *testing.T) { 2188 member.SchemeGuest = tc.SchemeGuest 2189 member.SchemeUser = tc.SchemeUser 2190 member.SchemeAdmin = tc.SchemeAdmin 2191 member.ExplicitRoles = tc.ExplicitRoles 2192 2193 member, nErr = ss.Team().UpdateMember(member) 2194 require.NoError(t, nErr) 2195 2196 assert.Equal(t, tc.ExpectedRoles, member.Roles) 2197 assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) 2198 assert.Equal(t, tc.ExpectedSchemeGuest, member.SchemeGuest) 2199 assert.Equal(t, tc.ExpectedSchemeUser, member.SchemeUser) 2200 assert.Equal(t, tc.ExpectedSchemeAdmin, member.SchemeAdmin) 2201 }) 2202 } 2203 }) 2204 2205 t.Run("insert member correctly (in team with scheme)", func(t *testing.T) { 2206 ts := &model.Scheme{ 2207 Name: NewTestId(), 2208 DisplayName: NewTestId(), 2209 Description: NewTestId(), 2210 Scope: model.SCHEME_SCOPE_TEAM, 2211 } 2212 ts, nErr := ss.Scheme().Save(ts) 2213 require.NoError(t, nErr) 2214 2215 team := &model.Team{ 2216 DisplayName: "Name", 2217 Name: NewTestId(), 2218 Email: MakeEmail(), 2219 Type: model.TEAM_OPEN, 2220 SchemeId: &ts.Id, 2221 } 2222 2223 team, nErr = ss.Team().Save(team) 2224 require.NoError(t, nErr) 2225 2226 member := &model.TeamMember{TeamId: team.Id, UserId: u1.Id} 2227 member, nErr = ss.Team().SaveMember(member, -1) 2228 require.NoError(t, nErr) 2229 2230 testCases := []struct { 2231 Name string 2232 SchemeGuest bool 2233 SchemeUser bool 2234 SchemeAdmin bool 2235 ExplicitRoles string 2236 ExpectedRoles string 2237 ExpectedExplicitRoles string 2238 ExpectedSchemeGuest bool 2239 ExpectedSchemeUser bool 2240 ExpectedSchemeAdmin bool 2241 }{ 2242 { 2243 Name: "team user implicit", 2244 SchemeUser: true, 2245 ExpectedRoles: ts.DefaultTeamUserRole, 2246 ExpectedSchemeUser: true, 2247 }, 2248 { 2249 Name: "team user explicit", 2250 ExplicitRoles: "team_user", 2251 ExpectedRoles: ts.DefaultTeamUserRole, 2252 ExpectedSchemeUser: true, 2253 }, 2254 { 2255 Name: "team guest implicit", 2256 SchemeGuest: true, 2257 ExpectedRoles: ts.DefaultTeamGuestRole, 2258 ExpectedSchemeGuest: true, 2259 }, 2260 { 2261 Name: "team guest explicit", 2262 ExplicitRoles: "team_guest", 2263 ExpectedRoles: ts.DefaultTeamGuestRole, 2264 ExpectedSchemeGuest: true, 2265 }, 2266 { 2267 Name: "team admin implicit", 2268 SchemeUser: true, 2269 SchemeAdmin: true, 2270 ExpectedRoles: ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 2271 ExpectedSchemeUser: true, 2272 ExpectedSchemeAdmin: true, 2273 }, 2274 { 2275 Name: "team admin explicit", 2276 ExplicitRoles: "team_user team_admin", 2277 ExpectedRoles: ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 2278 ExpectedSchemeUser: true, 2279 ExpectedSchemeAdmin: true, 2280 }, 2281 { 2282 Name: "team user implicit and explicit custom role", 2283 SchemeUser: true, 2284 ExplicitRoles: "test", 2285 ExpectedRoles: "test " + ts.DefaultTeamUserRole, 2286 ExpectedExplicitRoles: "test", 2287 ExpectedSchemeUser: true, 2288 }, 2289 { 2290 Name: "team user explicit and explicit custom role", 2291 ExplicitRoles: "team_user test", 2292 ExpectedRoles: "test " + ts.DefaultTeamUserRole, 2293 ExpectedExplicitRoles: "test", 2294 ExpectedSchemeUser: true, 2295 }, 2296 { 2297 Name: "team guest implicit and explicit custom role", 2298 SchemeGuest: true, 2299 ExplicitRoles: "test", 2300 ExpectedRoles: "test " + ts.DefaultTeamGuestRole, 2301 ExpectedExplicitRoles: "test", 2302 ExpectedSchemeGuest: true, 2303 }, 2304 { 2305 Name: "team guest explicit and explicit custom role", 2306 ExplicitRoles: "team_guest test", 2307 ExpectedRoles: "test " + ts.DefaultTeamGuestRole, 2308 ExpectedExplicitRoles: "test", 2309 ExpectedSchemeGuest: true, 2310 }, 2311 { 2312 Name: "team admin implicit and explicit custom role", 2313 SchemeUser: true, 2314 SchemeAdmin: true, 2315 ExplicitRoles: "test", 2316 ExpectedRoles: "test " + ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 2317 ExpectedExplicitRoles: "test", 2318 ExpectedSchemeUser: true, 2319 ExpectedSchemeAdmin: true, 2320 }, 2321 { 2322 Name: "team admin explicit and explicit custom role", 2323 ExplicitRoles: "team_user team_admin test", 2324 ExpectedRoles: "test " + ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 2325 ExpectedExplicitRoles: "test", 2326 ExpectedSchemeUser: true, 2327 ExpectedSchemeAdmin: true, 2328 }, 2329 { 2330 Name: "team member with only explicit custom roles", 2331 ExplicitRoles: "test test2", 2332 ExpectedRoles: "test test2", 2333 ExpectedExplicitRoles: "test test2", 2334 }, 2335 } 2336 2337 for _, tc := range testCases { 2338 t.Run(tc.Name, func(t *testing.T) { 2339 member.SchemeGuest = tc.SchemeGuest 2340 member.SchemeUser = tc.SchemeUser 2341 member.SchemeAdmin = tc.SchemeAdmin 2342 member.ExplicitRoles = tc.ExplicitRoles 2343 2344 member, nErr = ss.Team().UpdateMember(member) 2345 require.NoError(t, nErr) 2346 2347 assert.Equal(t, tc.ExpectedRoles, member.Roles) 2348 assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) 2349 assert.Equal(t, tc.ExpectedSchemeGuest, member.SchemeGuest) 2350 assert.Equal(t, tc.ExpectedSchemeUser, member.SchemeUser) 2351 assert.Equal(t, tc.ExpectedSchemeAdmin, member.SchemeAdmin) 2352 }) 2353 } 2354 }) 2355 } 2356 2357 func testTeamUpdateMultipleMembers(t *testing.T, ss store.Store) { 2358 u1, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 2359 require.NoError(t, err) 2360 u2, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 2361 require.NoError(t, err) 2362 2363 t.Run("any not valid team member", func(t *testing.T) { 2364 m1 := &model.TeamMember{TeamId: "wrong", UserId: u1.Id} 2365 m2 := &model.TeamMember{TeamId: model.NewId(), UserId: u2.Id} 2366 _, nErr := ss.Team().UpdateMultipleMembers([]*model.TeamMember{m1, m2}) 2367 require.Error(t, nErr) 2368 var appErr *model.AppError 2369 require.True(t, errors.As(nErr, &appErr)) 2370 require.Equal(t, "model.team_member.is_valid.team_id.app_error", appErr.Id) 2371 }) 2372 2373 t.Run("update members correctly (in team without scheme)", func(t *testing.T) { 2374 team := &model.Team{ 2375 DisplayName: "Name", 2376 Name: NewTestId(), 2377 Email: MakeEmail(), 2378 Type: model.TEAM_OPEN, 2379 } 2380 2381 team, nErr := ss.Team().Save(team) 2382 require.NoError(t, nErr) 2383 2384 member := &model.TeamMember{TeamId: team.Id, UserId: u1.Id} 2385 otherMember := &model.TeamMember{TeamId: team.Id, UserId: u2.Id} 2386 var members []*model.TeamMember 2387 members, nErr = ss.Team().SaveMultipleMembers([]*model.TeamMember{member, otherMember}, -1) 2388 require.NoError(t, nErr) 2389 require.Len(t, members, 2) 2390 member = members[0] 2391 otherMember = members[1] 2392 2393 testCases := []struct { 2394 Name string 2395 SchemeGuest bool 2396 SchemeUser bool 2397 SchemeAdmin bool 2398 ExplicitRoles string 2399 ExpectedRoles string 2400 ExpectedExplicitRoles string 2401 ExpectedSchemeGuest bool 2402 ExpectedSchemeUser bool 2403 ExpectedSchemeAdmin bool 2404 }{ 2405 { 2406 Name: "team user implicit", 2407 SchemeUser: true, 2408 ExpectedRoles: "team_user", 2409 ExpectedSchemeUser: true, 2410 }, 2411 { 2412 Name: "team user explicit", 2413 ExplicitRoles: "team_user", 2414 ExpectedRoles: "team_user", 2415 ExpectedSchemeUser: true, 2416 }, 2417 { 2418 Name: "team guest implicit", 2419 SchemeGuest: true, 2420 ExpectedRoles: "team_guest", 2421 ExpectedSchemeGuest: true, 2422 }, 2423 { 2424 Name: "team guest explicit", 2425 ExplicitRoles: "team_guest", 2426 ExpectedRoles: "team_guest", 2427 ExpectedSchemeGuest: true, 2428 }, 2429 { 2430 Name: "team admin implicit", 2431 SchemeUser: true, 2432 SchemeAdmin: true, 2433 ExpectedRoles: "team_user team_admin", 2434 ExpectedSchemeUser: true, 2435 ExpectedSchemeAdmin: true, 2436 }, 2437 { 2438 Name: "team admin explicit", 2439 ExplicitRoles: "team_user team_admin", 2440 ExpectedRoles: "team_user team_admin", 2441 ExpectedSchemeUser: true, 2442 ExpectedSchemeAdmin: true, 2443 }, 2444 { 2445 Name: "team user implicit and explicit custom role", 2446 SchemeUser: true, 2447 ExplicitRoles: "test", 2448 ExpectedRoles: "test team_user", 2449 ExpectedExplicitRoles: "test", 2450 ExpectedSchemeUser: true, 2451 }, 2452 { 2453 Name: "team user explicit and explicit custom role", 2454 ExplicitRoles: "team_user test", 2455 ExpectedRoles: "test team_user", 2456 ExpectedExplicitRoles: "test", 2457 ExpectedSchemeUser: true, 2458 }, 2459 { 2460 Name: "team guest implicit and explicit custom role", 2461 SchemeGuest: true, 2462 ExplicitRoles: "test", 2463 ExpectedRoles: "test team_guest", 2464 ExpectedExplicitRoles: "test", 2465 ExpectedSchemeGuest: true, 2466 }, 2467 { 2468 Name: "team guest explicit and explicit custom role", 2469 ExplicitRoles: "team_guest test", 2470 ExpectedRoles: "test team_guest", 2471 ExpectedExplicitRoles: "test", 2472 ExpectedSchemeGuest: true, 2473 }, 2474 { 2475 Name: "team admin implicit and explicit custom role", 2476 SchemeUser: true, 2477 SchemeAdmin: true, 2478 ExplicitRoles: "test", 2479 ExpectedRoles: "test team_user team_admin", 2480 ExpectedExplicitRoles: "test", 2481 ExpectedSchemeUser: true, 2482 ExpectedSchemeAdmin: true, 2483 }, 2484 { 2485 Name: "team admin explicit and explicit custom role", 2486 ExplicitRoles: "team_user team_admin test", 2487 ExpectedRoles: "test team_user team_admin", 2488 ExpectedExplicitRoles: "test", 2489 ExpectedSchemeUser: true, 2490 ExpectedSchemeAdmin: true, 2491 }, 2492 { 2493 Name: "team member with only explicit custom roles", 2494 ExplicitRoles: "test test2", 2495 ExpectedRoles: "test test2", 2496 ExpectedExplicitRoles: "test test2", 2497 }, 2498 } 2499 2500 for _, tc := range testCases { 2501 t.Run(tc.Name, func(t *testing.T) { 2502 member.SchemeGuest = tc.SchemeGuest 2503 member.SchemeUser = tc.SchemeUser 2504 member.SchemeAdmin = tc.SchemeAdmin 2505 member.ExplicitRoles = tc.ExplicitRoles 2506 2507 var members []*model.TeamMember 2508 members, nErr = ss.Team().UpdateMultipleMembers([]*model.TeamMember{member, otherMember}) 2509 require.NoError(t, nErr) 2510 require.Len(t, members, 2) 2511 member = members[0] 2512 2513 assert.Equal(t, tc.ExpectedRoles, member.Roles) 2514 assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) 2515 assert.Equal(t, tc.ExpectedSchemeGuest, member.SchemeGuest) 2516 assert.Equal(t, tc.ExpectedSchemeUser, member.SchemeUser) 2517 assert.Equal(t, tc.ExpectedSchemeAdmin, member.SchemeAdmin) 2518 }) 2519 } 2520 }) 2521 2522 t.Run("insert members correctly (in team with scheme)", func(t *testing.T) { 2523 ts := &model.Scheme{ 2524 Name: NewTestId(), 2525 DisplayName: NewTestId(), 2526 Description: NewTestId(), 2527 Scope: model.SCHEME_SCOPE_TEAM, 2528 } 2529 ts, nErr := ss.Scheme().Save(ts) 2530 require.NoError(t, nErr) 2531 2532 team := &model.Team{ 2533 DisplayName: "Name", 2534 Name: NewTestId(), 2535 Email: MakeEmail(), 2536 Type: model.TEAM_OPEN, 2537 SchemeId: &ts.Id, 2538 } 2539 2540 team, nErr = ss.Team().Save(team) 2541 require.NoError(t, nErr) 2542 2543 member := &model.TeamMember{TeamId: team.Id, UserId: u1.Id} 2544 otherMember := &model.TeamMember{TeamId: team.Id, UserId: u2.Id} 2545 members, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{member, otherMember}, -1) 2546 require.NoError(t, nErr) 2547 require.Len(t, members, 2) 2548 member = members[0] 2549 otherMember = members[1] 2550 2551 testCases := []struct { 2552 Name string 2553 SchemeGuest bool 2554 SchemeUser bool 2555 SchemeAdmin bool 2556 ExplicitRoles string 2557 ExpectedRoles string 2558 ExpectedExplicitRoles string 2559 ExpectedSchemeGuest bool 2560 ExpectedSchemeUser bool 2561 ExpectedSchemeAdmin bool 2562 }{ 2563 { 2564 Name: "team user implicit", 2565 SchemeUser: true, 2566 ExpectedRoles: ts.DefaultTeamUserRole, 2567 ExpectedSchemeUser: true, 2568 }, 2569 { 2570 Name: "team user explicit", 2571 ExplicitRoles: "team_user", 2572 ExpectedRoles: ts.DefaultTeamUserRole, 2573 ExpectedSchemeUser: true, 2574 }, 2575 { 2576 Name: "team guest implicit", 2577 SchemeGuest: true, 2578 ExpectedRoles: ts.DefaultTeamGuestRole, 2579 ExpectedSchemeGuest: true, 2580 }, 2581 { 2582 Name: "team guest explicit", 2583 ExplicitRoles: "team_guest", 2584 ExpectedRoles: ts.DefaultTeamGuestRole, 2585 ExpectedSchemeGuest: true, 2586 }, 2587 { 2588 Name: "team admin implicit", 2589 SchemeUser: true, 2590 SchemeAdmin: true, 2591 ExpectedRoles: ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 2592 ExpectedSchemeUser: true, 2593 ExpectedSchemeAdmin: true, 2594 }, 2595 { 2596 Name: "team admin explicit", 2597 ExplicitRoles: "team_user team_admin", 2598 ExpectedRoles: ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 2599 ExpectedSchemeUser: true, 2600 ExpectedSchemeAdmin: true, 2601 }, 2602 { 2603 Name: "team user implicit and explicit custom role", 2604 SchemeUser: true, 2605 ExplicitRoles: "test", 2606 ExpectedRoles: "test " + ts.DefaultTeamUserRole, 2607 ExpectedExplicitRoles: "test", 2608 ExpectedSchemeUser: true, 2609 }, 2610 { 2611 Name: "team user explicit and explicit custom role", 2612 ExplicitRoles: "team_user test", 2613 ExpectedRoles: "test " + ts.DefaultTeamUserRole, 2614 ExpectedExplicitRoles: "test", 2615 ExpectedSchemeUser: true, 2616 }, 2617 { 2618 Name: "team guest implicit and explicit custom role", 2619 SchemeGuest: true, 2620 ExplicitRoles: "test", 2621 ExpectedRoles: "test " + ts.DefaultTeamGuestRole, 2622 ExpectedExplicitRoles: "test", 2623 ExpectedSchemeGuest: true, 2624 }, 2625 { 2626 Name: "team guest explicit and explicit custom role", 2627 ExplicitRoles: "team_guest test", 2628 ExpectedRoles: "test " + ts.DefaultTeamGuestRole, 2629 ExpectedExplicitRoles: "test", 2630 ExpectedSchemeGuest: true, 2631 }, 2632 { 2633 Name: "team admin implicit and explicit custom role", 2634 SchemeUser: true, 2635 SchemeAdmin: true, 2636 ExplicitRoles: "test", 2637 ExpectedRoles: "test " + ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 2638 ExpectedExplicitRoles: "test", 2639 ExpectedSchemeUser: true, 2640 ExpectedSchemeAdmin: true, 2641 }, 2642 { 2643 Name: "team admin explicit and explicit custom role", 2644 ExplicitRoles: "team_user team_admin test", 2645 ExpectedRoles: "test " + ts.DefaultTeamUserRole + " " + ts.DefaultTeamAdminRole, 2646 ExpectedExplicitRoles: "test", 2647 ExpectedSchemeUser: true, 2648 ExpectedSchemeAdmin: true, 2649 }, 2650 { 2651 Name: "team member with only explicit custom roles", 2652 ExplicitRoles: "test test2", 2653 ExpectedRoles: "test test2", 2654 ExpectedExplicitRoles: "test test2", 2655 }, 2656 } 2657 2658 for _, tc := range testCases { 2659 t.Run(tc.Name, func(t *testing.T) { 2660 member.SchemeGuest = tc.SchemeGuest 2661 member.SchemeUser = tc.SchemeUser 2662 member.SchemeAdmin = tc.SchemeAdmin 2663 member.ExplicitRoles = tc.ExplicitRoles 2664 2665 members, err := ss.Team().UpdateMultipleMembers([]*model.TeamMember{member, otherMember}) 2666 require.NoError(t, err) 2667 require.Len(t, members, 2) 2668 member = members[0] 2669 2670 assert.Equal(t, tc.ExpectedRoles, member.Roles) 2671 assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) 2672 assert.Equal(t, tc.ExpectedSchemeGuest, member.SchemeGuest) 2673 assert.Equal(t, tc.ExpectedSchemeUser, member.SchemeUser) 2674 assert.Equal(t, tc.ExpectedSchemeAdmin, member.SchemeAdmin) 2675 }) 2676 } 2677 }) 2678 } 2679 2680 func testTeamRemoveMember(t *testing.T, ss store.Store) { 2681 u1, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 2682 require.NoError(t, err) 2683 u2, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 2684 require.NoError(t, err) 2685 u3, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 2686 require.NoError(t, err) 2687 u4, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 2688 require.NoError(t, err) 2689 teamID := model.NewId() 2690 m1 := &model.TeamMember{TeamId: teamID, UserId: u1.Id} 2691 m2 := &model.TeamMember{TeamId: teamID, UserId: u2.Id} 2692 m3 := &model.TeamMember{TeamId: teamID, UserId: u3.Id} 2693 m4 := &model.TeamMember{TeamId: teamID, UserId: u4.Id} 2694 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2, m3, m4}, -1) 2695 require.NoError(t, nErr) 2696 2697 t.Run("remove member from not existing team", func(t *testing.T) { 2698 nErr = ss.Team().RemoveMember("not-existing-team", u1.Id) 2699 require.NoError(t, nErr) 2700 var membersOtherTeam []*model.TeamMember 2701 membersOtherTeam, nErr = ss.Team().GetMembers(teamID, 0, 100, nil) 2702 require.NoError(t, nErr) 2703 require.Len(t, membersOtherTeam, 4) 2704 }) 2705 2706 t.Run("remove not existing member from an existing team", func(t *testing.T) { 2707 nErr = ss.Team().RemoveMember(teamID, model.NewId()) 2708 require.NoError(t, nErr) 2709 var membersOtherTeam []*model.TeamMember 2710 membersOtherTeam, nErr = ss.Team().GetMembers(teamID, 0, 100, nil) 2711 require.NoError(t, nErr) 2712 require.Len(t, membersOtherTeam, 4) 2713 }) 2714 2715 t.Run("remove existing member from an existing team", func(t *testing.T) { 2716 nErr = ss.Team().RemoveMember(teamID, u1.Id) 2717 require.NoError(t, nErr) 2718 defer ss.Team().SaveMember(m1, -1) 2719 var membersOtherTeam []*model.TeamMember 2720 membersOtherTeam, nErr = ss.Team().GetMembers(teamID, 0, 100, nil) 2721 require.NoError(t, nErr) 2722 require.Len(t, membersOtherTeam, 3) 2723 }) 2724 } 2725 2726 func testTeamRemoveMembers(t *testing.T, ss store.Store) { 2727 u1, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 2728 require.NoError(t, err) 2729 u2, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 2730 require.NoError(t, err) 2731 u3, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 2732 require.NoError(t, err) 2733 u4, err := ss.User().Save(&model.User{Username: model.NewId(), Email: MakeEmail()}) 2734 require.NoError(t, err) 2735 teamID := model.NewId() 2736 m1 := &model.TeamMember{TeamId: teamID, UserId: u1.Id} 2737 m2 := &model.TeamMember{TeamId: teamID, UserId: u2.Id} 2738 m3 := &model.TeamMember{TeamId: teamID, UserId: u3.Id} 2739 m4 := &model.TeamMember{TeamId: teamID, UserId: u4.Id} 2740 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2, m3, m4}, -1) 2741 require.NoError(t, nErr) 2742 2743 t.Run("remove members from not existing team", func(t *testing.T) { 2744 nErr = ss.Team().RemoveMembers("not-existing-team", []string{u1.Id, u2.Id, u3.Id, u4.Id}) 2745 require.NoError(t, nErr) 2746 var membersOtherTeam []*model.TeamMember 2747 membersOtherTeam, nErr = ss.Team().GetMembers(teamID, 0, 100, nil) 2748 require.NoError(t, nErr) 2749 require.Len(t, membersOtherTeam, 4) 2750 }) 2751 2752 t.Run("remove not existing members from an existing team", func(t *testing.T) { 2753 nErr = ss.Team().RemoveMembers(teamID, []string{model.NewId(), model.NewId()}) 2754 require.NoError(t, nErr) 2755 var membersOtherTeam []*model.TeamMember 2756 membersOtherTeam, nErr = ss.Team().GetMembers(teamID, 0, 100, nil) 2757 require.NoError(t, nErr) 2758 require.Len(t, membersOtherTeam, 4) 2759 }) 2760 2761 t.Run("remove not existing and not existing members from an existing team", func(t *testing.T) { 2762 nErr = ss.Team().RemoveMembers(teamID, []string{u1.Id, u2.Id, model.NewId(), model.NewId()}) 2763 require.NoError(t, nErr) 2764 defer ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2}, -1) 2765 var membersOtherTeam []*model.TeamMember 2766 membersOtherTeam, nErr = ss.Team().GetMembers(teamID, 0, 100, nil) 2767 require.NoError(t, nErr) 2768 require.Len(t, membersOtherTeam, 2) 2769 }) 2770 t.Run("remove existing members from an existing team", func(t *testing.T) { 2771 nErr = ss.Team().RemoveMembers(teamID, []string{u1.Id, u2.Id, u3.Id}) 2772 require.NoError(t, nErr) 2773 defer ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2, m3}, -1) 2774 var membersOtherTeam []*model.TeamMember 2775 membersOtherTeam, nErr = ss.Team().GetMembers(teamID, 0, 100, nil) 2776 require.NoError(t, nErr) 2777 require.Len(t, membersOtherTeam, 1) 2778 }) 2779 } 2780 2781 func testTeamMembersWithPagination(t *testing.T, ss store.Store) { 2782 teamId1 := model.NewId() 2783 teamId2 := model.NewId() 2784 2785 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 2786 m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 2787 m3 := &model.TeamMember{TeamId: teamId2, UserId: model.NewId()} 2788 2789 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2, m3}, -1) 2790 require.NoError(t, nErr) 2791 2792 ms, errTeam := ss.Team().GetTeamsForUserWithPagination(m1.UserId, 0, 1) 2793 require.NoError(t, errTeam) 2794 2795 require.Len(t, ms, 1) 2796 require.Equal(t, m1.TeamId, ms[0].TeamId) 2797 2798 e := ss.Team().RemoveMember(teamId1, m1.UserId) 2799 require.NoError(t, e) 2800 2801 ms, err := ss.Team().GetMembers(teamId1, 0, 100, nil) 2802 require.NoError(t, err) 2803 2804 require.Len(t, ms, 1) 2805 require.Equal(t, m2.UserId, ms[0].UserId) 2806 2807 _, nErr = ss.Team().SaveMember(m1, -1) 2808 require.NoError(t, nErr) 2809 2810 err = ss.Team().RemoveAllMembersByTeam(teamId1) 2811 require.NoError(t, err) 2812 2813 uid := model.NewId() 2814 m4 := &model.TeamMember{TeamId: teamId1, UserId: uid} 2815 m5 := &model.TeamMember{TeamId: teamId2, UserId: uid} 2816 _, nErr = ss.Team().SaveMultipleMembers([]*model.TeamMember{m4, m5}, -1) 2817 require.NoError(t, nErr) 2818 2819 result, err := ss.Team().GetTeamsForUserWithPagination(uid, 0, 1) 2820 require.NoError(t, err) 2821 require.Len(t, result, 1) 2822 2823 nErr = ss.Team().RemoveAllMembersByUser(uid) 2824 require.NoError(t, nErr) 2825 2826 result, err = ss.Team().GetTeamsForUserWithPagination(uid, 1, 1) 2827 require.NoError(t, err) 2828 require.Empty(t, result) 2829 } 2830 2831 func testSaveTeamMemberMaxMembers(t *testing.T, ss store.Store) { 2832 maxUsersPerTeam := 5 2833 2834 team, errSave := ss.Team().Save(&model.Team{ 2835 DisplayName: "DisplayName", 2836 Name: NewTestId(), 2837 Type: model.TEAM_OPEN, 2838 }) 2839 require.NoError(t, errSave) 2840 defer func() { 2841 ss.Team().PermanentDelete(team.Id) 2842 }() 2843 2844 userIds := make([]string, maxUsersPerTeam) 2845 2846 for i := 0; i < maxUsersPerTeam; i++ { 2847 user, err := ss.User().Save(&model.User{ 2848 Username: NewTestId(), 2849 Email: MakeEmail(), 2850 }) 2851 require.NoError(t, err) 2852 userIds[i] = user.Id 2853 2854 defer func(userId string) { 2855 ss.User().PermanentDelete(userId) 2856 }(userIds[i]) 2857 2858 _, nErr := ss.Team().SaveMember(&model.TeamMember{ 2859 TeamId: team.Id, 2860 UserId: userIds[i], 2861 }, maxUsersPerTeam) 2862 require.NoError(t, nErr) 2863 2864 defer func(userId string) { 2865 ss.Team().RemoveMember(team.Id, userId) 2866 }(userIds[i]) 2867 } 2868 2869 totalMemberCount, err := ss.Team().GetTotalMemberCount(team.Id, nil) 2870 require.NoError(t, err) 2871 require.Equal(t, int(totalMemberCount), maxUsersPerTeam, "should start with 5 team members, had %v instead", totalMemberCount) 2872 2873 user, nErr := ss.User().Save(&model.User{ 2874 Username: NewTestId(), 2875 Email: MakeEmail(), 2876 }) 2877 require.NoError(t, nErr) 2878 newUserId := user.Id 2879 defer func() { 2880 ss.User().PermanentDelete(newUserId) 2881 }() 2882 2883 _, nErr = ss.Team().SaveMember(&model.TeamMember{ 2884 TeamId: team.Id, 2885 UserId: newUserId, 2886 }, maxUsersPerTeam) 2887 require.Error(t, nErr, "shouldn't be able to save member when at maximum members per team") 2888 2889 totalMemberCount, teamErr := ss.Team().GetTotalMemberCount(team.Id, nil) 2890 require.NoError(t, teamErr) 2891 require.Equal(t, maxUsersPerTeam, int(totalMemberCount), "should still have 5 team members, had %v instead", totalMemberCount) 2892 2893 // Leaving the team from the UI sets DeleteAt instead of using TeamStore.RemoveMember 2894 _, teamErr = ss.Team().UpdateMember(&model.TeamMember{ 2895 TeamId: team.Id, 2896 UserId: userIds[0], 2897 DeleteAt: 1234, 2898 }) 2899 require.NoError(t, teamErr) 2900 2901 totalMemberCount, teamErr = ss.Team().GetTotalMemberCount(team.Id, nil) 2902 require.NoError(t, teamErr) 2903 require.Equal(t, maxUsersPerTeam-1, int(totalMemberCount), "should now only have 4 team members, had %v instead", totalMemberCount) 2904 2905 _, nErr = ss.Team().SaveMember(&model.TeamMember{TeamId: team.Id, UserId: newUserId}, maxUsersPerTeam) 2906 require.NoError(t, nErr, "should've been able to save new member after deleting one") 2907 2908 defer ss.Team().RemoveMember(team.Id, newUserId) 2909 2910 totalMemberCount, teamErr = ss.Team().GetTotalMemberCount(team.Id, nil) 2911 require.NoError(t, teamErr) 2912 require.Equal(t, maxUsersPerTeam, int(totalMemberCount), "should have 5 team members again, had %v instead", totalMemberCount) 2913 2914 // Deactivating a user should make them stop counting against max members 2915 user2, nErr := ss.User().Get(context.Background(), userIds[1]) 2916 require.NoError(t, nErr) 2917 user2.DeleteAt = 1234 2918 _, nErr = ss.User().Update(user2, true) 2919 require.NoError(t, nErr) 2920 2921 user, nErr = ss.User().Save(&model.User{ 2922 Username: NewTestId(), 2923 Email: MakeEmail(), 2924 }) 2925 require.NoError(t, nErr) 2926 newUserId2 := user.Id 2927 _, nErr = ss.Team().SaveMember(&model.TeamMember{TeamId: team.Id, UserId: newUserId2}, maxUsersPerTeam) 2928 require.NoError(t, nErr, "should've been able to save new member after deleting one") 2929 2930 defer ss.Team().RemoveMember(team.Id, newUserId2) 2931 } 2932 2933 func testGetTeamMember(t *testing.T, ss store.Store) { 2934 teamId1 := model.NewId() 2935 2936 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 2937 _, nErr := ss.Team().SaveMember(m1, -1) 2938 require.NoError(t, nErr) 2939 2940 var rm1 *model.TeamMember 2941 rm1, err := ss.Team().GetMember(context.Background(), m1.TeamId, m1.UserId) 2942 require.NoError(t, err) 2943 2944 require.Equal(t, rm1.TeamId, m1.TeamId, "bad team id") 2945 2946 require.Equal(t, rm1.UserId, m1.UserId, "bad user id") 2947 2948 _, err = ss.Team().GetMember(context.Background(), m1.TeamId, "") 2949 require.Error(t, err, "empty user id - should have failed") 2950 2951 _, err = ss.Team().GetMember(context.Background(), "", m1.UserId) 2952 require.Error(t, err, "empty team id - should have failed") 2953 2954 // Test with a custom team scheme. 2955 s2 := &model.Scheme{ 2956 Name: NewTestId(), 2957 DisplayName: NewTestId(), 2958 Description: NewTestId(), 2959 Scope: model.SCHEME_SCOPE_TEAM, 2960 } 2961 s2, nErr = ss.Scheme().Save(s2) 2962 require.NoError(t, nErr) 2963 t.Log(s2) 2964 2965 t2, nErr := ss.Team().Save(&model.Team{ 2966 DisplayName: "DisplayName", 2967 Name: NewTestId(), 2968 Type: model.TEAM_OPEN, 2969 SchemeId: &s2.Id, 2970 }) 2971 require.NoError(t, nErr) 2972 2973 defer func() { 2974 ss.Team().PermanentDelete(t2.Id) 2975 }() 2976 2977 m2 := &model.TeamMember{TeamId: t2.Id, UserId: model.NewId(), SchemeUser: true} 2978 _, nErr = ss.Team().SaveMember(m2, -1) 2979 require.NoError(t, nErr) 2980 2981 m3, err := ss.Team().GetMember(context.Background(), m2.TeamId, m2.UserId) 2982 require.NoError(t, err) 2983 t.Log(m3) 2984 2985 assert.Equal(t, s2.DefaultTeamUserRole, m3.Roles) 2986 2987 m4 := &model.TeamMember{TeamId: t2.Id, UserId: model.NewId(), SchemeGuest: true} 2988 _, nErr = ss.Team().SaveMember(m4, -1) 2989 require.NoError(t, nErr) 2990 2991 m5, err := ss.Team().GetMember(context.Background(), m4.TeamId, m4.UserId) 2992 require.NoError(t, err) 2993 2994 assert.Equal(t, s2.DefaultTeamGuestRole, m5.Roles) 2995 } 2996 2997 func testGetTeamMembersByIds(t *testing.T, ss store.Store) { 2998 teamId1 := model.NewId() 2999 3000 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 3001 _, nErr := ss.Team().SaveMember(m1, -1) 3002 require.NoError(t, nErr) 3003 3004 var r []*model.TeamMember 3005 r, err := ss.Team().GetMembersByIds(m1.TeamId, []string{m1.UserId}, nil) 3006 require.NoError(t, err) 3007 rm1 := r[0] 3008 3009 require.Equal(t, rm1.TeamId, m1.TeamId, "bad team id") 3010 require.Equal(t, rm1.UserId, m1.UserId, "bad user id") 3011 3012 m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 3013 _, nErr = ss.Team().SaveMember(m2, -1) 3014 require.NoError(t, nErr) 3015 3016 rm, err := ss.Team().GetMembersByIds(m1.TeamId, []string{m1.UserId, m2.UserId, model.NewId()}, nil) 3017 require.NoError(t, err) 3018 3019 require.Len(t, rm, 2, "return wrong number of results") 3020 3021 _, err = ss.Team().GetMembersByIds(m1.TeamId, []string{}, nil) 3022 require.Error(t, err, "empty user ids - should have failed") 3023 } 3024 3025 func testTeamStoreMemberCount(t *testing.T, ss store.Store) { 3026 u1 := &model.User{} 3027 u1.Email = MakeEmail() 3028 _, err := ss.User().Save(u1) 3029 require.NoError(t, err) 3030 3031 u2 := &model.User{} 3032 u2.Email = MakeEmail() 3033 u2.DeleteAt = 1 3034 _, err = ss.User().Save(u2) 3035 require.NoError(t, err) 3036 3037 teamId1 := model.NewId() 3038 m1 := &model.TeamMember{TeamId: teamId1, UserId: u1.Id} 3039 _, nErr := ss.Team().SaveMember(m1, -1) 3040 require.NoError(t, nErr) 3041 3042 m2 := &model.TeamMember{TeamId: teamId1, UserId: u2.Id} 3043 _, nErr = ss.Team().SaveMember(m2, -1) 3044 require.NoError(t, nErr) 3045 3046 var totalMemberCount int64 3047 totalMemberCount, nErr = ss.Team().GetTotalMemberCount(teamId1, nil) 3048 require.NoError(t, nErr) 3049 require.Equal(t, int(totalMemberCount), 2, "wrong count") 3050 3051 var result int64 3052 result, nErr = ss.Team().GetActiveMemberCount(teamId1, nil) 3053 require.NoError(t, nErr) 3054 require.Equal(t, 1, int(result), "wrong count") 3055 3056 m3 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 3057 _, nErr = ss.Team().SaveMember(m3, -1) 3058 require.NoError(t, nErr) 3059 3060 totalMemberCount, nErr = ss.Team().GetTotalMemberCount(teamId1, nil) 3061 require.NoError(t, nErr) 3062 require.Equal(t, 2, int(totalMemberCount), "wrong count") 3063 3064 result, nErr = ss.Team().GetActiveMemberCount(teamId1, nil) 3065 require.NoError(t, nErr) 3066 require.Equal(t, 1, int(result), "wrong count") 3067 } 3068 3069 func testGetChannelUnreadsForAllTeams(t *testing.T, ss store.Store) { 3070 teamId1 := model.NewId() 3071 teamId2 := model.NewId() 3072 3073 uid := model.NewId() 3074 m1 := &model.TeamMember{TeamId: teamId1, UserId: uid} 3075 m2 := &model.TeamMember{TeamId: teamId2, UserId: uid} 3076 _, nErr := ss.Team().SaveMember(m1, -1) 3077 require.NoError(t, nErr) 3078 _, nErr = ss.Team().SaveMember(m2, -1) 3079 require.NoError(t, nErr) 3080 3081 c1 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 3082 _, nErr = ss.Channel().Save(c1, -1) 3083 require.NoError(t, nErr) 3084 3085 c2 := &model.Channel{TeamId: m2.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 3086 _, nErr = ss.Channel().Save(c2, -1) 3087 require.NoError(t, nErr) 3088 3089 cm1 := &model.ChannelMember{ChannelId: c1.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 3090 _, err := ss.Channel().SaveMember(cm1) 3091 require.NoError(t, err) 3092 cm2 := &model.ChannelMember{ChannelId: c2.Id, UserId: m2.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 3093 _, err = ss.Channel().SaveMember(cm2) 3094 require.NoError(t, err) 3095 3096 ms1, nErr := ss.Team().GetChannelUnreadsForAllTeams("", uid) 3097 require.NoError(t, nErr) 3098 membersMap := make(map[string]bool) 3099 for i := range ms1 { 3100 id := ms1[i].TeamId 3101 if _, ok := membersMap[id]; !ok { 3102 membersMap[id] = true 3103 } 3104 } 3105 require.Len(t, membersMap, 2, "Should be the unreads for all the teams") 3106 3107 require.Equal(t, 10, int(ms1[0].MsgCount), "subtraction failed") 3108 3109 ms2, nErr := ss.Team().GetChannelUnreadsForAllTeams(teamId1, uid) 3110 require.NoError(t, nErr) 3111 membersMap = make(map[string]bool) 3112 for i := range ms2 { 3113 id := ms2[i].TeamId 3114 if _, ok := membersMap[id]; !ok { 3115 membersMap[id] = true 3116 } 3117 } 3118 3119 require.Len(t, membersMap, 1, "Should be the unreads for just one team") 3120 3121 require.Equal(t, 10, int(ms2[0].MsgCount), "subtraction failed") 3122 3123 nErr = ss.Team().RemoveAllMembersByUser(uid) 3124 require.NoError(t, nErr) 3125 } 3126 3127 func testGetChannelUnreadsForTeam(t *testing.T, ss store.Store) { 3128 teamId1 := model.NewId() 3129 3130 uid := model.NewId() 3131 m1 := &model.TeamMember{TeamId: teamId1, UserId: uid} 3132 _, nErr := ss.Team().SaveMember(m1, -1) 3133 require.NoError(t, nErr) 3134 3135 c1 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 3136 _, nErr = ss.Channel().Save(c1, -1) 3137 require.NoError(t, nErr) 3138 3139 c2 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 3140 _, nErr = ss.Channel().Save(c2, -1) 3141 require.NoError(t, nErr) 3142 3143 cm1 := &model.ChannelMember{ChannelId: c1.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 3144 _, nErr = ss.Channel().SaveMember(cm1) 3145 require.NoError(t, nErr) 3146 cm2 := &model.ChannelMember{ChannelId: c2.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 3147 _, nErr = ss.Channel().SaveMember(cm2) 3148 require.NoError(t, nErr) 3149 3150 ms, err := ss.Team().GetChannelUnreadsForTeam(m1.TeamId, m1.UserId) 3151 require.NoError(t, err) 3152 require.Len(t, ms, 2, "wrong length") 3153 3154 require.Equal(t, 10, int(ms[0].MsgCount), "subtraction failed") 3155 } 3156 3157 func testUpdateLastTeamIconUpdate(t *testing.T, ss store.Store) { 3158 3159 // team icon initially updated a second ago 3160 lastTeamIconUpdateInitial := model.GetMillis() - 1000 3161 3162 o1 := &model.Team{} 3163 o1.DisplayName = "Display Name" 3164 o1.Name = "z-z-z" + model.NewId() + "b" 3165 o1.Email = MakeEmail() 3166 o1.Type = model.TEAM_OPEN 3167 o1.LastTeamIconUpdate = lastTeamIconUpdateInitial 3168 o1, err := ss.Team().Save(o1) 3169 require.NoError(t, err) 3170 3171 curTime := model.GetMillis() 3172 3173 err = ss.Team().UpdateLastTeamIconUpdate(o1.Id, curTime) 3174 require.NoError(t, err) 3175 3176 ro1, err := ss.Team().Get(o1.Id) 3177 require.NoError(t, err) 3178 3179 require.Greater(t, ro1.LastTeamIconUpdate, lastTeamIconUpdateInitial, "LastTeamIconUpdate not updated") 3180 } 3181 3182 func testGetTeamsByScheme(t *testing.T, ss store.Store) { 3183 // Create some schemes. 3184 s1 := &model.Scheme{ 3185 DisplayName: NewTestId(), 3186 Name: NewTestId(), 3187 Description: NewTestId(), 3188 Scope: model.SCHEME_SCOPE_TEAM, 3189 } 3190 3191 s2 := &model.Scheme{ 3192 DisplayName: NewTestId(), 3193 Name: NewTestId(), 3194 Description: NewTestId(), 3195 Scope: model.SCHEME_SCOPE_TEAM, 3196 } 3197 3198 s1, err := ss.Scheme().Save(s1) 3199 require.NoError(t, err) 3200 s2, err = ss.Scheme().Save(s2) 3201 require.NoError(t, err) 3202 3203 // Create and save some teams. 3204 t1 := &model.Team{ 3205 Name: NewTestId(), 3206 DisplayName: NewTestId(), 3207 Email: MakeEmail(), 3208 Type: model.TEAM_OPEN, 3209 SchemeId: &s1.Id, 3210 } 3211 3212 t2 := &model.Team{ 3213 Name: NewTestId(), 3214 DisplayName: NewTestId(), 3215 Email: MakeEmail(), 3216 Type: model.TEAM_OPEN, 3217 SchemeId: &s1.Id, 3218 } 3219 3220 t3 := &model.Team{ 3221 Name: NewTestId(), 3222 DisplayName: NewTestId(), 3223 Email: MakeEmail(), 3224 Type: model.TEAM_OPEN, 3225 } 3226 3227 _, err = ss.Team().Save(t1) 3228 require.NoError(t, err) 3229 3230 _, err = ss.Team().Save(t2) 3231 require.NoError(t, err) 3232 3233 _, err = ss.Team().Save(t3) 3234 require.NoError(t, err) 3235 3236 // Get the teams by a valid Scheme ID. 3237 d, err := ss.Team().GetTeamsByScheme(s1.Id, 0, 100) 3238 assert.NoError(t, err) 3239 assert.Len(t, d, 2) 3240 3241 // Get the teams by a valid Scheme ID where there aren't any matching Teams. 3242 d, err = ss.Team().GetTeamsByScheme(s2.Id, 0, 100) 3243 assert.NoError(t, err) 3244 assert.Empty(t, d) 3245 3246 // Get the teams by an invalid Scheme ID. 3247 d, err = ss.Team().GetTeamsByScheme(model.NewId(), 0, 100) 3248 assert.NoError(t, err) 3249 assert.Empty(t, d) 3250 } 3251 3252 func testTeamStoreMigrateTeamMembers(t *testing.T, ss store.Store) { 3253 s1 := model.NewId() 3254 t1 := &model.Team{ 3255 DisplayName: "Name", 3256 Name: NewTestId(), 3257 Email: MakeEmail(), 3258 Type: model.TEAM_OPEN, 3259 InviteId: model.NewId(), 3260 SchemeId: &s1, 3261 } 3262 t1, err := ss.Team().Save(t1) 3263 require.NoError(t, err) 3264 3265 tm1 := &model.TeamMember{ 3266 TeamId: t1.Id, 3267 UserId: NewTestId(), 3268 ExplicitRoles: "team_admin team_user", 3269 } 3270 tm2 := &model.TeamMember{ 3271 TeamId: t1.Id, 3272 UserId: NewTestId(), 3273 ExplicitRoles: "team_user", 3274 } 3275 tm3 := &model.TeamMember{ 3276 TeamId: t1.Id, 3277 UserId: NewTestId(), 3278 ExplicitRoles: "something_else", 3279 } 3280 3281 memberships, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{tm1, tm2, tm3}, -1) 3282 require.NoError(t, nErr) 3283 require.Len(t, memberships, 3) 3284 tm1 = memberships[0] 3285 tm2 = memberships[1] 3286 tm3 = memberships[2] 3287 3288 lastDoneTeamId := strings.Repeat("0", 26) 3289 lastDoneUserId := strings.Repeat("0", 26) 3290 3291 for { 3292 res, e := ss.Team().MigrateTeamMembers(lastDoneTeamId, lastDoneUserId) 3293 if assert.NoError(t, e) { 3294 if res == nil { 3295 break 3296 } 3297 lastDoneTeamId = res["TeamId"] 3298 lastDoneUserId = res["UserId"] 3299 } 3300 } 3301 3302 tm1b, err := ss.Team().GetMember(context.Background(), tm1.TeamId, tm1.UserId) 3303 assert.NoError(t, err) 3304 assert.Equal(t, "", tm1b.ExplicitRoles) 3305 assert.True(t, tm1b.SchemeUser) 3306 assert.True(t, tm1b.SchemeAdmin) 3307 3308 tm2b, err := ss.Team().GetMember(context.Background(), tm2.TeamId, tm2.UserId) 3309 assert.NoError(t, err) 3310 assert.Equal(t, "", tm2b.ExplicitRoles) 3311 assert.True(t, tm2b.SchemeUser) 3312 assert.False(t, tm2b.SchemeAdmin) 3313 3314 tm3b, err := ss.Team().GetMember(context.Background(), tm3.TeamId, tm3.UserId) 3315 assert.NoError(t, err) 3316 assert.Equal(t, "something_else", tm3b.ExplicitRoles) 3317 assert.False(t, tm3b.SchemeUser) 3318 assert.False(t, tm3b.SchemeAdmin) 3319 } 3320 3321 func testResetAllTeamSchemes(t *testing.T, ss store.Store) { 3322 s1 := &model.Scheme{ 3323 Name: NewTestId(), 3324 DisplayName: NewTestId(), 3325 Description: NewTestId(), 3326 Scope: model.SCHEME_SCOPE_TEAM, 3327 } 3328 s1, err := ss.Scheme().Save(s1) 3329 require.NoError(t, err) 3330 3331 t1 := &model.Team{ 3332 Name: NewTestId(), 3333 DisplayName: NewTestId(), 3334 Email: MakeEmail(), 3335 Type: model.TEAM_OPEN, 3336 SchemeId: &s1.Id, 3337 } 3338 3339 t2 := &model.Team{ 3340 Name: NewTestId(), 3341 DisplayName: NewTestId(), 3342 Email: MakeEmail(), 3343 Type: model.TEAM_OPEN, 3344 SchemeId: &s1.Id, 3345 } 3346 3347 t1, err = ss.Team().Save(t1) 3348 require.NoError(t, err) 3349 t2, err = ss.Team().Save(t2) 3350 require.NoError(t, err) 3351 3352 assert.Equal(t, s1.Id, *t1.SchemeId) 3353 assert.Equal(t, s1.Id, *t2.SchemeId) 3354 3355 res := ss.Team().ResetAllTeamSchemes() 3356 assert.NoError(t, res) 3357 3358 t1, err = ss.Team().Get(t1.Id) 3359 require.NoError(t, err) 3360 3361 t2, err = ss.Team().Get(t2.Id) 3362 require.NoError(t, err) 3363 3364 assert.Equal(t, "", *t1.SchemeId) 3365 assert.Equal(t, "", *t2.SchemeId) 3366 } 3367 3368 func testTeamStoreClearAllCustomRoleAssignments(t *testing.T, ss store.Store) { 3369 m1 := &model.TeamMember{ 3370 TeamId: model.NewId(), 3371 UserId: model.NewId(), 3372 ExplicitRoles: "team_post_all_public team_user team_admin", 3373 } 3374 m2 := &model.TeamMember{ 3375 TeamId: model.NewId(), 3376 UserId: model.NewId(), 3377 ExplicitRoles: "team_user custom_role team_admin another_custom_role", 3378 } 3379 m3 := &model.TeamMember{ 3380 TeamId: model.NewId(), 3381 UserId: model.NewId(), 3382 ExplicitRoles: "team_user", 3383 } 3384 m4 := &model.TeamMember{ 3385 TeamId: model.NewId(), 3386 UserId: model.NewId(), 3387 ExplicitRoles: "custom_only", 3388 } 3389 3390 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2, m3, m4}, -1) 3391 require.NoError(t, nErr) 3392 3393 require.NoError(t, (ss.Team().ClearAllCustomRoleAssignments())) 3394 3395 r1, err := ss.Team().GetMember(context.Background(), m1.TeamId, m1.UserId) 3396 require.NoError(t, err) 3397 assert.Equal(t, m1.ExplicitRoles, r1.Roles) 3398 3399 r2, err := ss.Team().GetMember(context.Background(), m2.TeamId, m2.UserId) 3400 require.NoError(t, err) 3401 assert.Equal(t, "team_user team_admin", r2.Roles) 3402 3403 r3, err := ss.Team().GetMember(context.Background(), m3.TeamId, m3.UserId) 3404 require.NoError(t, err) 3405 assert.Equal(t, m3.ExplicitRoles, r3.Roles) 3406 3407 r4, err := ss.Team().GetMember(context.Background(), m4.TeamId, m4.UserId) 3408 require.NoError(t, err) 3409 assert.Equal(t, "", r4.Roles) 3410 } 3411 3412 func testTeamStoreAnalyticsGetTeamCountForScheme(t *testing.T, ss store.Store) { 3413 s1 := &model.Scheme{ 3414 DisplayName: NewTestId(), 3415 Name: NewTestId(), 3416 Description: NewTestId(), 3417 Scope: model.SCHEME_SCOPE_TEAM, 3418 } 3419 s1, err := ss.Scheme().Save(s1) 3420 require.NoError(t, err) 3421 3422 count1, err := ss.Team().AnalyticsGetTeamCountForScheme(s1.Id) 3423 assert.NoError(t, err) 3424 assert.Equal(t, int64(0), count1) 3425 3426 t1 := &model.Team{ 3427 Name: NewTestId(), 3428 DisplayName: NewTestId(), 3429 Email: MakeEmail(), 3430 Type: model.TEAM_OPEN, 3431 SchemeId: &s1.Id, 3432 } 3433 _, err = ss.Team().Save(t1) 3434 require.NoError(t, err) 3435 3436 count2, err := ss.Team().AnalyticsGetTeamCountForScheme(s1.Id) 3437 assert.NoError(t, err) 3438 assert.Equal(t, int64(1), count2) 3439 3440 t2 := &model.Team{ 3441 Name: NewTestId(), 3442 DisplayName: NewTestId(), 3443 Email: MakeEmail(), 3444 Type: model.TEAM_OPEN, 3445 SchemeId: &s1.Id, 3446 } 3447 _, err = ss.Team().Save(t2) 3448 require.NoError(t, err) 3449 3450 count3, err := ss.Team().AnalyticsGetTeamCountForScheme(s1.Id) 3451 assert.NoError(t, err) 3452 assert.Equal(t, int64(2), count3) 3453 3454 t3 := &model.Team{ 3455 Name: NewTestId(), 3456 DisplayName: NewTestId(), 3457 Email: MakeEmail(), 3458 Type: model.TEAM_OPEN, 3459 } 3460 _, err = ss.Team().Save(t3) 3461 require.NoError(t, err) 3462 3463 count4, err := ss.Team().AnalyticsGetTeamCountForScheme(s1.Id) 3464 assert.NoError(t, err) 3465 assert.Equal(t, int64(2), count4) 3466 3467 t4 := &model.Team{ 3468 Name: NewTestId(), 3469 DisplayName: NewTestId(), 3470 Email: MakeEmail(), 3471 Type: model.TEAM_OPEN, 3472 SchemeId: &s1.Id, 3473 DeleteAt: model.GetMillis(), 3474 } 3475 _, err = ss.Team().Save(t4) 3476 require.NoError(t, err) 3477 3478 count5, err := ss.Team().AnalyticsGetTeamCountForScheme(s1.Id) 3479 assert.NoError(t, err) 3480 assert.Equal(t, int64(2), count5) 3481 } 3482 3483 func testTeamStoreGetAllForExportAfter(t *testing.T, ss store.Store) { 3484 t1 := model.Team{} 3485 t1.DisplayName = "Name" 3486 t1.Name = NewTestId() 3487 t1.Email = MakeEmail() 3488 t1.Type = model.TEAM_OPEN 3489 _, err := ss.Team().Save(&t1) 3490 require.NoError(t, err) 3491 3492 d1, err := ss.Team().GetAllForExportAfter(10000, strings.Repeat("0", 26)) 3493 assert.NoError(t, err) 3494 3495 found := false 3496 for _, team := range d1 { 3497 if team.Id == t1.Id { 3498 found = true 3499 assert.Equal(t, t1.Id, team.Id) 3500 assert.Nil(t, team.SchemeId) 3501 assert.Equal(t, t1.Name, team.Name) 3502 } 3503 } 3504 assert.True(t, found) 3505 } 3506 3507 func testTeamStoreGetTeamMembersForExport(t *testing.T, ss store.Store) { 3508 t1 := model.Team{} 3509 t1.DisplayName = "Name" 3510 t1.Name = NewTestId() 3511 t1.Email = MakeEmail() 3512 t1.Type = model.TEAM_OPEN 3513 _, err := ss.Team().Save(&t1) 3514 require.NoError(t, err) 3515 3516 u1 := model.User{} 3517 u1.Email = MakeEmail() 3518 u1.Nickname = NewTestId() 3519 _, err = ss.User().Save(&u1) 3520 require.NoError(t, err) 3521 3522 u2 := model.User{} 3523 u2.Email = MakeEmail() 3524 u2.Nickname = NewTestId() 3525 _, err = ss.User().Save(&u2) 3526 require.NoError(t, err) 3527 3528 m1 := &model.TeamMember{TeamId: t1.Id, UserId: u1.Id} 3529 m2 := &model.TeamMember{TeamId: t1.Id, UserId: u2.Id} 3530 _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2}, -1) 3531 require.NoError(t, nErr) 3532 3533 d1, err := ss.Team().GetTeamMembersForExport(u1.Id) 3534 assert.NoError(t, err) 3535 3536 assert.Len(t, d1, 1) 3537 3538 tmfe1 := d1[0] 3539 assert.Equal(t, t1.Id, tmfe1.TeamId) 3540 assert.Equal(t, u1.Id, tmfe1.UserId) 3541 assert.Equal(t, t1.Name, tmfe1.TeamName) 3542 } 3543 3544 func testGroupSyncedTeamCount(t *testing.T, ss store.Store) { 3545 team1, err := ss.Team().Save(&model.Team{ 3546 DisplayName: NewTestId(), 3547 Name: NewTestId(), 3548 Email: MakeEmail(), 3549 Type: model.TEAM_INVITE, 3550 GroupConstrained: model.NewBool(true), 3551 }) 3552 require.NoError(t, err) 3553 require.True(t, team1.IsGroupConstrained()) 3554 defer ss.Team().PermanentDelete(team1.Id) 3555 3556 team2, err := ss.Team().Save(&model.Team{ 3557 DisplayName: NewTestId(), 3558 Name: "zz" + model.NewId(), 3559 Email: MakeEmail(), 3560 Type: model.TEAM_INVITE, 3561 }) 3562 require.NoError(t, err) 3563 require.False(t, team2.IsGroupConstrained()) 3564 defer ss.Team().PermanentDelete(team2.Id) 3565 3566 count, err := ss.Team().GroupSyncedTeamCount() 3567 require.NoError(t, err) 3568 require.GreaterOrEqual(t, count, int64(1)) 3569 3570 team2.GroupConstrained = model.NewBool(true) 3571 team2, err = ss.Team().Update(team2) 3572 require.NoError(t, err) 3573 require.True(t, team2.IsGroupConstrained()) 3574 3575 countAfter, err := ss.Team().GroupSyncedTeamCount() 3576 require.NoError(t, err) 3577 require.GreaterOrEqual(t, countAfter, count+1) 3578 }