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