github.com/crspeller/mattermost-server@v0.0.0-20190328001957-a200beb3d111/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/crspeller/mattermost-server/model" 15 "github.com/crspeller/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 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 397 t.Fatal(err) 398 } 399 400 o2 := model.Team{} 401 o2.DisplayName = "DisplayName" 402 o2.Name = "zz" + model.NewId() + "b" 403 o2.Email = MakeEmail() 404 o2.Type = model.TEAM_OPEN 405 406 if err := (<-ss.Team().Save(&o2)).Err; err != nil { 407 t.Fatal(err) 408 } 409 410 if r1 := <-ss.Team().GetByInviteId(o1.InviteId); r1.Err != nil { 411 t.Fatal(r1.Err) 412 } else { 413 if r1.Data.(*model.Team).ToJson() != o1.ToJson() { 414 t.Fatal("invalid returned team") 415 } 416 } 417 418 o2.InviteId = "" 419 <-ss.Team().Update(&o2) 420 421 if r1 := <-ss.Team().GetByInviteId(o2.Id); r1.Err != nil { 422 t.Fatal(r1.Err) 423 } else { 424 if r1.Data.(*model.Team).Id != o2.Id { 425 t.Fatal("invalid returned team") 426 } 427 } 428 429 if err := (<-ss.Team().GetByInviteId("")).Err; err == nil { 430 t.Fatal("Missing id should have failed") 431 } 432 } 433 434 func testTeamStoreByUserId(t *testing.T, ss store.Store) { 435 o1 := &model.Team{} 436 o1.DisplayName = "DisplayName" 437 o1.Name = "z-z-z" + model.NewId() + "b" 438 o1.Email = MakeEmail() 439 o1.Type = model.TEAM_OPEN 440 o1.InviteId = model.NewId() 441 o1 = store.Must(ss.Team().Save(o1)).(*model.Team) 442 443 m1 := &model.TeamMember{TeamId: o1.Id, UserId: model.NewId()} 444 store.Must(ss.Team().SaveMember(m1, -1)) 445 446 if r1 := <-ss.Team().GetTeamsByUserId(m1.UserId); r1.Err != nil { 447 t.Fatal(r1.Err) 448 } else { 449 teams := r1.Data.([]*model.Team) 450 if len(teams) == 0 { 451 t.Fatal("Should return a team") 452 } 453 454 if teams[0].Id != o1.Id { 455 t.Fatal("should be a member") 456 } 457 458 } 459 } 460 461 func testGetAllTeamListing(t *testing.T, ss store.Store) { 462 o1 := model.Team{} 463 o1.DisplayName = "DisplayName" 464 o1.Name = "z-z-z" + model.NewId() + "b" 465 o1.Email = MakeEmail() 466 o1.Type = model.TEAM_OPEN 467 o1.AllowOpenInvite = true 468 store.Must(ss.Team().Save(&o1)) 469 470 o2 := model.Team{} 471 o2.DisplayName = "DisplayName" 472 o2.Name = "zz" + model.NewId() + "b" 473 o2.Email = MakeEmail() 474 o2.Type = model.TEAM_OPEN 475 store.Must(ss.Team().Save(&o2)) 476 477 o3 := model.Team{} 478 o3.DisplayName = "DisplayName" 479 o3.Name = "z-z-z" + model.NewId() + "b" 480 o3.Email = MakeEmail() 481 o3.Type = model.TEAM_INVITE 482 o3.AllowOpenInvite = true 483 store.Must(ss.Team().Save(&o3)) 484 485 o4 := model.Team{} 486 o4.DisplayName = "DisplayName" 487 o4.Name = "zz" + model.NewId() + "b" 488 o4.Email = MakeEmail() 489 o4.Type = model.TEAM_INVITE 490 store.Must(ss.Team().Save(&o4)) 491 492 if r1 := <-ss.Team().GetAllTeamListing(); r1.Err != nil { 493 t.Fatal(r1.Err) 494 } else { 495 teams := r1.Data.([]*model.Team) 496 497 for _, team := range teams { 498 if !team.AllowOpenInvite { 499 t.Fatal("should have returned team with AllowOpenInvite as true") 500 } 501 } 502 503 if len(teams) == 0 { 504 t.Fatal("failed team listing") 505 } 506 } 507 } 508 509 func testGetAllTeamPageListing(t *testing.T, ss store.Store) { 510 o1 := model.Team{} 511 o1.DisplayName = "DisplayName" 512 o1.Name = "z-z-z" + model.NewId() + "b" 513 o1.Email = MakeEmail() 514 o1.Type = model.TEAM_OPEN 515 o1.AllowOpenInvite = true 516 store.Must(ss.Team().Save(&o1)) 517 518 o2 := model.Team{} 519 o2.DisplayName = "DisplayName" 520 o2.Name = "zz" + model.NewId() + "b" 521 o2.Email = MakeEmail() 522 o2.Type = model.TEAM_OPEN 523 o2.AllowOpenInvite = false 524 store.Must(ss.Team().Save(&o2)) 525 526 o3 := model.Team{} 527 o3.DisplayName = "DisplayName" 528 o3.Name = "z-z-z" + model.NewId() + "b" 529 o3.Email = MakeEmail() 530 o3.Type = model.TEAM_INVITE 531 o3.AllowOpenInvite = true 532 store.Must(ss.Team().Save(&o3)) 533 534 o4 := model.Team{} 535 o4.DisplayName = "DisplayName" 536 o4.Name = "zz" + model.NewId() + "b" 537 o4.Email = MakeEmail() 538 o4.Type = model.TEAM_INVITE 539 o4.AllowOpenInvite = false 540 store.Must(ss.Team().Save(&o4)) 541 542 if r1 := <-ss.Team().GetAllTeamPageListing(0, 10); r1.Err != nil { 543 t.Fatal(r1.Err) 544 } else { 545 teams := r1.Data.([]*model.Team) 546 547 for _, team := range teams { 548 if !team.AllowOpenInvite { 549 t.Fatal("should have returned team with AllowOpenInvite as true") 550 } 551 } 552 553 if len(teams) > 10 { 554 t.Fatal("should have returned max of 10 teams") 555 } 556 } 557 558 o5 := model.Team{} 559 o5.DisplayName = "DisplayName" 560 o5.Name = "z-z-z" + model.NewId() + "b" 561 o5.Email = MakeEmail() 562 o5.Type = model.TEAM_OPEN 563 o5.AllowOpenInvite = true 564 store.Must(ss.Team().Save(&o5)) 565 566 if r1 := <-ss.Team().GetAllTeamPageListing(0, 4); r1.Err != nil { 567 t.Fatal(r1.Err) 568 } else { 569 teams := r1.Data.([]*model.Team) 570 571 for _, team := range teams { 572 if !team.AllowOpenInvite { 573 t.Fatal("should have returned team with AllowOpenInvite as true") 574 } 575 } 576 577 if len(teams) > 4 { 578 t.Fatal("should have returned max of 4 teams") 579 } 580 } 581 582 if r1 := <-ss.Team().GetAllTeamPageListing(1, 1); r1.Err != nil { 583 t.Fatal(r1.Err) 584 } else { 585 teams := r1.Data.([]*model.Team) 586 587 for _, team := range teams { 588 if !team.AllowOpenInvite { 589 t.Fatal("should have returned team with AllowOpenInvite as true") 590 } 591 } 592 593 if len(teams) > 1 { 594 t.Fatal("should have returned max of 1 team") 595 } 596 } 597 } 598 599 func testGetAllPrivateTeamListing(t *testing.T, ss store.Store) { 600 o1 := model.Team{} 601 o1.DisplayName = "DisplayName" 602 o1.Name = "z-z-z" + model.NewId() + "b" 603 o1.Email = MakeEmail() 604 o1.Type = model.TEAM_OPEN 605 o1.AllowOpenInvite = true 606 store.Must(ss.Team().Save(&o1)) 607 608 o2 := model.Team{} 609 o2.DisplayName = "DisplayName" 610 o2.Name = "zz" + model.NewId() + "b" 611 o2.Email = MakeEmail() 612 o2.Type = model.TEAM_OPEN 613 store.Must(ss.Team().Save(&o2)) 614 615 o3 := model.Team{} 616 o3.DisplayName = "DisplayName" 617 o3.Name = "z-z-z" + model.NewId() + "b" 618 o3.Email = MakeEmail() 619 o3.Type = model.TEAM_INVITE 620 o3.AllowOpenInvite = true 621 store.Must(ss.Team().Save(&o3)) 622 623 o4 := model.Team{} 624 o4.DisplayName = "DisplayName" 625 o4.Name = "zz" + model.NewId() + "b" 626 o4.Email = MakeEmail() 627 o4.Type = model.TEAM_INVITE 628 store.Must(ss.Team().Save(&o4)) 629 630 if r1 := <-ss.Team().GetAllPrivateTeamListing(); r1.Err != nil { 631 t.Fatal(r1.Err) 632 } else { 633 teams := r1.Data.([]*model.Team) 634 635 for _, team := range teams { 636 if team.AllowOpenInvite { 637 t.Fatal("should have returned team with AllowOpenInvite as false") 638 } 639 } 640 641 if len(teams) == 0 { 642 t.Fatal("failed team listing") 643 } 644 } 645 } 646 647 func testGetAllPrivateTeamPageListing(t *testing.T, ss store.Store) { 648 o1 := model.Team{} 649 o1.DisplayName = "DisplayName" 650 o1.Name = "z-z-z" + model.NewId() + "b" 651 o1.Email = MakeEmail() 652 o1.Type = model.TEAM_OPEN 653 o1.AllowOpenInvite = true 654 store.Must(ss.Team().Save(&o1)) 655 656 o2 := model.Team{} 657 o2.DisplayName = "DisplayName" 658 o2.Name = "zz" + model.NewId() + "b" 659 o2.Email = MakeEmail() 660 o2.Type = model.TEAM_OPEN 661 o2.AllowOpenInvite = false 662 store.Must(ss.Team().Save(&o2)) 663 664 o3 := model.Team{} 665 o3.DisplayName = "DisplayName" 666 o3.Name = "z-z-z" + model.NewId() + "b" 667 o3.Email = MakeEmail() 668 o3.Type = model.TEAM_INVITE 669 o3.AllowOpenInvite = true 670 store.Must(ss.Team().Save(&o3)) 671 672 o4 := model.Team{} 673 o4.DisplayName = "DisplayName" 674 o4.Name = "zz" + model.NewId() + "b" 675 o4.Email = MakeEmail() 676 o4.Type = model.TEAM_INVITE 677 o4.AllowOpenInvite = false 678 store.Must(ss.Team().Save(&o4)) 679 680 if r1 := <-ss.Team().GetAllPrivateTeamPageListing(0, 10); r1.Err != nil { 681 t.Fatal(r1.Err) 682 } else { 683 teams := r1.Data.([]*model.Team) 684 685 for _, team := range teams { 686 if team.AllowOpenInvite { 687 t.Fatal("should have returned team with AllowOpenInvite as false") 688 } 689 } 690 691 if len(teams) > 10 { 692 t.Fatal("should have returned max of 10 teams") 693 } 694 } 695 696 o5 := model.Team{} 697 o5.DisplayName = "DisplayName" 698 o5.Name = "z-z-z" + model.NewId() + "b" 699 o5.Email = MakeEmail() 700 o5.Type = model.TEAM_OPEN 701 o5.AllowOpenInvite = true 702 store.Must(ss.Team().Save(&o5)) 703 704 if r1 := <-ss.Team().GetAllPrivateTeamPageListing(0, 4); r1.Err != nil { 705 t.Fatal(r1.Err) 706 } else { 707 teams := r1.Data.([]*model.Team) 708 709 for _, team := range teams { 710 if team.AllowOpenInvite { 711 t.Fatal("should have returned team with AllowOpenInvite as false") 712 } 713 } 714 715 if len(teams) > 4 { 716 t.Fatal("should have returned max of 4 teams") 717 } 718 } 719 720 if r1 := <-ss.Team().GetAllPrivateTeamPageListing(1, 1); r1.Err != nil { 721 t.Fatal(r1.Err) 722 } else { 723 teams := r1.Data.([]*model.Team) 724 725 for _, team := range teams { 726 if team.AllowOpenInvite { 727 t.Fatal("should have returned team with AllowOpenInvite as false") 728 } 729 } 730 731 if len(teams) > 1 { 732 t.Fatal("should have returned max of 1 team") 733 } 734 } 735 } 736 737 func testDelete(t *testing.T, ss store.Store) { 738 o1 := model.Team{} 739 o1.DisplayName = "DisplayName" 740 o1.Name = "z-z-z" + model.NewId() + "b" 741 o1.Email = MakeEmail() 742 o1.Type = model.TEAM_OPEN 743 o1.AllowOpenInvite = true 744 store.Must(ss.Team().Save(&o1)) 745 746 o2 := model.Team{} 747 o2.DisplayName = "DisplayName" 748 o2.Name = "zz" + model.NewId() + "b" 749 o2.Email = MakeEmail() 750 o2.Type = model.TEAM_OPEN 751 store.Must(ss.Team().Save(&o2)) 752 753 if r1 := <-ss.Team().PermanentDelete(o1.Id); r1.Err != nil { 754 t.Fatal(r1.Err) 755 } 756 } 757 758 func testTeamCount(t *testing.T, ss store.Store) { 759 o1 := model.Team{} 760 o1.DisplayName = "DisplayName" 761 o1.Name = "z-z-z" + model.NewId() + "b" 762 o1.Email = MakeEmail() 763 o1.Type = model.TEAM_OPEN 764 o1.AllowOpenInvite = true 765 store.Must(ss.Team().Save(&o1)) 766 767 if r1 := <-ss.Team().AnalyticsTeamCount(); r1.Err != nil { 768 t.Fatal(r1.Err) 769 } else { 770 if r1.Data.(int64) == 0 { 771 t.Fatal("should be at least 1 team") 772 } 773 } 774 } 775 776 func testTeamMembers(t *testing.T, ss store.Store) { 777 teamId1 := model.NewId() 778 teamId2 := model.NewId() 779 780 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 781 m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 782 m3 := &model.TeamMember{TeamId: teamId2, UserId: model.NewId()} 783 784 if r1 := <-ss.Team().SaveMember(m1, -1); r1.Err != nil { 785 t.Fatal(r1.Err) 786 } 787 788 store.Must(ss.Team().SaveMember(m2, -1)) 789 store.Must(ss.Team().SaveMember(m3, -1)) 790 791 if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil { 792 t.Fatal(r1.Err) 793 } else { 794 ms := r1.Data.([]*model.TeamMember) 795 require.Len(t, ms, 2) 796 } 797 798 if r1 := <-ss.Team().GetMembers(teamId2, 0, 100); r1.Err != nil { 799 t.Fatal(r1.Err) 800 } else { 801 ms := r1.Data.([]*model.TeamMember) 802 803 require.Len(t, ms, 1) 804 require.Equal(t, m3.UserId, ms[0].UserId) 805 } 806 807 if r1 := <-ss.Team().GetTeamsForUser(m1.UserId); 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, m1.TeamId, ms[0].TeamId) 814 } 815 816 if r1 := <-ss.Team().RemoveMember(teamId1, m1.UserId); r1.Err != nil { 817 t.Fatal(r1.Err) 818 } 819 820 if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil { 821 t.Fatal(r1.Err) 822 } else { 823 ms := r1.Data.([]*model.TeamMember) 824 825 require.Len(t, ms, 1) 826 require.Equal(t, m2.UserId, ms[0].UserId) 827 } 828 829 store.Must(ss.Team().SaveMember(m1, -1)) 830 831 if r1 := <-ss.Team().RemoveAllMembersByTeam(teamId1); r1.Err != nil { 832 t.Fatal(r1.Err) 833 } 834 835 if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil { 836 t.Fatal(r1.Err) 837 } else { 838 ms := r1.Data.([]*model.TeamMember) 839 840 require.Len(t, ms, 0) 841 } 842 843 uid := model.NewId() 844 m4 := &model.TeamMember{TeamId: teamId1, UserId: uid} 845 m5 := &model.TeamMember{TeamId: teamId2, UserId: uid} 846 store.Must(ss.Team().SaveMember(m4, -1)) 847 store.Must(ss.Team().SaveMember(m5, -1)) 848 849 if r1 := <-ss.Team().GetTeamsForUser(uid); r1.Err != nil { 850 t.Fatal(r1.Err) 851 } else { 852 ms := r1.Data.([]*model.TeamMember) 853 854 require.Len(t, ms, 2) 855 } 856 857 if r1 := <-ss.Team().RemoveAllMembersByUser(uid); r1.Err != nil { 858 t.Fatal(r1.Err) 859 } 860 861 if r1 := <-ss.Team().GetTeamsForUser(m1.UserId); r1.Err != nil { 862 t.Fatal(r1.Err) 863 } else { 864 ms := r1.Data.([]*model.TeamMember) 865 866 require.Len(t, ms, 0) 867 } 868 } 869 870 func testTeamMembersWithPagination(t *testing.T, ss store.Store) { 871 teamId1 := model.NewId() 872 teamId2 := model.NewId() 873 874 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 875 m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 876 m3 := &model.TeamMember{TeamId: teamId2, UserId: model.NewId()} 877 878 r1 := <-ss.Team().SaveMember(m1, -1) 879 require.Nil(t, r1.Err) 880 881 store.Must(ss.Team().SaveMember(m2, -1)) 882 store.Must(ss.Team().SaveMember(m3, -1)) 883 884 r1 = <-ss.Team().GetTeamsForUserWithPagination(m1.UserId, 0, 1) 885 require.Nil(t, r1.Err) 886 ms := r1.Data.([]*model.TeamMember) 887 888 require.Len(t, ms, 1) 889 require.Equal(t, m1.TeamId, ms[0].TeamId) 890 891 r1 = <-ss.Team().RemoveMember(teamId1, m1.UserId) 892 require.Nil(t, r1.Err) 893 894 r1 = <-ss.Team().GetMembers(teamId1, 0, 100) 895 require.Nil(t, r1.Err) 896 897 ms = r1.Data.([]*model.TeamMember) 898 require.Len(t, ms, 1) 899 require.Equal(t, m2.UserId, ms[0].UserId) 900 901 store.Must(ss.Team().SaveMember(m1, -1)) 902 903 r1 = <-ss.Team().RemoveAllMembersByTeam(teamId1) 904 require.Nil(t, r1.Err) 905 906 uid := model.NewId() 907 m4 := &model.TeamMember{TeamId: teamId1, UserId: uid} 908 m5 := &model.TeamMember{TeamId: teamId2, UserId: uid} 909 store.Must(ss.Team().SaveMember(m4, -1)) 910 store.Must(ss.Team().SaveMember(m5, -1)) 911 912 r1 = <-ss.Team().GetTeamsForUserWithPagination(uid, 0, 1) 913 require.Nil(t, r1.Err) 914 ms = r1.Data.([]*model.TeamMember) 915 require.Len(t, ms, 1) 916 917 r1 = <-ss.Team().RemoveAllMembersByUser(uid) 918 require.Nil(t, r1.Err) 919 920 r1 = <-ss.Team().GetTeamsForUserWithPagination(uid, 1, 1) 921 require.Nil(t, r1.Err) 922 ms = r1.Data.([]*model.TeamMember) 923 require.Len(t, ms, 0) 924 } 925 926 func testSaveTeamMemberMaxMembers(t *testing.T, ss store.Store) { 927 maxUsersPerTeam := 5 928 929 team := store.Must(ss.Team().Save(&model.Team{ 930 DisplayName: "DisplayName", 931 Name: "z-z-z" + model.NewId() + "b", 932 Type: model.TEAM_OPEN, 933 })).(*model.Team) 934 defer func() { 935 <-ss.Team().PermanentDelete(team.Id) 936 }() 937 938 userIds := make([]string, maxUsersPerTeam) 939 940 for i := 0; i < maxUsersPerTeam; i++ { 941 userIds[i] = store.Must(ss.User().Save(&model.User{ 942 Username: model.NewId(), 943 Email: MakeEmail(), 944 })).(*model.User).Id 945 946 defer func(userId string) { 947 <-ss.User().PermanentDelete(userId) 948 }(userIds[i]) 949 950 store.Must(ss.Team().SaveMember(&model.TeamMember{ 951 TeamId: team.Id, 952 UserId: userIds[i], 953 }, maxUsersPerTeam)) 954 955 defer func(userId string) { 956 <-ss.Team().RemoveMember(team.Id, userId) 957 }(userIds[i]) 958 } 959 960 if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil { 961 t.Fatal(result.Err) 962 } else if count := result.Data.(int64); int(count) != maxUsersPerTeam { 963 t.Fatalf("should start with 5 team members, had %v instead", count) 964 } 965 966 newUserId := store.Must(ss.User().Save(&model.User{ 967 Username: model.NewId(), 968 Email: MakeEmail(), 969 })).(*model.User).Id 970 defer func() { 971 <-ss.User().PermanentDelete(newUserId) 972 }() 973 974 if result := <-ss.Team().SaveMember(&model.TeamMember{ 975 TeamId: team.Id, 976 UserId: newUserId, 977 }, maxUsersPerTeam); result.Err == nil { 978 t.Fatal("shouldn't be able to save member when at maximum members per team") 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 { 984 t.Fatalf("should still have 5 team members, had %v instead", count) 985 } 986 987 // Leaving the team from the UI sets DeleteAt instead of using TeamStore.RemoveMember 988 store.Must(ss.Team().UpdateMember(&model.TeamMember{ 989 TeamId: team.Id, 990 UserId: userIds[0], 991 DeleteAt: 1234, 992 })) 993 994 if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil { 995 t.Fatal(result.Err) 996 } else if count := result.Data.(int64); int(count) != maxUsersPerTeam-1 { 997 t.Fatalf("should now only have 4 team members, had %v instead", count) 998 } 999 1000 if result := <-ss.Team().SaveMember(&model.TeamMember{TeamId: team.Id, UserId: newUserId}, maxUsersPerTeam); result.Err != nil { 1001 t.Fatal("should've been able to save new member after deleting one", result.Err) 1002 } else { 1003 defer func(userId string) { 1004 <-ss.Team().RemoveMember(team.Id, userId) 1005 }(newUserId) 1006 } 1007 1008 if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil { 1009 t.Fatal(result.Err) 1010 } else if count := result.Data.(int64); int(count) != maxUsersPerTeam { 1011 t.Fatalf("should have 5 team members again, had %v instead", count) 1012 } 1013 1014 // Deactivating a user should make them stop counting against max members 1015 user2 := store.Must(ss.User().Get(userIds[1])).(*model.User) 1016 user2.DeleteAt = 1234 1017 store.Must(ss.User().Update(user2, true)) 1018 1019 newUserId2 := store.Must(ss.User().Save(&model.User{ 1020 Username: model.NewId(), 1021 Email: MakeEmail(), 1022 })).(*model.User).Id 1023 if result := <-ss.Team().SaveMember(&model.TeamMember{TeamId: team.Id, UserId: newUserId2}, maxUsersPerTeam); result.Err != nil { 1024 t.Fatal("should've been able to save new member after deleting one", result.Err) 1025 } else { 1026 defer func(userId string) { 1027 <-ss.Team().RemoveMember(team.Id, userId) 1028 }(newUserId2) 1029 } 1030 } 1031 1032 func testGetTeamMember(t *testing.T, ss store.Store) { 1033 teamId1 := model.NewId() 1034 1035 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 1036 store.Must(ss.Team().SaveMember(m1, -1)) 1037 1038 if r := <-ss.Team().GetMember(m1.TeamId, m1.UserId); r.Err != nil { 1039 t.Fatal(r.Err) 1040 } else { 1041 rm1 := r.Data.(*model.TeamMember) 1042 1043 if rm1.TeamId != m1.TeamId { 1044 t.Fatal("bad team id") 1045 } 1046 1047 if rm1.UserId != m1.UserId { 1048 t.Fatal("bad user id") 1049 } 1050 } 1051 1052 if r := <-ss.Team().GetMember(m1.TeamId, ""); r.Err == nil { 1053 t.Fatal("empty user id - should have failed") 1054 } 1055 1056 if r := <-ss.Team().GetMember("", m1.UserId); r.Err == nil { 1057 t.Fatal("empty team id - should have failed") 1058 } 1059 1060 // Test with a custom team scheme. 1061 s2 := &model.Scheme{ 1062 Name: model.NewId(), 1063 DisplayName: model.NewId(), 1064 Description: model.NewId(), 1065 Scope: model.SCHEME_SCOPE_TEAM, 1066 } 1067 s2 = (<-ss.Scheme().Save(s2)).Data.(*model.Scheme) 1068 t.Log(s2) 1069 1070 t2 := store.Must(ss.Team().Save(&model.Team{ 1071 DisplayName: "DisplayName", 1072 Name: "z-z-z" + model.NewId() + "b", 1073 Type: model.TEAM_OPEN, 1074 SchemeId: &s2.Id, 1075 })).(*model.Team) 1076 1077 defer func() { 1078 <-ss.Team().PermanentDelete(t2.Id) 1079 }() 1080 1081 m2 := &model.TeamMember{TeamId: t2.Id, UserId: model.NewId(), SchemeUser: true} 1082 store.Must(ss.Team().SaveMember(m2, -1)) 1083 1084 r2 := <-ss.Team().GetMember(m2.TeamId, m2.UserId) 1085 require.Nil(t, r2.Err) 1086 m3 := r2.Data.(*model.TeamMember) 1087 t.Log(m3) 1088 1089 assert.Equal(t, s2.DefaultTeamUserRole, m3.Roles) 1090 } 1091 1092 func testGetTeamMembersByIds(t *testing.T, ss store.Store) { 1093 teamId1 := model.NewId() 1094 1095 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 1096 store.Must(ss.Team().SaveMember(m1, -1)) 1097 1098 if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{m1.UserId}); r.Err != nil { 1099 t.Fatal(r.Err) 1100 } else { 1101 rm1 := r.Data.([]*model.TeamMember)[0] 1102 1103 if rm1.TeamId != m1.TeamId { 1104 t.Fatal("bad team id") 1105 } 1106 1107 if rm1.UserId != m1.UserId { 1108 t.Fatal("bad user id") 1109 } 1110 } 1111 1112 m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 1113 store.Must(ss.Team().SaveMember(m2, -1)) 1114 1115 if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{m1.UserId, m2.UserId, model.NewId()}); r.Err != nil { 1116 t.Fatal(r.Err) 1117 } else { 1118 rm := r.Data.([]*model.TeamMember) 1119 1120 if len(rm) != 2 { 1121 t.Fatal("return wrong number of results") 1122 } 1123 } 1124 1125 if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{}); r.Err == nil { 1126 t.Fatal("empty user ids - should have failed") 1127 } 1128 } 1129 1130 func testTeamStoreMemberCount(t *testing.T, ss store.Store) { 1131 u1 := &model.User{} 1132 u1.Email = MakeEmail() 1133 store.Must(ss.User().Save(u1)) 1134 1135 u2 := &model.User{} 1136 u2.Email = MakeEmail() 1137 u2.DeleteAt = 1 1138 store.Must(ss.User().Save(u2)) 1139 1140 teamId1 := model.NewId() 1141 m1 := &model.TeamMember{TeamId: teamId1, UserId: u1.Id} 1142 store.Must(ss.Team().SaveMember(m1, -1)) 1143 1144 m2 := &model.TeamMember{TeamId: teamId1, UserId: u2.Id} 1145 store.Must(ss.Team().SaveMember(m2, -1)) 1146 1147 if result := <-ss.Team().GetTotalMemberCount(teamId1); result.Err != nil { 1148 t.Fatal(result.Err) 1149 } else { 1150 if result.Data.(int64) != 2 { 1151 t.Fatal("wrong count") 1152 } 1153 } 1154 1155 if result := <-ss.Team().GetActiveMemberCount(teamId1); result.Err != nil { 1156 t.Fatal(result.Err) 1157 } else { 1158 if result.Data.(int64) != 1 { 1159 t.Fatal("wrong count") 1160 } 1161 } 1162 1163 m3 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 1164 store.Must(ss.Team().SaveMember(m3, -1)) 1165 1166 if result := <-ss.Team().GetTotalMemberCount(teamId1); result.Err != nil { 1167 t.Fatal(result.Err) 1168 } else { 1169 if result.Data.(int64) != 2 { 1170 t.Fatal("wrong count") 1171 } 1172 } 1173 1174 if result := <-ss.Team().GetActiveMemberCount(teamId1); result.Err != nil { 1175 t.Fatal(result.Err) 1176 } else { 1177 if result.Data.(int64) != 1 { 1178 t.Fatal("wrong count") 1179 } 1180 } 1181 } 1182 1183 func testGetChannelUnreadsForAllTeams(t *testing.T, ss store.Store) { 1184 teamId1 := model.NewId() 1185 teamId2 := model.NewId() 1186 1187 uid := model.NewId() 1188 m1 := &model.TeamMember{TeamId: teamId1, UserId: uid} 1189 m2 := &model.TeamMember{TeamId: teamId2, UserId: uid} 1190 store.Must(ss.Team().SaveMember(m1, -1)) 1191 store.Must(ss.Team().SaveMember(m2, -1)) 1192 1193 c1 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 1194 store.Must(ss.Channel().Save(c1, -1)) 1195 c2 := &model.Channel{TeamId: m2.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 1196 store.Must(ss.Channel().Save(c2, -1)) 1197 1198 cm1 := &model.ChannelMember{ChannelId: c1.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 1199 store.Must(ss.Channel().SaveMember(cm1)) 1200 cm2 := &model.ChannelMember{ChannelId: c2.Id, UserId: m2.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 1201 store.Must(ss.Channel().SaveMember(cm2)) 1202 1203 if r1 := <-ss.Team().GetChannelUnreadsForAllTeams("", uid); r1.Err != nil { 1204 t.Fatal(r1.Err) 1205 } else { 1206 ms := r1.Data.([]*model.ChannelUnread) 1207 membersMap := make(map[string]bool) 1208 for i := range ms { 1209 id := ms[i].TeamId 1210 if _, ok := membersMap[id]; !ok { 1211 membersMap[id] = true 1212 } 1213 } 1214 if len(membersMap) != 2 { 1215 t.Fatal("Should be the unreads for all the teams") 1216 } 1217 1218 if ms[0].MsgCount != 10 { 1219 t.Fatal("subtraction failed") 1220 } 1221 } 1222 1223 if r2 := <-ss.Team().GetChannelUnreadsForAllTeams(teamId1, uid); r2.Err != nil { 1224 t.Fatal(r2.Err) 1225 } else { 1226 ms := r2.Data.([]*model.ChannelUnread) 1227 membersMap := make(map[string]bool) 1228 for i := range ms { 1229 id := ms[i].TeamId 1230 if _, ok := membersMap[id]; !ok { 1231 membersMap[id] = true 1232 } 1233 } 1234 1235 if len(membersMap) != 1 { 1236 t.Fatal("Should be the unreads for just one team") 1237 } 1238 1239 if ms[0].MsgCount != 10 { 1240 t.Fatal("subtraction failed") 1241 } 1242 } 1243 1244 if r1 := <-ss.Team().RemoveAllMembersByUser(uid); r1.Err != nil { 1245 t.Fatal(r1.Err) 1246 } 1247 } 1248 1249 func testGetChannelUnreadsForTeam(t *testing.T, ss store.Store) { 1250 teamId1 := model.NewId() 1251 1252 uid := model.NewId() 1253 m1 := &model.TeamMember{TeamId: teamId1, UserId: uid} 1254 store.Must(ss.Team().SaveMember(m1, -1)) 1255 1256 c1 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 1257 store.Must(ss.Channel().Save(c1, -1)) 1258 c2 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 1259 store.Must(ss.Channel().Save(c2, -1)) 1260 1261 cm1 := &model.ChannelMember{ChannelId: c1.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 1262 store.Must(ss.Channel().SaveMember(cm1)) 1263 cm2 := &model.ChannelMember{ChannelId: c2.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 1264 store.Must(ss.Channel().SaveMember(cm2)) 1265 1266 if r1 := <-ss.Team().GetChannelUnreadsForTeam(m1.TeamId, m1.UserId); r1.Err != nil { 1267 t.Fatal(r1.Err) 1268 } else { 1269 ms := r1.Data.([]*model.ChannelUnread) 1270 if len(ms) != 2 { 1271 t.Fatal("wrong length") 1272 } 1273 1274 if ms[0].MsgCount != 10 { 1275 t.Fatal("subtraction failed") 1276 } 1277 } 1278 } 1279 1280 func testUpdateLastTeamIconUpdate(t *testing.T, ss store.Store) { 1281 1282 // team icon initially updated a second ago 1283 lastTeamIconUpdateInitial := model.GetMillis() - 1000 1284 1285 o1 := &model.Team{} 1286 o1.DisplayName = "Display Name" 1287 o1.Name = "z-z-z" + model.NewId() + "b" 1288 o1.Email = MakeEmail() 1289 o1.Type = model.TEAM_OPEN 1290 o1.LastTeamIconUpdate = lastTeamIconUpdateInitial 1291 o1 = (<-ss.Team().Save(o1)).Data.(*model.Team) 1292 1293 curTime := model.GetMillis() 1294 1295 if err := (<-ss.Team().UpdateLastTeamIconUpdate(o1.Id, curTime)).Err; err != nil { 1296 t.Fatal(err) 1297 } 1298 1299 ro1 := (<-ss.Team().Get(o1.Id)).Data.(*model.Team) 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 _ = (<-ss.Team().Save(t1)).Data.(*model.Team) 1349 _ = (<-ss.Team().Save(t2)).Data.(*model.Team) 1350 _ = (<-ss.Team().Save(t3)).Data.(*model.Team) 1351 1352 // Get the teams by a valid Scheme ID. 1353 res1 := <-ss.Team().GetTeamsByScheme(s1.Id, 0, 100) 1354 assert.Nil(t, res1.Err) 1355 d1 := res1.Data.([]*model.Team) 1356 assert.Len(t, d1, 2) 1357 1358 // Get the teams by a valid Scheme ID where there aren't any matching Teams. 1359 res2 := <-ss.Team().GetTeamsByScheme(s2.Id, 0, 100) 1360 assert.Nil(t, res2.Err) 1361 d2 := res2.Data.([]*model.Team) 1362 assert.Len(t, d2, 0) 1363 1364 // Get the teams by an invalid Scheme ID. 1365 res3 := <-ss.Team().GetTeamsByScheme(model.NewId(), 0, 100) 1366 assert.Nil(t, res3.Err) 1367 d3 := res3.Data.([]*model.Team) 1368 assert.Len(t, d3, 0) 1369 } 1370 1371 func testTeamStoreMigrateTeamMembers(t *testing.T, ss store.Store) { 1372 s1 := model.NewId() 1373 t1 := &model.Team{ 1374 DisplayName: "Name", 1375 Name: "z-z-z" + model.NewId() + "b", 1376 Email: MakeEmail(), 1377 Type: model.TEAM_OPEN, 1378 InviteId: model.NewId(), 1379 SchemeId: &s1, 1380 } 1381 t1 = store.Must(ss.Team().Save(t1)).(*model.Team) 1382 1383 tm1 := &model.TeamMember{ 1384 TeamId: t1.Id, 1385 UserId: model.NewId(), 1386 ExplicitRoles: "team_admin team_user", 1387 } 1388 tm2 := &model.TeamMember{ 1389 TeamId: t1.Id, 1390 UserId: model.NewId(), 1391 ExplicitRoles: "team_user", 1392 } 1393 tm3 := &model.TeamMember{ 1394 TeamId: t1.Id, 1395 UserId: model.NewId(), 1396 ExplicitRoles: "something_else", 1397 } 1398 1399 tm1 = (<-ss.Team().SaveMember(tm1, -1)).Data.(*model.TeamMember) 1400 tm2 = (<-ss.Team().SaveMember(tm2, -1)).Data.(*model.TeamMember) 1401 tm3 = (<-ss.Team().SaveMember(tm3, -1)).Data.(*model.TeamMember) 1402 1403 lastDoneTeamId := strings.Repeat("0", 26) 1404 lastDoneUserId := strings.Repeat("0", 26) 1405 1406 for { 1407 res := <-ss.Team().MigrateTeamMembers(lastDoneTeamId, lastDoneUserId) 1408 if assert.Nil(t, res.Err) { 1409 if res.Data == nil { 1410 break 1411 } 1412 data := res.Data.(map[string]string) 1413 lastDoneTeamId = data["TeamId"] 1414 lastDoneUserId = data["UserId"] 1415 } 1416 } 1417 1418 res1 := <-ss.Team().GetMember(tm1.TeamId, tm1.UserId) 1419 assert.Nil(t, res1.Err) 1420 tm1b := res1.Data.(*model.TeamMember) 1421 assert.Equal(t, "", tm1b.ExplicitRoles) 1422 assert.True(t, tm1b.SchemeUser) 1423 assert.True(t, tm1b.SchemeAdmin) 1424 1425 res2 := <-ss.Team().GetMember(tm2.TeamId, tm2.UserId) 1426 assert.Nil(t, res2.Err) 1427 tm2b := res2.Data.(*model.TeamMember) 1428 assert.Equal(t, "", tm2b.ExplicitRoles) 1429 assert.True(t, tm2b.SchemeUser) 1430 assert.False(t, tm2b.SchemeAdmin) 1431 1432 res3 := <-ss.Team().GetMember(tm3.TeamId, tm3.UserId) 1433 assert.Nil(t, res3.Err) 1434 tm3b := res3.Data.(*model.TeamMember) 1435 assert.Equal(t, "something_else", tm3b.ExplicitRoles) 1436 assert.False(t, tm3b.SchemeUser) 1437 assert.False(t, tm3b.SchemeAdmin) 1438 } 1439 1440 func testResetAllTeamSchemes(t *testing.T, ss store.Store) { 1441 s1 := &model.Scheme{ 1442 Name: model.NewId(), 1443 DisplayName: model.NewId(), 1444 Description: model.NewId(), 1445 Scope: model.SCHEME_SCOPE_TEAM, 1446 } 1447 s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme) 1448 1449 t1 := &model.Team{ 1450 Name: model.NewId(), 1451 DisplayName: model.NewId(), 1452 Email: MakeEmail(), 1453 Type: model.TEAM_OPEN, 1454 SchemeId: &s1.Id, 1455 } 1456 1457 t2 := &model.Team{ 1458 Name: model.NewId(), 1459 DisplayName: model.NewId(), 1460 Email: MakeEmail(), 1461 Type: model.TEAM_OPEN, 1462 SchemeId: &s1.Id, 1463 } 1464 1465 t1 = (<-ss.Team().Save(t1)).Data.(*model.Team) 1466 t2 = (<-ss.Team().Save(t2)).Data.(*model.Team) 1467 1468 assert.Equal(t, s1.Id, *t1.SchemeId) 1469 assert.Equal(t, s1.Id, *t2.SchemeId) 1470 1471 res := <-ss.Team().ResetAllTeamSchemes() 1472 assert.Nil(t, res.Err) 1473 1474 t1 = (<-ss.Team().Get(t1.Id)).Data.(*model.Team) 1475 t2 = (<-ss.Team().Get(t2.Id)).Data.(*model.Team) 1476 1477 assert.Equal(t, "", *t1.SchemeId) 1478 assert.Equal(t, "", *t2.SchemeId) 1479 } 1480 1481 func testTeamStoreClearAllCustomRoleAssignments(t *testing.T, ss store.Store) { 1482 m1 := &model.TeamMember{ 1483 TeamId: model.NewId(), 1484 UserId: model.NewId(), 1485 ExplicitRoles: "team_user team_admin team_post_all_public", 1486 } 1487 m2 := &model.TeamMember{ 1488 TeamId: model.NewId(), 1489 UserId: model.NewId(), 1490 ExplicitRoles: "team_user custom_role team_admin another_custom_role", 1491 } 1492 m3 := &model.TeamMember{ 1493 TeamId: model.NewId(), 1494 UserId: model.NewId(), 1495 ExplicitRoles: "team_user", 1496 } 1497 m4 := &model.TeamMember{ 1498 TeamId: model.NewId(), 1499 UserId: model.NewId(), 1500 ExplicitRoles: "custom_only", 1501 } 1502 1503 store.Must(ss.Team().SaveMember(m1, -1)) 1504 store.Must(ss.Team().SaveMember(m2, -1)) 1505 store.Must(ss.Team().SaveMember(m3, -1)) 1506 store.Must(ss.Team().SaveMember(m4, -1)) 1507 1508 require.Nil(t, (<-ss.Team().ClearAllCustomRoleAssignments()).Err) 1509 1510 r1 := <-ss.Team().GetMember(m1.TeamId, m1.UserId) 1511 require.Nil(t, r1.Err) 1512 assert.Equal(t, m1.ExplicitRoles, r1.Data.(*model.TeamMember).Roles) 1513 1514 r2 := <-ss.Team().GetMember(m2.TeamId, m2.UserId) 1515 require.Nil(t, r2.Err) 1516 assert.Equal(t, "team_user team_admin", r2.Data.(*model.TeamMember).Roles) 1517 1518 r3 := <-ss.Team().GetMember(m3.TeamId, m3.UserId) 1519 require.Nil(t, r3.Err) 1520 assert.Equal(t, m3.ExplicitRoles, r3.Data.(*model.TeamMember).Roles) 1521 1522 r4 := <-ss.Team().GetMember(m4.TeamId, m4.UserId) 1523 require.Nil(t, r4.Err) 1524 assert.Equal(t, "", r4.Data.(*model.TeamMember).Roles) 1525 } 1526 1527 func testTeamStoreAnalyticsGetTeamCountForScheme(t *testing.T, ss store.Store) { 1528 s1 := &model.Scheme{ 1529 DisplayName: model.NewId(), 1530 Name: model.NewId(), 1531 Description: model.NewId(), 1532 Scope: model.SCHEME_SCOPE_TEAM, 1533 } 1534 s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme) 1535 1536 count1 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64) 1537 assert.Equal(t, int64(0), count1) 1538 1539 t1 := &model.Team{ 1540 Name: model.NewId(), 1541 DisplayName: model.NewId(), 1542 Email: MakeEmail(), 1543 Type: model.TEAM_OPEN, 1544 SchemeId: &s1.Id, 1545 } 1546 _ = (<-ss.Team().Save(t1)).Data.(*model.Team) 1547 1548 count2 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64) 1549 assert.Equal(t, int64(1), count2) 1550 1551 t2 := &model.Team{ 1552 Name: model.NewId(), 1553 DisplayName: model.NewId(), 1554 Email: MakeEmail(), 1555 Type: model.TEAM_OPEN, 1556 SchemeId: &s1.Id, 1557 } 1558 _ = (<-ss.Team().Save(t2)).Data.(*model.Team) 1559 1560 count3 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64) 1561 assert.Equal(t, int64(2), count3) 1562 1563 t3 := &model.Team{ 1564 Name: model.NewId(), 1565 DisplayName: model.NewId(), 1566 Email: MakeEmail(), 1567 Type: model.TEAM_OPEN, 1568 } 1569 _ = (<-ss.Team().Save(t3)).Data.(*model.Team) 1570 1571 count4 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64) 1572 assert.Equal(t, int64(2), count4) 1573 1574 t4 := &model.Team{ 1575 Name: model.NewId(), 1576 DisplayName: model.NewId(), 1577 Email: MakeEmail(), 1578 Type: model.TEAM_OPEN, 1579 SchemeId: &s1.Id, 1580 DeleteAt: model.GetMillis(), 1581 } 1582 _ = (<-ss.Team().Save(t4)).Data.(*model.Team) 1583 1584 count5 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64) 1585 assert.Equal(t, int64(2), count5) 1586 } 1587 1588 func testTeamStoreGetAllForExportAfter(t *testing.T, ss store.Store) { 1589 t1 := model.Team{} 1590 t1.DisplayName = "Name" 1591 t1.Name = model.NewId() 1592 t1.Email = MakeEmail() 1593 t1.Type = model.TEAM_OPEN 1594 store.Must(ss.Team().Save(&t1)) 1595 1596 r1 := <-ss.Team().GetAllForExportAfter(10000, strings.Repeat("0", 26)) 1597 assert.Nil(t, r1.Err) 1598 d1 := r1.Data.([]*model.TeamForExport) 1599 1600 found := false 1601 for _, team := range d1 { 1602 if team.Id == t1.Id { 1603 found = true 1604 assert.Equal(t, t1.Id, team.Id) 1605 assert.Nil(t, team.SchemeId) 1606 assert.Equal(t, t1.Name, team.Name) 1607 } 1608 } 1609 assert.True(t, found) 1610 } 1611 1612 func testTeamStoreGetTeamMembersForExport(t *testing.T, ss store.Store) { 1613 t1 := model.Team{} 1614 t1.DisplayName = "Name" 1615 t1.Name = model.NewId() 1616 t1.Email = MakeEmail() 1617 t1.Type = model.TEAM_OPEN 1618 store.Must(ss.Team().Save(&t1)) 1619 1620 u1 := model.User{} 1621 u1.Email = MakeEmail() 1622 u1.Nickname = model.NewId() 1623 store.Must(ss.User().Save(&u1)) 1624 1625 u2 := model.User{} 1626 u2.Email = MakeEmail() 1627 u2.Nickname = model.NewId() 1628 store.Must(ss.User().Save(&u2)) 1629 1630 m1 := &model.TeamMember{TeamId: t1.Id, UserId: u1.Id} 1631 store.Must(ss.Team().SaveMember(m1, -1)) 1632 1633 m2 := &model.TeamMember{TeamId: t1.Id, UserId: u2.Id} 1634 store.Must(ss.Team().SaveMember(m2, -1)) 1635 1636 r1 := <-ss.Team().GetTeamMembersForExport(u1.Id) 1637 assert.Nil(t, r1.Err) 1638 1639 d1 := r1.Data.([]*model.TeamMemberForExport) 1640 assert.Len(t, d1, 1) 1641 1642 tmfe1 := d1[0] 1643 assert.Equal(t, t1.Id, tmfe1.TeamId) 1644 assert.Equal(t, u1.Id, tmfe1.UserId) 1645 assert.Equal(t, t1.Name, tmfe1.TeamName) 1646 }