github.com/mad-app/mattermost-server@v5.11.1+incompatible/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/model" 15 "github.com/mattermost/mattermost-server/store" 16 ) 17 18 func TestTeamStore(t *testing.T, ss store.Store) { 19 createDefaultRoles(t, ss) 20 21 t.Run("Save", func(t *testing.T) { testTeamStoreSave(t, ss) }) 22 t.Run("Update", func(t *testing.T) { testTeamStoreUpdate(t, ss) }) 23 t.Run("UpdateDisplayName", func(t *testing.T) { testTeamStoreUpdateDisplayName(t, ss) }) 24 t.Run("Get", func(t *testing.T) { testTeamStoreGet(t, ss) }) 25 t.Run("GetByName", func(t *testing.T) { testTeamStoreGetByName(t, ss) }) 26 t.Run("SearchByName", func(t *testing.T) { testTeamStoreSearchByName(t, ss) }) 27 t.Run("SearchAll", func(t *testing.T) { testTeamStoreSearchAll(t, ss) }) 28 t.Run("SearchOpen", func(t *testing.T) { testTeamStoreSearchOpen(t, ss) }) 29 t.Run("SearchPrivate", func(t *testing.T) { testTeamStoreSearchPrivate(t, ss) }) 30 t.Run("GetByIniviteId", func(t *testing.T) { testTeamStoreGetByIniviteId(t, ss) }) 31 t.Run("ByUserId", func(t *testing.T) { testTeamStoreByUserId(t, ss) }) 32 t.Run("GetAllTeamListing", func(t *testing.T) { testGetAllTeamListing(t, ss) }) 33 t.Run("GetAllTeamPageListing", func(t *testing.T) { testGetAllTeamPageListing(t, ss) }) 34 t.Run("GetAllPrivateTeamListing", func(t *testing.T) { testGetAllPrivateTeamListing(t, ss) }) 35 t.Run("GetAllPrivateTeamPageListing", func(t *testing.T) { testGetAllPrivateTeamPageListing(t, ss) }) 36 t.Run("Delete", func(t *testing.T) { testDelete(t, ss) }) 37 t.Run("TeamCount", func(t *testing.T) { testTeamCount(t, ss) }) 38 t.Run("TeamMembers", func(t *testing.T) { testTeamMembers(t, ss) }) 39 t.Run("SaveTeamMemberMaxMembers", func(t *testing.T) { testSaveTeamMemberMaxMembers(t, ss) }) 40 t.Run("GetTeamMember", func(t *testing.T) { testGetTeamMember(t, ss) }) 41 t.Run("GetTeamMembersByIds", func(t *testing.T) { testGetTeamMembersByIds(t, ss) }) 42 t.Run("MemberCount", func(t *testing.T) { testTeamStoreMemberCount(t, ss) }) 43 t.Run("GetChannelUnreadsForAllTeams", func(t *testing.T) { testGetChannelUnreadsForAllTeams(t, ss) }) 44 t.Run("GetChannelUnreadsForTeam", func(t *testing.T) { testGetChannelUnreadsForTeam(t, ss) }) 45 t.Run("UpdateLastTeamIconUpdate", func(t *testing.T) { testUpdateLastTeamIconUpdate(t, ss) }) 46 t.Run("GetTeamsByScheme", func(t *testing.T) { testGetTeamsByScheme(t, ss) }) 47 t.Run("MigrateTeamMembers", func(t *testing.T) { testTeamStoreMigrateTeamMembers(t, ss) }) 48 t.Run("ResetAllTeamSchemes", func(t *testing.T) { testResetAllTeamSchemes(t, ss) }) 49 t.Run("ClearAllCustomRoleAssignments", func(t *testing.T) { testTeamStoreClearAllCustomRoleAssignments(t, ss) }) 50 t.Run("AnalyticsGetTeamCountForScheme", func(t *testing.T) { testTeamStoreAnalyticsGetTeamCountForScheme(t, ss) }) 51 t.Run("GetAllForExportAfter", func(t *testing.T) { testTeamStoreGetAllForExportAfter(t, ss) }) 52 t.Run("GetTeamMembersForExport", func(t *testing.T) { testTeamStoreGetTeamMembersForExport(t, ss) }) 53 t.Run("GetTeamsForUserWithPagination", func(t *testing.T) { testTeamMembersWithPagination(t, ss) }) 54 } 55 56 func testTeamStoreSave(t *testing.T, ss store.Store) { 57 o1 := model.Team{} 58 o1.DisplayName = "DisplayName" 59 o1.Name = "z-z-z" + model.NewId() + "b" 60 o1.Email = MakeEmail() 61 o1.Type = model.TEAM_OPEN 62 63 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 64 t.Fatal("couldn't save item", err) 65 } 66 67 if err := (<-ss.Team().Save(&o1)).Err; err == nil { 68 t.Fatal("shouldn't be able to update from save") 69 } 70 71 o1.Id = "" 72 if err := (<-ss.Team().Save(&o1)).Err; err == nil { 73 t.Fatal("should be unique domain") 74 } 75 } 76 77 func testTeamStoreUpdate(t *testing.T, ss store.Store) { 78 o1 := model.Team{} 79 o1.DisplayName = "DisplayName" 80 o1.Name = "z-z-z" + model.NewId() + "b" 81 o1.Email = MakeEmail() 82 o1.Type = model.TEAM_OPEN 83 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 84 t.Fatal(err) 85 } 86 87 time.Sleep(100 * time.Millisecond) 88 89 if err := (<-ss.Team().Update(&o1)).Err; err != nil { 90 t.Fatal(err) 91 } 92 93 o1.Id = "missing" 94 if err := (<-ss.Team().Update(&o1)).Err; err == nil { 95 t.Fatal("Update should have failed because of missing key") 96 } 97 98 o1.Id = model.NewId() 99 if err := (<-ss.Team().Update(&o1)).Err; err == nil { 100 t.Fatal("Update should have faile because id change") 101 } 102 } 103 104 func testTeamStoreUpdateDisplayName(t *testing.T, ss store.Store) { 105 o1 := &model.Team{} 106 o1.DisplayName = "Display Name" 107 o1.Name = "z-z-z" + model.NewId() + "b" 108 o1.Email = MakeEmail() 109 o1.Type = model.TEAM_OPEN 110 o1 = (<-ss.Team().Save(o1)).Data.(*model.Team) 111 112 newDisplayName := "NewDisplayName" 113 114 if err := (<-ss.Team().UpdateDisplayName(newDisplayName, o1.Id)).Err; err != nil { 115 t.Fatal(err) 116 } 117 118 ro1 := (<-ss.Team().Get(o1.Id)).Data.(*model.Team) 119 if ro1.DisplayName != newDisplayName { 120 t.Fatal("DisplayName not updated") 121 } 122 } 123 124 func testTeamStoreGet(t *testing.T, ss store.Store) { 125 o1 := model.Team{} 126 o1.DisplayName = "DisplayName" 127 o1.Name = "z-z-z" + model.NewId() + "b" 128 o1.Email = MakeEmail() 129 o1.Type = model.TEAM_OPEN 130 store.Must(ss.Team().Save(&o1)) 131 132 if r1 := <-ss.Team().Get(o1.Id); r1.Err != nil { 133 t.Fatal(r1.Err) 134 } else { 135 if r1.Data.(*model.Team).ToJson() != o1.ToJson() { 136 t.Fatal("invalid returned team") 137 } 138 } 139 140 if err := (<-ss.Team().Get("")).Err; err == nil { 141 t.Fatal("Missing id should have failed") 142 } 143 } 144 145 func testTeamStoreGetByName(t *testing.T, ss store.Store) { 146 o1 := model.Team{} 147 o1.DisplayName = "DisplayName" 148 o1.Name = "z-z-z" + model.NewId() + "b" 149 o1.Email = MakeEmail() 150 o1.Type = model.TEAM_OPEN 151 152 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 153 t.Fatal(err) 154 } 155 156 if r1 := <-ss.Team().GetByName(o1.Name); r1.Err != nil { 157 t.Fatal(r1.Err) 158 } else { 159 if r1.Data.(*model.Team).ToJson() != o1.ToJson() { 160 t.Fatal("invalid returned team") 161 } 162 } 163 164 if err := (<-ss.Team().GetByName("")).Err; err == nil { 165 t.Fatal("Missing id should have failed") 166 } 167 } 168 169 func testTeamStoreSearchByName(t *testing.T, ss store.Store) { 170 o1 := model.Team{} 171 o1.DisplayName = "DisplayName" 172 var name = "zzz" + model.NewId() 173 o1.Name = name + "b" 174 o1.Email = MakeEmail() 175 o1.Type = model.TEAM_OPEN 176 177 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 178 t.Fatal(err) 179 } 180 181 if r1 := <-ss.Team().SearchByName(name); r1.Err != nil { 182 t.Fatal(r1.Err) 183 } else { 184 if r1.Data.([]*model.Team)[0].ToJson() != o1.ToJson() { 185 t.Fatal("invalid returned team") 186 } 187 } 188 } 189 190 func testTeamStoreSearchAll(t *testing.T, ss store.Store) { 191 o := model.Team{} 192 o.DisplayName = "ADisplayName" + model.NewId() 193 o.Name = "zzzzzz-" + model.NewId() + "a" 194 o.Email = MakeEmail() 195 o.Type = model.TEAM_OPEN 196 o.AllowOpenInvite = true 197 198 require.Nil(t, (<-ss.Team().Save(&o)).Err) 199 200 p := model.Team{} 201 p.DisplayName = "ADisplayName" + model.NewId() 202 p.Name = "zzzzzz-" + model.NewId() + "a" 203 p.Email = MakeEmail() 204 p.Type = model.TEAM_OPEN 205 p.AllowOpenInvite = false 206 207 require.Nil(t, (<-ss.Team().Save(&p)).Err) 208 209 testCases := []struct { 210 Name string 211 Term string 212 ExpectedLenth int 213 ExpectedFirstId string 214 }{ 215 { 216 "Search for open team name", 217 o.Name, 218 1, 219 o.Id, 220 }, 221 { 222 "Search for open team displayName", 223 o.DisplayName, 224 1, 225 o.Id, 226 }, 227 { 228 "Search for open team without results", 229 "junk", 230 0, 231 "", 232 }, 233 { 234 "Search for private team", 235 p.DisplayName, 236 1, 237 p.Id, 238 }, 239 { 240 "Search for both teams", 241 "zzzzzz", 242 2, 243 "", 244 }, 245 } 246 247 for _, tc := range testCases { 248 t.Run(tc.Name, func(t *testing.T) { 249 r1 := <-ss.Team().SearchAll(tc.Term) 250 require.Nil(t, r1.Err) 251 results := r1.Data.([]*model.Team) 252 require.Equal(t, tc.ExpectedLenth, len(results)) 253 if tc.ExpectedFirstId != "" { 254 assert.Equal(t, tc.ExpectedFirstId, results[0].Id) 255 } 256 }) 257 } 258 } 259 260 func testTeamStoreSearchOpen(t *testing.T, ss store.Store) { 261 o := model.Team{} 262 o.DisplayName = "ADisplayName" + model.NewId() 263 o.Name = "zz" + model.NewId() + "a" 264 o.Email = MakeEmail() 265 o.Type = model.TEAM_OPEN 266 o.AllowOpenInvite = true 267 268 require.Nil(t, (<-ss.Team().Save(&o)).Err) 269 270 p := model.Team{} 271 p.DisplayName = "ADisplayName" + model.NewId() 272 p.Name = "zz" + model.NewId() + "a" 273 p.Email = MakeEmail() 274 p.Type = model.TEAM_OPEN 275 p.AllowOpenInvite = false 276 277 require.Nil(t, (<-ss.Team().Save(&p)).Err) 278 279 testCases := []struct { 280 Name string 281 Term string 282 ExpectedLenth int 283 ExpectedFirstId string 284 }{ 285 { 286 "Search for open team name", 287 o.Name, 288 1, 289 o.Id, 290 }, 291 { 292 "Search for open team displayName", 293 o.DisplayName, 294 1, 295 o.Id, 296 }, 297 { 298 "Search for open team without results", 299 "junk", 300 0, 301 "", 302 }, 303 { 304 "Search for a private team (expected no results)", 305 p.DisplayName, 306 0, 307 "", 308 }, 309 } 310 311 for _, tc := range testCases { 312 t.Run(tc.Name, func(t *testing.T) { 313 r1 := <-ss.Team().SearchOpen(tc.Term) 314 require.Nil(t, r1.Err) 315 results := r1.Data.([]*model.Team) 316 require.Equal(t, tc.ExpectedLenth, len(results)) 317 if tc.ExpectedFirstId != "" { 318 assert.Equal(t, tc.ExpectedFirstId, results[0].Id) 319 } 320 }) 321 } 322 } 323 324 func testTeamStoreSearchPrivate(t *testing.T, ss store.Store) { 325 o := model.Team{} 326 o.DisplayName = "ADisplayName" + model.NewId() 327 o.Name = "zz" + model.NewId() + "a" 328 o.Email = MakeEmail() 329 o.Type = model.TEAM_OPEN 330 o.AllowOpenInvite = true 331 332 require.Nil(t, (<-ss.Team().Save(&o)).Err) 333 334 p := model.Team{} 335 p.DisplayName = "ADisplayName" + model.NewId() 336 p.Name = "zz" + model.NewId() + "a" 337 p.Email = MakeEmail() 338 p.Type = model.TEAM_OPEN 339 p.AllowOpenInvite = false 340 341 require.Nil(t, (<-ss.Team().Save(&p)).Err) 342 343 testCases := []struct { 344 Name string 345 Term string 346 ExpectedLenth int 347 ExpectedFirstId string 348 }{ 349 { 350 "Search for private team name", 351 p.Name, 352 1, 353 p.Id, 354 }, 355 { 356 "Search for private team displayName", 357 p.DisplayName, 358 1, 359 p.Id, 360 }, 361 { 362 "Search for private team without results", 363 "junk", 364 0, 365 "", 366 }, 367 { 368 "Search for a open team (expected no results)", 369 o.DisplayName, 370 0, 371 "", 372 }, 373 } 374 375 for _, tc := range testCases { 376 t.Run(tc.Name, func(t *testing.T) { 377 r1 := <-ss.Team().SearchPrivate(tc.Term) 378 require.Nil(t, r1.Err) 379 results := r1.Data.([]*model.Team) 380 require.Equal(t, tc.ExpectedLenth, len(results)) 381 if tc.ExpectedFirstId != "" { 382 assert.Equal(t, tc.ExpectedFirstId, results[0].Id) 383 } 384 }) 385 } 386 } 387 388 func testTeamStoreGetByIniviteId(t *testing.T, ss store.Store) { 389 o1 := model.Team{} 390 o1.DisplayName = "DisplayName" 391 o1.Name = "z-z-z" + model.NewId() + "b" 392 o1.Email = MakeEmail() 393 o1.Type = model.TEAM_OPEN 394 o1.InviteId = model.NewId() 395 396 save1 := <-ss.Team().Save(&o1) 397 398 if err := save1.Err; err != nil { 399 t.Fatal(err) 400 } 401 402 o2 := model.Team{} 403 o2.DisplayName = "DisplayName" 404 o2.Name = "zz" + model.NewId() + "b" 405 o2.Email = MakeEmail() 406 o2.Type = model.TEAM_OPEN 407 408 if r1 := <-ss.Team().GetByInviteId(save1.Data.(*model.Team).InviteId); r1.Err != nil { 409 t.Fatal(r1.Err) 410 } else { 411 if r1.Data.(*model.Team).ToJson() != o1.ToJson() { 412 t.Fatal("invalid returned team") 413 } 414 } 415 416 if err := (<-ss.Team().GetByInviteId("")).Err; err == nil { 417 t.Fatal("Missing id should have failed") 418 } 419 } 420 421 func testTeamStoreByUserId(t *testing.T, ss store.Store) { 422 o1 := &model.Team{} 423 o1.DisplayName = "DisplayName" 424 o1.Name = "z-z-z" + model.NewId() + "b" 425 o1.Email = MakeEmail() 426 o1.Type = model.TEAM_OPEN 427 o1.InviteId = model.NewId() 428 o1 = store.Must(ss.Team().Save(o1)).(*model.Team) 429 430 m1 := &model.TeamMember{TeamId: o1.Id, UserId: model.NewId()} 431 store.Must(ss.Team().SaveMember(m1, -1)) 432 433 if r1 := <-ss.Team().GetTeamsByUserId(m1.UserId); r1.Err != nil { 434 t.Fatal(r1.Err) 435 } else { 436 teams := r1.Data.([]*model.Team) 437 if len(teams) == 0 { 438 t.Fatal("Should return a team") 439 } 440 441 if teams[0].Id != o1.Id { 442 t.Fatal("should be a member") 443 } 444 445 } 446 } 447 448 func testGetAllTeamListing(t *testing.T, ss store.Store) { 449 o1 := model.Team{} 450 o1.DisplayName = "DisplayName" 451 o1.Name = "z-z-z" + model.NewId() + "b" 452 o1.Email = MakeEmail() 453 o1.Type = model.TEAM_OPEN 454 o1.AllowOpenInvite = true 455 store.Must(ss.Team().Save(&o1)) 456 457 o2 := model.Team{} 458 o2.DisplayName = "DisplayName" 459 o2.Name = "zz" + model.NewId() + "b" 460 o2.Email = MakeEmail() 461 o2.Type = model.TEAM_OPEN 462 store.Must(ss.Team().Save(&o2)) 463 464 o3 := model.Team{} 465 o3.DisplayName = "DisplayName" 466 o3.Name = "z-z-z" + model.NewId() + "b" 467 o3.Email = MakeEmail() 468 o3.Type = model.TEAM_INVITE 469 o3.AllowOpenInvite = true 470 store.Must(ss.Team().Save(&o3)) 471 472 o4 := model.Team{} 473 o4.DisplayName = "DisplayName" 474 o4.Name = "zz" + model.NewId() + "b" 475 o4.Email = MakeEmail() 476 o4.Type = model.TEAM_INVITE 477 store.Must(ss.Team().Save(&o4)) 478 479 if r1 := <-ss.Team().GetAllTeamListing(); r1.Err != nil { 480 t.Fatal(r1.Err) 481 } else { 482 teams := r1.Data.([]*model.Team) 483 484 for _, team := range teams { 485 if !team.AllowOpenInvite { 486 t.Fatal("should have returned team with AllowOpenInvite as true") 487 } 488 } 489 490 if len(teams) == 0 { 491 t.Fatal("failed team listing") 492 } 493 } 494 } 495 496 func testGetAllTeamPageListing(t *testing.T, ss store.Store) { 497 o1 := model.Team{} 498 o1.DisplayName = "DisplayName" 499 o1.Name = "z-z-z" + model.NewId() + "b" 500 o1.Email = MakeEmail() 501 o1.Type = model.TEAM_OPEN 502 o1.AllowOpenInvite = true 503 store.Must(ss.Team().Save(&o1)) 504 505 o2 := model.Team{} 506 o2.DisplayName = "DisplayName" 507 o2.Name = "zz" + model.NewId() + "b" 508 o2.Email = MakeEmail() 509 o2.Type = model.TEAM_OPEN 510 o2.AllowOpenInvite = false 511 store.Must(ss.Team().Save(&o2)) 512 513 o3 := model.Team{} 514 o3.DisplayName = "DisplayName" 515 o3.Name = "z-z-z" + model.NewId() + "b" 516 o3.Email = MakeEmail() 517 o3.Type = model.TEAM_INVITE 518 o3.AllowOpenInvite = true 519 store.Must(ss.Team().Save(&o3)) 520 521 o4 := model.Team{} 522 o4.DisplayName = "DisplayName" 523 o4.Name = "zz" + model.NewId() + "b" 524 o4.Email = MakeEmail() 525 o4.Type = model.TEAM_INVITE 526 o4.AllowOpenInvite = false 527 store.Must(ss.Team().Save(&o4)) 528 529 if r1 := <-ss.Team().GetAllTeamPageListing(0, 10); r1.Err != nil { 530 t.Fatal(r1.Err) 531 } else { 532 teams := r1.Data.([]*model.Team) 533 534 for _, team := range teams { 535 if !team.AllowOpenInvite { 536 t.Fatal("should have returned team with AllowOpenInvite as true") 537 } 538 } 539 540 if len(teams) > 10 { 541 t.Fatal("should have returned max of 10 teams") 542 } 543 } 544 545 o5 := model.Team{} 546 o5.DisplayName = "DisplayName" 547 o5.Name = "z-z-z" + model.NewId() + "b" 548 o5.Email = MakeEmail() 549 o5.Type = model.TEAM_OPEN 550 o5.AllowOpenInvite = true 551 store.Must(ss.Team().Save(&o5)) 552 553 if r1 := <-ss.Team().GetAllTeamPageListing(0, 4); r1.Err != nil { 554 t.Fatal(r1.Err) 555 } else { 556 teams := r1.Data.([]*model.Team) 557 558 for _, team := range teams { 559 if !team.AllowOpenInvite { 560 t.Fatal("should have returned team with AllowOpenInvite as true") 561 } 562 } 563 564 if len(teams) > 4 { 565 t.Fatal("should have returned max of 4 teams") 566 } 567 } 568 569 if r1 := <-ss.Team().GetAllTeamPageListing(1, 1); r1.Err != nil { 570 t.Fatal(r1.Err) 571 } else { 572 teams := r1.Data.([]*model.Team) 573 574 for _, team := range teams { 575 if !team.AllowOpenInvite { 576 t.Fatal("should have returned team with AllowOpenInvite as true") 577 } 578 } 579 580 if len(teams) > 1 { 581 t.Fatal("should have returned max of 1 team") 582 } 583 } 584 } 585 586 func testGetAllPrivateTeamListing(t *testing.T, ss store.Store) { 587 o1 := model.Team{} 588 o1.DisplayName = "DisplayName" 589 o1.Name = "z-z-z" + model.NewId() + "b" 590 o1.Email = MakeEmail() 591 o1.Type = model.TEAM_OPEN 592 o1.AllowOpenInvite = true 593 store.Must(ss.Team().Save(&o1)) 594 595 o2 := model.Team{} 596 o2.DisplayName = "DisplayName" 597 o2.Name = "zz" + model.NewId() + "b" 598 o2.Email = MakeEmail() 599 o2.Type = model.TEAM_OPEN 600 store.Must(ss.Team().Save(&o2)) 601 602 o3 := model.Team{} 603 o3.DisplayName = "DisplayName" 604 o3.Name = "z-z-z" + model.NewId() + "b" 605 o3.Email = MakeEmail() 606 o3.Type = model.TEAM_INVITE 607 o3.AllowOpenInvite = true 608 store.Must(ss.Team().Save(&o3)) 609 610 o4 := model.Team{} 611 o4.DisplayName = "DisplayName" 612 o4.Name = "zz" + model.NewId() + "b" 613 o4.Email = MakeEmail() 614 o4.Type = model.TEAM_INVITE 615 store.Must(ss.Team().Save(&o4)) 616 617 if r1 := <-ss.Team().GetAllPrivateTeamListing(); r1.Err != nil { 618 t.Fatal(r1.Err) 619 } else { 620 teams := r1.Data.([]*model.Team) 621 622 for _, team := range teams { 623 if team.AllowOpenInvite { 624 t.Fatal("should have returned team with AllowOpenInvite as false") 625 } 626 } 627 628 if len(teams) == 0 { 629 t.Fatal("failed team listing") 630 } 631 } 632 } 633 634 func testGetAllPrivateTeamPageListing(t *testing.T, ss store.Store) { 635 o1 := model.Team{} 636 o1.DisplayName = "DisplayName" 637 o1.Name = "z-z-z" + model.NewId() + "b" 638 o1.Email = MakeEmail() 639 o1.Type = model.TEAM_OPEN 640 o1.AllowOpenInvite = true 641 store.Must(ss.Team().Save(&o1)) 642 643 o2 := model.Team{} 644 o2.DisplayName = "DisplayName" 645 o2.Name = "zz" + model.NewId() + "b" 646 o2.Email = MakeEmail() 647 o2.Type = model.TEAM_OPEN 648 o2.AllowOpenInvite = false 649 store.Must(ss.Team().Save(&o2)) 650 651 o3 := model.Team{} 652 o3.DisplayName = "DisplayName" 653 o3.Name = "z-z-z" + model.NewId() + "b" 654 o3.Email = MakeEmail() 655 o3.Type = model.TEAM_INVITE 656 o3.AllowOpenInvite = true 657 store.Must(ss.Team().Save(&o3)) 658 659 o4 := model.Team{} 660 o4.DisplayName = "DisplayName" 661 o4.Name = "zz" + model.NewId() + "b" 662 o4.Email = MakeEmail() 663 o4.Type = model.TEAM_INVITE 664 o4.AllowOpenInvite = false 665 store.Must(ss.Team().Save(&o4)) 666 667 if r1 := <-ss.Team().GetAllPrivateTeamPageListing(0, 10); r1.Err != nil { 668 t.Fatal(r1.Err) 669 } else { 670 teams := r1.Data.([]*model.Team) 671 672 for _, team := range teams { 673 if team.AllowOpenInvite { 674 t.Fatal("should have returned team with AllowOpenInvite as false") 675 } 676 } 677 678 if len(teams) > 10 { 679 t.Fatal("should have returned max of 10 teams") 680 } 681 } 682 683 o5 := model.Team{} 684 o5.DisplayName = "DisplayName" 685 o5.Name = "z-z-z" + model.NewId() + "b" 686 o5.Email = MakeEmail() 687 o5.Type = model.TEAM_OPEN 688 o5.AllowOpenInvite = true 689 store.Must(ss.Team().Save(&o5)) 690 691 if r1 := <-ss.Team().GetAllPrivateTeamPageListing(0, 4); r1.Err != nil { 692 t.Fatal(r1.Err) 693 } else { 694 teams := r1.Data.([]*model.Team) 695 696 for _, team := range teams { 697 if team.AllowOpenInvite { 698 t.Fatal("should have returned team with AllowOpenInvite as false") 699 } 700 } 701 702 if len(teams) > 4 { 703 t.Fatal("should have returned max of 4 teams") 704 } 705 } 706 707 if r1 := <-ss.Team().GetAllPrivateTeamPageListing(1, 1); r1.Err != nil { 708 t.Fatal(r1.Err) 709 } else { 710 teams := r1.Data.([]*model.Team) 711 712 for _, team := range teams { 713 if team.AllowOpenInvite { 714 t.Fatal("should have returned team with AllowOpenInvite as false") 715 } 716 } 717 718 if len(teams) > 1 { 719 t.Fatal("should have returned max of 1 team") 720 } 721 } 722 } 723 724 func testDelete(t *testing.T, ss store.Store) { 725 o1 := model.Team{} 726 o1.DisplayName = "DisplayName" 727 o1.Name = "z-z-z" + model.NewId() + "b" 728 o1.Email = MakeEmail() 729 o1.Type = model.TEAM_OPEN 730 o1.AllowOpenInvite = true 731 store.Must(ss.Team().Save(&o1)) 732 733 o2 := model.Team{} 734 o2.DisplayName = "DisplayName" 735 o2.Name = "zz" + model.NewId() + "b" 736 o2.Email = MakeEmail() 737 o2.Type = model.TEAM_OPEN 738 store.Must(ss.Team().Save(&o2)) 739 740 if r1 := <-ss.Team().PermanentDelete(o1.Id); r1.Err != nil { 741 t.Fatal(r1.Err) 742 } 743 } 744 745 func testTeamCount(t *testing.T, ss store.Store) { 746 o1 := model.Team{} 747 o1.DisplayName = "DisplayName" 748 o1.Name = "z-z-z" + model.NewId() + "b" 749 o1.Email = MakeEmail() 750 o1.Type = model.TEAM_OPEN 751 o1.AllowOpenInvite = true 752 store.Must(ss.Team().Save(&o1)) 753 754 if r1 := <-ss.Team().AnalyticsTeamCount(); r1.Err != nil { 755 t.Fatal(r1.Err) 756 } else { 757 if r1.Data.(int64) == 0 { 758 t.Fatal("should be at least 1 team") 759 } 760 } 761 } 762 763 func testTeamMembers(t *testing.T, ss store.Store) { 764 teamId1 := model.NewId() 765 teamId2 := model.NewId() 766 767 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 768 m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 769 m3 := &model.TeamMember{TeamId: teamId2, UserId: model.NewId()} 770 771 if r1 := <-ss.Team().SaveMember(m1, -1); r1.Err != nil { 772 t.Fatal(r1.Err) 773 } 774 775 store.Must(ss.Team().SaveMember(m2, -1)) 776 store.Must(ss.Team().SaveMember(m3, -1)) 777 778 if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil { 779 t.Fatal(r1.Err) 780 } else { 781 ms := r1.Data.([]*model.TeamMember) 782 require.Len(t, ms, 2) 783 } 784 785 if r1 := <-ss.Team().GetMembers(teamId2, 0, 100); r1.Err != nil { 786 t.Fatal(r1.Err) 787 } else { 788 ms := r1.Data.([]*model.TeamMember) 789 790 require.Len(t, ms, 1) 791 require.Equal(t, m3.UserId, ms[0].UserId) 792 } 793 794 if r1 := <-ss.Team().GetTeamsForUser(m1.UserId); r1.Err != nil { 795 t.Fatal(r1.Err) 796 } else { 797 ms := r1.Data.([]*model.TeamMember) 798 799 require.Len(t, ms, 1) 800 require.Equal(t, m1.TeamId, ms[0].TeamId) 801 } 802 803 if r1 := <-ss.Team().RemoveMember(teamId1, m1.UserId); r1.Err != nil { 804 t.Fatal(r1.Err) 805 } 806 807 if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil { 808 t.Fatal(r1.Err) 809 } else { 810 ms := r1.Data.([]*model.TeamMember) 811 812 require.Len(t, ms, 1) 813 require.Equal(t, m2.UserId, ms[0].UserId) 814 } 815 816 store.Must(ss.Team().SaveMember(m1, -1)) 817 818 if r1 := <-ss.Team().RemoveAllMembersByTeam(teamId1); r1.Err != nil { 819 t.Fatal(r1.Err) 820 } 821 822 if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil { 823 t.Fatal(r1.Err) 824 } else { 825 ms := r1.Data.([]*model.TeamMember) 826 827 require.Len(t, ms, 0) 828 } 829 830 uid := model.NewId() 831 m4 := &model.TeamMember{TeamId: teamId1, UserId: uid} 832 m5 := &model.TeamMember{TeamId: teamId2, UserId: uid} 833 store.Must(ss.Team().SaveMember(m4, -1)) 834 store.Must(ss.Team().SaveMember(m5, -1)) 835 836 if r1 := <-ss.Team().GetTeamsForUser(uid); r1.Err != nil { 837 t.Fatal(r1.Err) 838 } else { 839 ms := r1.Data.([]*model.TeamMember) 840 841 require.Len(t, ms, 2) 842 } 843 844 if r1 := <-ss.Team().RemoveAllMembersByUser(uid); r1.Err != nil { 845 t.Fatal(r1.Err) 846 } 847 848 if r1 := <-ss.Team().GetTeamsForUser(m1.UserId); r1.Err != nil { 849 t.Fatal(r1.Err) 850 } else { 851 ms := r1.Data.([]*model.TeamMember) 852 853 require.Len(t, ms, 0) 854 } 855 } 856 857 func testTeamMembersWithPagination(t *testing.T, ss store.Store) { 858 teamId1 := model.NewId() 859 teamId2 := model.NewId() 860 861 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 862 m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 863 m3 := &model.TeamMember{TeamId: teamId2, UserId: model.NewId()} 864 865 r1 := <-ss.Team().SaveMember(m1, -1) 866 require.Nil(t, r1.Err) 867 868 store.Must(ss.Team().SaveMember(m2, -1)) 869 store.Must(ss.Team().SaveMember(m3, -1)) 870 871 r1 = <-ss.Team().GetTeamsForUserWithPagination(m1.UserId, 0, 1) 872 require.Nil(t, r1.Err) 873 ms := r1.Data.([]*model.TeamMember) 874 875 require.Len(t, ms, 1) 876 require.Equal(t, m1.TeamId, ms[0].TeamId) 877 878 r1 = <-ss.Team().RemoveMember(teamId1, m1.UserId) 879 require.Nil(t, r1.Err) 880 881 r1 = <-ss.Team().GetMembers(teamId1, 0, 100) 882 require.Nil(t, r1.Err) 883 884 ms = r1.Data.([]*model.TeamMember) 885 require.Len(t, ms, 1) 886 require.Equal(t, m2.UserId, ms[0].UserId) 887 888 store.Must(ss.Team().SaveMember(m1, -1)) 889 890 r1 = <-ss.Team().RemoveAllMembersByTeam(teamId1) 891 require.Nil(t, r1.Err) 892 893 uid := model.NewId() 894 m4 := &model.TeamMember{TeamId: teamId1, UserId: uid} 895 m5 := &model.TeamMember{TeamId: teamId2, UserId: uid} 896 store.Must(ss.Team().SaveMember(m4, -1)) 897 store.Must(ss.Team().SaveMember(m5, -1)) 898 899 r1 = <-ss.Team().GetTeamsForUserWithPagination(uid, 0, 1) 900 require.Nil(t, r1.Err) 901 ms = r1.Data.([]*model.TeamMember) 902 require.Len(t, ms, 1) 903 904 r1 = <-ss.Team().RemoveAllMembersByUser(uid) 905 require.Nil(t, r1.Err) 906 907 r1 = <-ss.Team().GetTeamsForUserWithPagination(uid, 1, 1) 908 require.Nil(t, r1.Err) 909 ms = r1.Data.([]*model.TeamMember) 910 require.Len(t, ms, 0) 911 } 912 913 func testSaveTeamMemberMaxMembers(t *testing.T, ss store.Store) { 914 maxUsersPerTeam := 5 915 916 team := store.Must(ss.Team().Save(&model.Team{ 917 DisplayName: "DisplayName", 918 Name: "z-z-z" + model.NewId() + "b", 919 Type: model.TEAM_OPEN, 920 })).(*model.Team) 921 defer func() { 922 <-ss.Team().PermanentDelete(team.Id) 923 }() 924 925 userIds := make([]string, maxUsersPerTeam) 926 927 for i := 0; i < maxUsersPerTeam; i++ { 928 userIds[i] = store.Must(ss.User().Save(&model.User{ 929 Username: model.NewId(), 930 Email: MakeEmail(), 931 })).(*model.User).Id 932 933 defer func(userId string) { 934 <-ss.User().PermanentDelete(userId) 935 }(userIds[i]) 936 937 store.Must(ss.Team().SaveMember(&model.TeamMember{ 938 TeamId: team.Id, 939 UserId: userIds[i], 940 }, maxUsersPerTeam)) 941 942 defer func(userId string) { 943 <-ss.Team().RemoveMember(team.Id, userId) 944 }(userIds[i]) 945 } 946 947 if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil { 948 t.Fatal(result.Err) 949 } else if count := result.Data.(int64); int(count) != maxUsersPerTeam { 950 t.Fatalf("should start with 5 team members, had %v instead", count) 951 } 952 953 newUserId := store.Must(ss.User().Save(&model.User{ 954 Username: model.NewId(), 955 Email: MakeEmail(), 956 })).(*model.User).Id 957 defer func() { 958 <-ss.User().PermanentDelete(newUserId) 959 }() 960 961 if result := <-ss.Team().SaveMember(&model.TeamMember{ 962 TeamId: team.Id, 963 UserId: newUserId, 964 }, maxUsersPerTeam); result.Err == nil { 965 t.Fatal("shouldn't be able to save member when at maximum members per team") 966 } 967 968 if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil { 969 t.Fatal(result.Err) 970 } else if count := result.Data.(int64); int(count) != maxUsersPerTeam { 971 t.Fatalf("should still have 5 team members, had %v instead", count) 972 } 973 974 // Leaving the team from the UI sets DeleteAt instead of using TeamStore.RemoveMember 975 store.Must(ss.Team().UpdateMember(&model.TeamMember{ 976 TeamId: team.Id, 977 UserId: userIds[0], 978 DeleteAt: 1234, 979 })) 980 981 if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil { 982 t.Fatal(result.Err) 983 } else if count := result.Data.(int64); int(count) != maxUsersPerTeam-1 { 984 t.Fatalf("should now only have 4 team members, had %v instead", count) 985 } 986 987 if result := <-ss.Team().SaveMember(&model.TeamMember{TeamId: team.Id, UserId: newUserId}, maxUsersPerTeam); result.Err != nil { 988 t.Fatal("should've been able to save new member after deleting one", result.Err) 989 } else { 990 defer func(userId string) { 991 <-ss.Team().RemoveMember(team.Id, userId) 992 }(newUserId) 993 } 994 995 if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil { 996 t.Fatal(result.Err) 997 } else if count := result.Data.(int64); int(count) != maxUsersPerTeam { 998 t.Fatalf("should have 5 team members again, had %v instead", count) 999 } 1000 1001 // Deactivating a user should make them stop counting against max members 1002 user2 := store.Must(ss.User().Get(userIds[1])).(*model.User) 1003 user2.DeleteAt = 1234 1004 store.Must(ss.User().Update(user2, true)) 1005 1006 newUserId2 := store.Must(ss.User().Save(&model.User{ 1007 Username: model.NewId(), 1008 Email: MakeEmail(), 1009 })).(*model.User).Id 1010 if result := <-ss.Team().SaveMember(&model.TeamMember{TeamId: team.Id, UserId: newUserId2}, maxUsersPerTeam); result.Err != nil { 1011 t.Fatal("should've been able to save new member after deleting one", result.Err) 1012 } else { 1013 defer func(userId string) { 1014 <-ss.Team().RemoveMember(team.Id, userId) 1015 }(newUserId2) 1016 } 1017 } 1018 1019 func testGetTeamMember(t *testing.T, ss store.Store) { 1020 teamId1 := model.NewId() 1021 1022 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 1023 store.Must(ss.Team().SaveMember(m1, -1)) 1024 1025 if r := <-ss.Team().GetMember(m1.TeamId, m1.UserId); r.Err != nil { 1026 t.Fatal(r.Err) 1027 } else { 1028 rm1 := r.Data.(*model.TeamMember) 1029 1030 if rm1.TeamId != m1.TeamId { 1031 t.Fatal("bad team id") 1032 } 1033 1034 if rm1.UserId != m1.UserId { 1035 t.Fatal("bad user id") 1036 } 1037 } 1038 1039 if r := <-ss.Team().GetMember(m1.TeamId, ""); r.Err == nil { 1040 t.Fatal("empty user id - should have failed") 1041 } 1042 1043 if r := <-ss.Team().GetMember("", m1.UserId); r.Err == nil { 1044 t.Fatal("empty team id - should have failed") 1045 } 1046 1047 // Test with a custom team scheme. 1048 s2 := &model.Scheme{ 1049 Name: model.NewId(), 1050 DisplayName: model.NewId(), 1051 Description: model.NewId(), 1052 Scope: model.SCHEME_SCOPE_TEAM, 1053 } 1054 s2 = (<-ss.Scheme().Save(s2)).Data.(*model.Scheme) 1055 t.Log(s2) 1056 1057 t2 := store.Must(ss.Team().Save(&model.Team{ 1058 DisplayName: "DisplayName", 1059 Name: "z-z-z" + model.NewId() + "b", 1060 Type: model.TEAM_OPEN, 1061 SchemeId: &s2.Id, 1062 })).(*model.Team) 1063 1064 defer func() { 1065 <-ss.Team().PermanentDelete(t2.Id) 1066 }() 1067 1068 m2 := &model.TeamMember{TeamId: t2.Id, UserId: model.NewId(), SchemeUser: true} 1069 store.Must(ss.Team().SaveMember(m2, -1)) 1070 1071 r2 := <-ss.Team().GetMember(m2.TeamId, m2.UserId) 1072 require.Nil(t, r2.Err) 1073 m3 := r2.Data.(*model.TeamMember) 1074 t.Log(m3) 1075 1076 assert.Equal(t, s2.DefaultTeamUserRole, m3.Roles) 1077 } 1078 1079 func testGetTeamMembersByIds(t *testing.T, ss store.Store) { 1080 teamId1 := model.NewId() 1081 1082 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 1083 store.Must(ss.Team().SaveMember(m1, -1)) 1084 1085 if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{m1.UserId}); r.Err != nil { 1086 t.Fatal(r.Err) 1087 } else { 1088 rm1 := r.Data.([]*model.TeamMember)[0] 1089 1090 if rm1.TeamId != m1.TeamId { 1091 t.Fatal("bad team id") 1092 } 1093 1094 if rm1.UserId != m1.UserId { 1095 t.Fatal("bad user id") 1096 } 1097 } 1098 1099 m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 1100 store.Must(ss.Team().SaveMember(m2, -1)) 1101 1102 if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{m1.UserId, m2.UserId, model.NewId()}); r.Err != nil { 1103 t.Fatal(r.Err) 1104 } else { 1105 rm := r.Data.([]*model.TeamMember) 1106 1107 if len(rm) != 2 { 1108 t.Fatal("return wrong number of results") 1109 } 1110 } 1111 1112 if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{}); r.Err == nil { 1113 t.Fatal("empty user ids - should have failed") 1114 } 1115 } 1116 1117 func testTeamStoreMemberCount(t *testing.T, ss store.Store) { 1118 u1 := &model.User{} 1119 u1.Email = MakeEmail() 1120 store.Must(ss.User().Save(u1)) 1121 1122 u2 := &model.User{} 1123 u2.Email = MakeEmail() 1124 u2.DeleteAt = 1 1125 store.Must(ss.User().Save(u2)) 1126 1127 teamId1 := model.NewId() 1128 m1 := &model.TeamMember{TeamId: teamId1, UserId: u1.Id} 1129 store.Must(ss.Team().SaveMember(m1, -1)) 1130 1131 m2 := &model.TeamMember{TeamId: teamId1, UserId: u2.Id} 1132 store.Must(ss.Team().SaveMember(m2, -1)) 1133 1134 if result := <-ss.Team().GetTotalMemberCount(teamId1); result.Err != nil { 1135 t.Fatal(result.Err) 1136 } else { 1137 if result.Data.(int64) != 2 { 1138 t.Fatal("wrong count") 1139 } 1140 } 1141 1142 if result := <-ss.Team().GetActiveMemberCount(teamId1); result.Err != nil { 1143 t.Fatal(result.Err) 1144 } else { 1145 if result.Data.(int64) != 1 { 1146 t.Fatal("wrong count") 1147 } 1148 } 1149 1150 m3 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 1151 store.Must(ss.Team().SaveMember(m3, -1)) 1152 1153 if result := <-ss.Team().GetTotalMemberCount(teamId1); result.Err != nil { 1154 t.Fatal(result.Err) 1155 } else { 1156 if result.Data.(int64) != 2 { 1157 t.Fatal("wrong count") 1158 } 1159 } 1160 1161 if result := <-ss.Team().GetActiveMemberCount(teamId1); result.Err != nil { 1162 t.Fatal(result.Err) 1163 } else { 1164 if result.Data.(int64) != 1 { 1165 t.Fatal("wrong count") 1166 } 1167 } 1168 } 1169 1170 func testGetChannelUnreadsForAllTeams(t *testing.T, ss store.Store) { 1171 teamId1 := model.NewId() 1172 teamId2 := model.NewId() 1173 1174 uid := model.NewId() 1175 m1 := &model.TeamMember{TeamId: teamId1, UserId: uid} 1176 m2 := &model.TeamMember{TeamId: teamId2, UserId: uid} 1177 store.Must(ss.Team().SaveMember(m1, -1)) 1178 store.Must(ss.Team().SaveMember(m2, -1)) 1179 1180 c1 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 1181 store.Must(ss.Channel().Save(c1, -1)) 1182 c2 := &model.Channel{TeamId: m2.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 1183 store.Must(ss.Channel().Save(c2, -1)) 1184 1185 cm1 := &model.ChannelMember{ChannelId: c1.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 1186 store.Must(ss.Channel().SaveMember(cm1)) 1187 cm2 := &model.ChannelMember{ChannelId: c2.Id, UserId: m2.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 1188 store.Must(ss.Channel().SaveMember(cm2)) 1189 1190 if r1 := <-ss.Team().GetChannelUnreadsForAllTeams("", uid); r1.Err != nil { 1191 t.Fatal(r1.Err) 1192 } else { 1193 ms := r1.Data.([]*model.ChannelUnread) 1194 membersMap := make(map[string]bool) 1195 for i := range ms { 1196 id := ms[i].TeamId 1197 if _, ok := membersMap[id]; !ok { 1198 membersMap[id] = true 1199 } 1200 } 1201 if len(membersMap) != 2 { 1202 t.Fatal("Should be the unreads for all the teams") 1203 } 1204 1205 if ms[0].MsgCount != 10 { 1206 t.Fatal("subtraction failed") 1207 } 1208 } 1209 1210 if r2 := <-ss.Team().GetChannelUnreadsForAllTeams(teamId1, uid); r2.Err != nil { 1211 t.Fatal(r2.Err) 1212 } else { 1213 ms := r2.Data.([]*model.ChannelUnread) 1214 membersMap := make(map[string]bool) 1215 for i := range ms { 1216 id := ms[i].TeamId 1217 if _, ok := membersMap[id]; !ok { 1218 membersMap[id] = true 1219 } 1220 } 1221 1222 if len(membersMap) != 1 { 1223 t.Fatal("Should be the unreads for just one team") 1224 } 1225 1226 if ms[0].MsgCount != 10 { 1227 t.Fatal("subtraction failed") 1228 } 1229 } 1230 1231 if r1 := <-ss.Team().RemoveAllMembersByUser(uid); r1.Err != nil { 1232 t.Fatal(r1.Err) 1233 } 1234 } 1235 1236 func testGetChannelUnreadsForTeam(t *testing.T, ss store.Store) { 1237 teamId1 := model.NewId() 1238 1239 uid := model.NewId() 1240 m1 := &model.TeamMember{TeamId: teamId1, UserId: uid} 1241 store.Must(ss.Team().SaveMember(m1, -1)) 1242 1243 c1 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 1244 store.Must(ss.Channel().Save(c1, -1)) 1245 c2 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 1246 store.Must(ss.Channel().Save(c2, -1)) 1247 1248 cm1 := &model.ChannelMember{ChannelId: c1.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 1249 store.Must(ss.Channel().SaveMember(cm1)) 1250 cm2 := &model.ChannelMember{ChannelId: c2.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 1251 store.Must(ss.Channel().SaveMember(cm2)) 1252 1253 if r1 := <-ss.Team().GetChannelUnreadsForTeam(m1.TeamId, m1.UserId); r1.Err != nil { 1254 t.Fatal(r1.Err) 1255 } else { 1256 ms := r1.Data.([]*model.ChannelUnread) 1257 if len(ms) != 2 { 1258 t.Fatal("wrong length") 1259 } 1260 1261 if ms[0].MsgCount != 10 { 1262 t.Fatal("subtraction failed") 1263 } 1264 } 1265 } 1266 1267 func testUpdateLastTeamIconUpdate(t *testing.T, ss store.Store) { 1268 1269 // team icon initially updated a second ago 1270 lastTeamIconUpdateInitial := model.GetMillis() - 1000 1271 1272 o1 := &model.Team{} 1273 o1.DisplayName = "Display Name" 1274 o1.Name = "z-z-z" + model.NewId() + "b" 1275 o1.Email = MakeEmail() 1276 o1.Type = model.TEAM_OPEN 1277 o1.LastTeamIconUpdate = lastTeamIconUpdateInitial 1278 o1 = (<-ss.Team().Save(o1)).Data.(*model.Team) 1279 1280 curTime := model.GetMillis() 1281 1282 if err := (<-ss.Team().UpdateLastTeamIconUpdate(o1.Id, curTime)).Err; err != nil { 1283 t.Fatal(err) 1284 } 1285 1286 ro1 := (<-ss.Team().Get(o1.Id)).Data.(*model.Team) 1287 if ro1.LastTeamIconUpdate <= lastTeamIconUpdateInitial { 1288 t.Fatal("LastTeamIconUpdate not updated") 1289 } 1290 } 1291 1292 func testGetTeamsByScheme(t *testing.T, ss store.Store) { 1293 // Create some schemes. 1294 s1 := &model.Scheme{ 1295 DisplayName: model.NewId(), 1296 Name: model.NewId(), 1297 Description: model.NewId(), 1298 Scope: model.SCHEME_SCOPE_TEAM, 1299 } 1300 1301 s2 := &model.Scheme{ 1302 DisplayName: model.NewId(), 1303 Name: model.NewId(), 1304 Description: model.NewId(), 1305 Scope: model.SCHEME_SCOPE_TEAM, 1306 } 1307 1308 s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme) 1309 s2 = (<-ss.Scheme().Save(s2)).Data.(*model.Scheme) 1310 1311 // Create and save some teams. 1312 t1 := &model.Team{ 1313 Name: model.NewId(), 1314 DisplayName: model.NewId(), 1315 Email: MakeEmail(), 1316 Type: model.TEAM_OPEN, 1317 SchemeId: &s1.Id, 1318 } 1319 1320 t2 := &model.Team{ 1321 Name: model.NewId(), 1322 DisplayName: model.NewId(), 1323 Email: MakeEmail(), 1324 Type: model.TEAM_OPEN, 1325 SchemeId: &s1.Id, 1326 } 1327 1328 t3 := &model.Team{ 1329 Name: model.NewId(), 1330 DisplayName: model.NewId(), 1331 Email: MakeEmail(), 1332 Type: model.TEAM_OPEN, 1333 } 1334 1335 _ = (<-ss.Team().Save(t1)).Data.(*model.Team) 1336 _ = (<-ss.Team().Save(t2)).Data.(*model.Team) 1337 _ = (<-ss.Team().Save(t3)).Data.(*model.Team) 1338 1339 // Get the teams by a valid Scheme ID. 1340 res1 := <-ss.Team().GetTeamsByScheme(s1.Id, 0, 100) 1341 assert.Nil(t, res1.Err) 1342 d1 := res1.Data.([]*model.Team) 1343 assert.Len(t, d1, 2) 1344 1345 // Get the teams by a valid Scheme ID where there aren't any matching Teams. 1346 res2 := <-ss.Team().GetTeamsByScheme(s2.Id, 0, 100) 1347 assert.Nil(t, res2.Err) 1348 d2 := res2.Data.([]*model.Team) 1349 assert.Len(t, d2, 0) 1350 1351 // Get the teams by an invalid Scheme ID. 1352 res3 := <-ss.Team().GetTeamsByScheme(model.NewId(), 0, 100) 1353 assert.Nil(t, res3.Err) 1354 d3 := res3.Data.([]*model.Team) 1355 assert.Len(t, d3, 0) 1356 } 1357 1358 func testTeamStoreMigrateTeamMembers(t *testing.T, ss store.Store) { 1359 s1 := model.NewId() 1360 t1 := &model.Team{ 1361 DisplayName: "Name", 1362 Name: "z-z-z" + model.NewId() + "b", 1363 Email: MakeEmail(), 1364 Type: model.TEAM_OPEN, 1365 InviteId: model.NewId(), 1366 SchemeId: &s1, 1367 } 1368 t1 = store.Must(ss.Team().Save(t1)).(*model.Team) 1369 1370 tm1 := &model.TeamMember{ 1371 TeamId: t1.Id, 1372 UserId: model.NewId(), 1373 ExplicitRoles: "team_admin team_user", 1374 } 1375 tm2 := &model.TeamMember{ 1376 TeamId: t1.Id, 1377 UserId: model.NewId(), 1378 ExplicitRoles: "team_user", 1379 } 1380 tm3 := &model.TeamMember{ 1381 TeamId: t1.Id, 1382 UserId: model.NewId(), 1383 ExplicitRoles: "something_else", 1384 } 1385 1386 tm1 = (<-ss.Team().SaveMember(tm1, -1)).Data.(*model.TeamMember) 1387 tm2 = (<-ss.Team().SaveMember(tm2, -1)).Data.(*model.TeamMember) 1388 tm3 = (<-ss.Team().SaveMember(tm3, -1)).Data.(*model.TeamMember) 1389 1390 lastDoneTeamId := strings.Repeat("0", 26) 1391 lastDoneUserId := strings.Repeat("0", 26) 1392 1393 for { 1394 res := <-ss.Team().MigrateTeamMembers(lastDoneTeamId, lastDoneUserId) 1395 if assert.Nil(t, res.Err) { 1396 if res.Data == nil { 1397 break 1398 } 1399 data := res.Data.(map[string]string) 1400 lastDoneTeamId = data["TeamId"] 1401 lastDoneUserId = data["UserId"] 1402 } 1403 } 1404 1405 res1 := <-ss.Team().GetMember(tm1.TeamId, tm1.UserId) 1406 assert.Nil(t, res1.Err) 1407 tm1b := res1.Data.(*model.TeamMember) 1408 assert.Equal(t, "", tm1b.ExplicitRoles) 1409 assert.True(t, tm1b.SchemeUser) 1410 assert.True(t, tm1b.SchemeAdmin) 1411 1412 res2 := <-ss.Team().GetMember(tm2.TeamId, tm2.UserId) 1413 assert.Nil(t, res2.Err) 1414 tm2b := res2.Data.(*model.TeamMember) 1415 assert.Equal(t, "", tm2b.ExplicitRoles) 1416 assert.True(t, tm2b.SchemeUser) 1417 assert.False(t, tm2b.SchemeAdmin) 1418 1419 res3 := <-ss.Team().GetMember(tm3.TeamId, tm3.UserId) 1420 assert.Nil(t, res3.Err) 1421 tm3b := res3.Data.(*model.TeamMember) 1422 assert.Equal(t, "something_else", tm3b.ExplicitRoles) 1423 assert.False(t, tm3b.SchemeUser) 1424 assert.False(t, tm3b.SchemeAdmin) 1425 } 1426 1427 func testResetAllTeamSchemes(t *testing.T, ss store.Store) { 1428 s1 := &model.Scheme{ 1429 Name: model.NewId(), 1430 DisplayName: model.NewId(), 1431 Description: model.NewId(), 1432 Scope: model.SCHEME_SCOPE_TEAM, 1433 } 1434 s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme) 1435 1436 t1 := &model.Team{ 1437 Name: model.NewId(), 1438 DisplayName: model.NewId(), 1439 Email: MakeEmail(), 1440 Type: model.TEAM_OPEN, 1441 SchemeId: &s1.Id, 1442 } 1443 1444 t2 := &model.Team{ 1445 Name: model.NewId(), 1446 DisplayName: model.NewId(), 1447 Email: MakeEmail(), 1448 Type: model.TEAM_OPEN, 1449 SchemeId: &s1.Id, 1450 } 1451 1452 t1 = (<-ss.Team().Save(t1)).Data.(*model.Team) 1453 t2 = (<-ss.Team().Save(t2)).Data.(*model.Team) 1454 1455 assert.Equal(t, s1.Id, *t1.SchemeId) 1456 assert.Equal(t, s1.Id, *t2.SchemeId) 1457 1458 res := <-ss.Team().ResetAllTeamSchemes() 1459 assert.Nil(t, res.Err) 1460 1461 t1 = (<-ss.Team().Get(t1.Id)).Data.(*model.Team) 1462 t2 = (<-ss.Team().Get(t2.Id)).Data.(*model.Team) 1463 1464 assert.Equal(t, "", *t1.SchemeId) 1465 assert.Equal(t, "", *t2.SchemeId) 1466 } 1467 1468 func testTeamStoreClearAllCustomRoleAssignments(t *testing.T, ss store.Store) { 1469 m1 := &model.TeamMember{ 1470 TeamId: model.NewId(), 1471 UserId: model.NewId(), 1472 ExplicitRoles: "team_user team_admin team_post_all_public", 1473 } 1474 m2 := &model.TeamMember{ 1475 TeamId: model.NewId(), 1476 UserId: model.NewId(), 1477 ExplicitRoles: "team_user custom_role team_admin another_custom_role", 1478 } 1479 m3 := &model.TeamMember{ 1480 TeamId: model.NewId(), 1481 UserId: model.NewId(), 1482 ExplicitRoles: "team_user", 1483 } 1484 m4 := &model.TeamMember{ 1485 TeamId: model.NewId(), 1486 UserId: model.NewId(), 1487 ExplicitRoles: "custom_only", 1488 } 1489 1490 store.Must(ss.Team().SaveMember(m1, -1)) 1491 store.Must(ss.Team().SaveMember(m2, -1)) 1492 store.Must(ss.Team().SaveMember(m3, -1)) 1493 store.Must(ss.Team().SaveMember(m4, -1)) 1494 1495 require.Nil(t, (<-ss.Team().ClearAllCustomRoleAssignments()).Err) 1496 1497 r1 := <-ss.Team().GetMember(m1.TeamId, m1.UserId) 1498 require.Nil(t, r1.Err) 1499 assert.Equal(t, m1.ExplicitRoles, r1.Data.(*model.TeamMember).Roles) 1500 1501 r2 := <-ss.Team().GetMember(m2.TeamId, m2.UserId) 1502 require.Nil(t, r2.Err) 1503 assert.Equal(t, "team_user team_admin", r2.Data.(*model.TeamMember).Roles) 1504 1505 r3 := <-ss.Team().GetMember(m3.TeamId, m3.UserId) 1506 require.Nil(t, r3.Err) 1507 assert.Equal(t, m3.ExplicitRoles, r3.Data.(*model.TeamMember).Roles) 1508 1509 r4 := <-ss.Team().GetMember(m4.TeamId, m4.UserId) 1510 require.Nil(t, r4.Err) 1511 assert.Equal(t, "", r4.Data.(*model.TeamMember).Roles) 1512 } 1513 1514 func testTeamStoreAnalyticsGetTeamCountForScheme(t *testing.T, ss store.Store) { 1515 s1 := &model.Scheme{ 1516 DisplayName: model.NewId(), 1517 Name: model.NewId(), 1518 Description: model.NewId(), 1519 Scope: model.SCHEME_SCOPE_TEAM, 1520 } 1521 s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme) 1522 1523 count1 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64) 1524 assert.Equal(t, int64(0), count1) 1525 1526 t1 := &model.Team{ 1527 Name: model.NewId(), 1528 DisplayName: model.NewId(), 1529 Email: MakeEmail(), 1530 Type: model.TEAM_OPEN, 1531 SchemeId: &s1.Id, 1532 } 1533 _ = (<-ss.Team().Save(t1)).Data.(*model.Team) 1534 1535 count2 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64) 1536 assert.Equal(t, int64(1), count2) 1537 1538 t2 := &model.Team{ 1539 Name: model.NewId(), 1540 DisplayName: model.NewId(), 1541 Email: MakeEmail(), 1542 Type: model.TEAM_OPEN, 1543 SchemeId: &s1.Id, 1544 } 1545 _ = (<-ss.Team().Save(t2)).Data.(*model.Team) 1546 1547 count3 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64) 1548 assert.Equal(t, int64(2), count3) 1549 1550 t3 := &model.Team{ 1551 Name: model.NewId(), 1552 DisplayName: model.NewId(), 1553 Email: MakeEmail(), 1554 Type: model.TEAM_OPEN, 1555 } 1556 _ = (<-ss.Team().Save(t3)).Data.(*model.Team) 1557 1558 count4 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64) 1559 assert.Equal(t, int64(2), count4) 1560 1561 t4 := &model.Team{ 1562 Name: model.NewId(), 1563 DisplayName: model.NewId(), 1564 Email: MakeEmail(), 1565 Type: model.TEAM_OPEN, 1566 SchemeId: &s1.Id, 1567 DeleteAt: model.GetMillis(), 1568 } 1569 _ = (<-ss.Team().Save(t4)).Data.(*model.Team) 1570 1571 count5 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64) 1572 assert.Equal(t, int64(2), count5) 1573 } 1574 1575 func testTeamStoreGetAllForExportAfter(t *testing.T, ss store.Store) { 1576 t1 := model.Team{} 1577 t1.DisplayName = "Name" 1578 t1.Name = model.NewId() 1579 t1.Email = MakeEmail() 1580 t1.Type = model.TEAM_OPEN 1581 store.Must(ss.Team().Save(&t1)) 1582 1583 r1 := <-ss.Team().GetAllForExportAfter(10000, strings.Repeat("0", 26)) 1584 assert.Nil(t, r1.Err) 1585 d1 := r1.Data.([]*model.TeamForExport) 1586 1587 found := false 1588 for _, team := range d1 { 1589 if team.Id == t1.Id { 1590 found = true 1591 assert.Equal(t, t1.Id, team.Id) 1592 assert.Nil(t, team.SchemeId) 1593 assert.Equal(t, t1.Name, team.Name) 1594 } 1595 } 1596 assert.True(t, found) 1597 } 1598 1599 func testTeamStoreGetTeamMembersForExport(t *testing.T, ss store.Store) { 1600 t1 := model.Team{} 1601 t1.DisplayName = "Name" 1602 t1.Name = model.NewId() 1603 t1.Email = MakeEmail() 1604 t1.Type = model.TEAM_OPEN 1605 store.Must(ss.Team().Save(&t1)) 1606 1607 u1 := model.User{} 1608 u1.Email = MakeEmail() 1609 u1.Nickname = model.NewId() 1610 store.Must(ss.User().Save(&u1)) 1611 1612 u2 := model.User{} 1613 u2.Email = MakeEmail() 1614 u2.Nickname = model.NewId() 1615 store.Must(ss.User().Save(&u2)) 1616 1617 m1 := &model.TeamMember{TeamId: t1.Id, UserId: u1.Id} 1618 store.Must(ss.Team().SaveMember(m1, -1)) 1619 1620 m2 := &model.TeamMember{TeamId: t1.Id, UserId: u2.Id} 1621 store.Must(ss.Team().SaveMember(m2, -1)) 1622 1623 r1 := <-ss.Team().GetTeamMembersForExport(u1.Id) 1624 assert.Nil(t, r1.Err) 1625 1626 d1 := r1.Data.([]*model.TeamMemberForExport) 1627 assert.Len(t, d1, 1) 1628 1629 tmfe1 := d1[0] 1630 assert.Equal(t, t1.Id, tmfe1.TeamId) 1631 assert.Equal(t, u1.Id, tmfe1.UserId) 1632 assert.Equal(t, t1.Name, tmfe1.TeamName) 1633 }