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