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