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