github.com/wgh-/mattermost-server@v4.8.0-rc2+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 "testing" 8 "time" 9 10 "github.com/mattermost/mattermost-server/model" 11 "github.com/mattermost/mattermost-server/store" 12 ) 13 14 func TestTeamStore(t *testing.T, ss store.Store) { 15 t.Run("Save", func(t *testing.T) { testTeamStoreSave(t, ss) }) 16 t.Run("Update", func(t *testing.T) { testTeamStoreUpdate(t, ss) }) 17 t.Run("UpdateDisplayName", func(t *testing.T) { testTeamStoreUpdateDisplayName(t, ss) }) 18 t.Run("Get", func(t *testing.T) { testTeamStoreGet(t, ss) }) 19 t.Run("GetByName", func(t *testing.T) { testTeamStoreGetByName(t, ss) }) 20 t.Run("SearchByName", func(t *testing.T) { testTeamStoreSearchByName(t, ss) }) 21 t.Run("SearchAll", func(t *testing.T) { testTeamStoreSearchAll(t, ss) }) 22 t.Run("SearchOpen", func(t *testing.T) { testTeamStoreSearchOpen(t, ss) }) 23 t.Run("GetByIniviteId", func(t *testing.T) { testTeamStoreGetByIniviteId(t, ss) }) 24 t.Run("ByUserId", func(t *testing.T) { testTeamStoreByUserId(t, ss) }) 25 t.Run("GetAllTeamListing", func(t *testing.T) { testGetAllTeamListing(t, ss) }) 26 t.Run("GetAllTeamPageListing", func(t *testing.T) { testGetAllTeamPageListing(t, ss) }) 27 t.Run("Delete", func(t *testing.T) { testDelete(t, ss) }) 28 t.Run("TeamCount", func(t *testing.T) { testTeamCount(t, ss) }) 29 t.Run("TeamMembers", func(t *testing.T) { testTeamMembers(t, ss) }) 30 t.Run("SaveTeamMemberMaxMembers", func(t *testing.T) { testSaveTeamMemberMaxMembers(t, ss) }) 31 t.Run("GetTeamMember", func(t *testing.T) { testGetTeamMember(t, ss) }) 32 t.Run("GetTeamMembersByIds", func(t *testing.T) { testGetTeamMembersByIds(t, ss) }) 33 t.Run("MemberCount", func(t *testing.T) { testTeamStoreMemberCount(t, ss) }) 34 t.Run("GetChannelUnreadsForAllTeams", func(t *testing.T) { testGetChannelUnreadsForAllTeams(t, ss) }) 35 t.Run("GetChannelUnreadsForTeam", func(t *testing.T) { testGetChannelUnreadsForTeam(t, ss) }) 36 } 37 38 func testTeamStoreSave(t *testing.T, ss store.Store) { 39 o1 := model.Team{} 40 o1.DisplayName = "DisplayName" 41 o1.Name = "z-z-z" + model.NewId() + "b" 42 o1.Email = model.NewId() + "@nowhere.com" 43 o1.Type = model.TEAM_OPEN 44 45 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 46 t.Fatal("couldn't save item", err) 47 } 48 49 if err := (<-ss.Team().Save(&o1)).Err; err == nil { 50 t.Fatal("shouldn't be able to update from save") 51 } 52 53 o1.Id = "" 54 if err := (<-ss.Team().Save(&o1)).Err; err == nil { 55 t.Fatal("should be unique domain") 56 } 57 } 58 59 func testTeamStoreUpdate(t *testing.T, ss store.Store) { 60 o1 := model.Team{} 61 o1.DisplayName = "DisplayName" 62 o1.Name = "z-z-z" + model.NewId() + "b" 63 o1.Email = model.NewId() + "@nowhere.com" 64 o1.Type = model.TEAM_OPEN 65 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 66 t.Fatal(err) 67 } 68 69 time.Sleep(100 * time.Millisecond) 70 71 if err := (<-ss.Team().Update(&o1)).Err; err != nil { 72 t.Fatal(err) 73 } 74 75 o1.Id = "missing" 76 if err := (<-ss.Team().Update(&o1)).Err; err == nil { 77 t.Fatal("Update should have failed because of missing key") 78 } 79 80 o1.Id = model.NewId() 81 if err := (<-ss.Team().Update(&o1)).Err; err == nil { 82 t.Fatal("Update should have faile because id change") 83 } 84 } 85 86 func testTeamStoreUpdateDisplayName(t *testing.T, ss store.Store) { 87 o1 := &model.Team{} 88 o1.DisplayName = "Display Name" 89 o1.Name = "z-z-z" + model.NewId() + "b" 90 o1.Email = model.NewId() + "@nowhere.com" 91 o1.Type = model.TEAM_OPEN 92 o1 = (<-ss.Team().Save(o1)).Data.(*model.Team) 93 94 newDisplayName := "NewDisplayName" 95 96 if err := (<-ss.Team().UpdateDisplayName(newDisplayName, o1.Id)).Err; err != nil { 97 t.Fatal(err) 98 } 99 100 ro1 := (<-ss.Team().Get(o1.Id)).Data.(*model.Team) 101 if ro1.DisplayName != newDisplayName { 102 t.Fatal("DisplayName not updated") 103 } 104 } 105 106 func testTeamStoreGet(t *testing.T, ss store.Store) { 107 o1 := model.Team{} 108 o1.DisplayName = "DisplayName" 109 o1.Name = "z-z-z" + model.NewId() + "b" 110 o1.Email = model.NewId() + "@nowhere.com" 111 o1.Type = model.TEAM_OPEN 112 store.Must(ss.Team().Save(&o1)) 113 114 if r1 := <-ss.Team().Get(o1.Id); r1.Err != nil { 115 t.Fatal(r1.Err) 116 } else { 117 if r1.Data.(*model.Team).ToJson() != o1.ToJson() { 118 t.Fatal("invalid returned team") 119 } 120 } 121 122 if err := (<-ss.Team().Get("")).Err; err == nil { 123 t.Fatal("Missing id should have failed") 124 } 125 } 126 127 func testTeamStoreGetByName(t *testing.T, ss store.Store) { 128 o1 := model.Team{} 129 o1.DisplayName = "DisplayName" 130 o1.Name = "z-z-z" + model.NewId() + "b" 131 o1.Email = model.NewId() + "@nowhere.com" 132 o1.Type = model.TEAM_OPEN 133 134 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 135 t.Fatal(err) 136 } 137 138 if r1 := <-ss.Team().GetByName(o1.Name); r1.Err != nil { 139 t.Fatal(r1.Err) 140 } else { 141 if r1.Data.(*model.Team).ToJson() != o1.ToJson() { 142 t.Fatal("invalid returned team") 143 } 144 } 145 146 if err := (<-ss.Team().GetByName("")).Err; err == nil { 147 t.Fatal("Missing id should have failed") 148 } 149 } 150 151 func testTeamStoreSearchByName(t *testing.T, ss store.Store) { 152 o1 := model.Team{} 153 o1.DisplayName = "DisplayName" 154 var name = "zzz" + model.NewId() 155 o1.Name = name + "b" 156 o1.Email = model.NewId() + "@nowhere.com" 157 o1.Type = model.TEAM_OPEN 158 159 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 160 t.Fatal(err) 161 } 162 163 if r1 := <-ss.Team().SearchByName(name); r1.Err != nil { 164 t.Fatal(r1.Err) 165 } else { 166 if r1.Data.([]*model.Team)[0].ToJson() != o1.ToJson() { 167 t.Fatal("invalid returned team") 168 } 169 } 170 } 171 172 func testTeamStoreSearchAll(t *testing.T, ss store.Store) { 173 o1 := model.Team{} 174 o1.DisplayName = "ADisplayName" + model.NewId() 175 o1.Name = "zz" + model.NewId() + "a" 176 o1.Email = model.NewId() + "@nowhere.com" 177 o1.Type = model.TEAM_OPEN 178 179 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 180 t.Fatal(err) 181 } 182 183 p2 := model.Team{} 184 p2.DisplayName = "BDisplayName" + model.NewId() 185 p2.Name = "b" + model.NewId() + "b" 186 p2.Email = model.NewId() + "@nowhere.com" 187 p2.Type = model.TEAM_INVITE 188 189 if err := (<-ss.Team().Save(&p2)).Err; err != nil { 190 t.Fatal(err) 191 } 192 193 r1 := <-ss.Team().SearchAll(o1.Name) 194 if r1.Err != nil { 195 t.Fatal(r1.Err) 196 } 197 if len(r1.Data.([]*model.Team)) != 1 { 198 t.Fatal("should have returned 1 team") 199 } 200 if r1.Data.([]*model.Team)[0].ToJson() != o1.ToJson() { 201 t.Fatal("invalid returned team") 202 } 203 204 r1 = <-ss.Team().SearchAll(p2.DisplayName) 205 if r1.Err != nil { 206 t.Fatal(r1.Err) 207 } 208 if len(r1.Data.([]*model.Team)) != 1 { 209 t.Fatal("should have returned 1 team") 210 } 211 if r1.Data.([]*model.Team)[0].ToJson() != p2.ToJson() { 212 t.Fatal("invalid returned team") 213 } 214 215 r1 = <-ss.Team().SearchAll("junk") 216 if r1.Err != nil { 217 t.Fatal(r1.Err) 218 } 219 if len(r1.Data.([]*model.Team)) != 0 { 220 t.Fatal("should have not returned a team") 221 } 222 } 223 224 func testTeamStoreSearchOpen(t *testing.T, ss store.Store) { 225 o1 := model.Team{} 226 o1.DisplayName = "ADisplayName" + model.NewId() 227 o1.Name = "zz" + model.NewId() + "a" 228 o1.Email = model.NewId() + "@nowhere.com" 229 o1.Type = model.TEAM_OPEN 230 o1.AllowOpenInvite = true 231 232 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 233 t.Fatal(err) 234 } 235 236 o2 := model.Team{} 237 o2.DisplayName = "ADisplayName" + model.NewId() 238 o2.Name = "zz" + model.NewId() + "a" 239 o2.Email = model.NewId() + "@nowhere.com" 240 o2.Type = model.TEAM_OPEN 241 o2.AllowOpenInvite = false 242 243 if err := (<-ss.Team().Save(&o2)).Err; err != nil { 244 t.Fatal(err) 245 } 246 247 p2 := model.Team{} 248 p2.DisplayName = "BDisplayName" + model.NewId() 249 p2.Name = "b" + model.NewId() + "b" 250 p2.Email = model.NewId() + "@nowhere.com" 251 p2.Type = model.TEAM_INVITE 252 p2.AllowOpenInvite = true 253 254 if err := (<-ss.Team().Save(&p2)).Err; err != nil { 255 t.Fatal(err) 256 } 257 258 r1 := <-ss.Team().SearchOpen(o1.Name) 259 if r1.Err != nil { 260 t.Fatal(r1.Err) 261 } 262 if len(r1.Data.([]*model.Team)) != 1 { 263 t.Fatal("should have returned 1 team") 264 } 265 if r1.Data.([]*model.Team)[0].ToJson() != o1.ToJson() { 266 t.Fatal("invalid returned team") 267 } 268 269 r1 = <-ss.Team().SearchOpen(o1.DisplayName) 270 if r1.Err != nil { 271 t.Fatal(r1.Err) 272 } 273 if len(r1.Data.([]*model.Team)) != 1 { 274 t.Fatal("should have returned 1 team") 275 } 276 if r1.Data.([]*model.Team)[0].ToJson() != o1.ToJson() { 277 t.Fatal("invalid returned team") 278 } 279 280 r1 = <-ss.Team().SearchOpen(p2.Name) 281 if r1.Err != nil { 282 t.Fatal(r1.Err) 283 } 284 if len(r1.Data.([]*model.Team)) != 0 { 285 t.Fatal("should have not returned a team") 286 } 287 288 r1 = <-ss.Team().SearchOpen(p2.DisplayName) 289 if r1.Err != nil { 290 t.Fatal(r1.Err) 291 } 292 if len(r1.Data.([]*model.Team)) != 0 { 293 t.Fatal("should have not returned a team") 294 } 295 296 r1 = <-ss.Team().SearchOpen("junk") 297 if r1.Err != nil { 298 t.Fatal(r1.Err) 299 } 300 if len(r1.Data.([]*model.Team)) != 0 { 301 t.Fatal("should have not returned a team") 302 } 303 304 r1 = <-ss.Team().SearchOpen(o2.DisplayName) 305 if r1.Err != nil { 306 t.Fatal(r1.Err) 307 } 308 if len(r1.Data.([]*model.Team)) != 0 { 309 t.Fatal("should have not returned a team") 310 } 311 } 312 313 func testTeamStoreGetByIniviteId(t *testing.T, ss store.Store) { 314 o1 := model.Team{} 315 o1.DisplayName = "DisplayName" 316 o1.Name = "z-z-z" + model.NewId() + "b" 317 o1.Email = model.NewId() + "@nowhere.com" 318 o1.Type = model.TEAM_OPEN 319 o1.InviteId = model.NewId() 320 321 if err := (<-ss.Team().Save(&o1)).Err; err != nil { 322 t.Fatal(err) 323 } 324 325 o2 := model.Team{} 326 o2.DisplayName = "DisplayName" 327 o2.Name = "zz" + model.NewId() + "b" 328 o2.Email = model.NewId() + "@nowhere.com" 329 o2.Type = model.TEAM_OPEN 330 331 if err := (<-ss.Team().Save(&o2)).Err; err != nil { 332 t.Fatal(err) 333 } 334 335 if r1 := <-ss.Team().GetByInviteId(o1.InviteId); r1.Err != nil { 336 t.Fatal(r1.Err) 337 } else { 338 if r1.Data.(*model.Team).ToJson() != o1.ToJson() { 339 t.Fatal("invalid returned team") 340 } 341 } 342 343 o2.InviteId = "" 344 <-ss.Team().Update(&o2) 345 346 if r1 := <-ss.Team().GetByInviteId(o2.Id); r1.Err != nil { 347 t.Fatal(r1.Err) 348 } else { 349 if r1.Data.(*model.Team).Id != o2.Id { 350 t.Fatal("invalid returned team") 351 } 352 } 353 354 if err := (<-ss.Team().GetByInviteId("")).Err; err == nil { 355 t.Fatal("Missing id should have failed") 356 } 357 } 358 359 func testTeamStoreByUserId(t *testing.T, ss store.Store) { 360 o1 := &model.Team{} 361 o1.DisplayName = "DisplayName" 362 o1.Name = "z-z-z" + model.NewId() + "b" 363 o1.Email = model.NewId() + "@nowhere.com" 364 o1.Type = model.TEAM_OPEN 365 o1.InviteId = model.NewId() 366 o1 = store.Must(ss.Team().Save(o1)).(*model.Team) 367 368 m1 := &model.TeamMember{TeamId: o1.Id, UserId: model.NewId()} 369 store.Must(ss.Team().SaveMember(m1, -1)) 370 371 if r1 := <-ss.Team().GetTeamsByUserId(m1.UserId); r1.Err != nil { 372 t.Fatal(r1.Err) 373 } else { 374 teams := r1.Data.([]*model.Team) 375 if len(teams) == 0 { 376 t.Fatal("Should return a team") 377 } 378 379 if teams[0].Id != o1.Id { 380 t.Fatal("should be a member") 381 } 382 383 } 384 } 385 386 func testGetAllTeamListing(t *testing.T, ss store.Store) { 387 o1 := model.Team{} 388 o1.DisplayName = "DisplayName" 389 o1.Name = "z-z-z" + model.NewId() + "b" 390 o1.Email = model.NewId() + "@nowhere.com" 391 o1.Type = model.TEAM_OPEN 392 o1.AllowOpenInvite = true 393 store.Must(ss.Team().Save(&o1)) 394 395 o2 := model.Team{} 396 o2.DisplayName = "DisplayName" 397 o2.Name = "zz" + model.NewId() + "b" 398 o2.Email = model.NewId() + "@nowhere.com" 399 o2.Type = model.TEAM_OPEN 400 store.Must(ss.Team().Save(&o2)) 401 402 o3 := model.Team{} 403 o3.DisplayName = "DisplayName" 404 o3.Name = "z-z-z" + model.NewId() + "b" 405 o3.Email = model.NewId() + "@nowhere.com" 406 o3.Type = model.TEAM_INVITE 407 o3.AllowOpenInvite = true 408 store.Must(ss.Team().Save(&o3)) 409 410 o4 := model.Team{} 411 o4.DisplayName = "DisplayName" 412 o4.Name = "zz" + model.NewId() + "b" 413 o4.Email = model.NewId() + "@nowhere.com" 414 o4.Type = model.TEAM_INVITE 415 store.Must(ss.Team().Save(&o4)) 416 417 if r1 := <-ss.Team().GetAllTeamListing(); r1.Err != nil { 418 t.Fatal(r1.Err) 419 } else { 420 teams := r1.Data.([]*model.Team) 421 422 for _, team := range teams { 423 if !team.AllowOpenInvite { 424 t.Fatal("should have returned team with AllowOpenInvite as true") 425 } 426 } 427 428 if len(teams) == 0 { 429 t.Fatal("failed team listing") 430 } 431 } 432 } 433 434 func testGetAllTeamPageListing(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 = model.NewId() + "@nowhere.com" 439 o1.Type = model.TEAM_OPEN 440 o1.AllowOpenInvite = true 441 store.Must(ss.Team().Save(&o1)) 442 443 o2 := model.Team{} 444 o2.DisplayName = "DisplayName" 445 o2.Name = "zz" + model.NewId() + "b" 446 o2.Email = model.NewId() + "@nowhere.com" 447 o2.Type = model.TEAM_OPEN 448 o2.AllowOpenInvite = false 449 store.Must(ss.Team().Save(&o2)) 450 451 o3 := model.Team{} 452 o3.DisplayName = "DisplayName" 453 o3.Name = "z-z-z" + model.NewId() + "b" 454 o3.Email = model.NewId() + "@nowhere.com" 455 o3.Type = model.TEAM_INVITE 456 o3.AllowOpenInvite = true 457 store.Must(ss.Team().Save(&o3)) 458 459 o4 := model.Team{} 460 o4.DisplayName = "DisplayName" 461 o4.Name = "zz" + model.NewId() + "b" 462 o4.Email = model.NewId() + "@nowhere.com" 463 o4.Type = model.TEAM_INVITE 464 o4.AllowOpenInvite = false 465 store.Must(ss.Team().Save(&o4)) 466 467 if r1 := <-ss.Team().GetAllTeamPageListing(0, 10); r1.Err != nil { 468 t.Fatal(r1.Err) 469 } else { 470 teams := r1.Data.([]*model.Team) 471 472 for _, team := range teams { 473 if !team.AllowOpenInvite { 474 t.Fatal("should have returned team with AllowOpenInvite as true") 475 } 476 } 477 478 if len(teams) > 10 { 479 t.Fatal("should have returned max of 10 teams") 480 } 481 } 482 483 o5 := model.Team{} 484 o5.DisplayName = "DisplayName" 485 o5.Name = "z-z-z" + model.NewId() + "b" 486 o5.Email = model.NewId() + "@nowhere.com" 487 o5.Type = model.TEAM_OPEN 488 o5.AllowOpenInvite = true 489 store.Must(ss.Team().Save(&o5)) 490 491 if r1 := <-ss.Team().GetAllTeamPageListing(0, 4); r1.Err != nil { 492 t.Fatal(r1.Err) 493 } else { 494 teams := r1.Data.([]*model.Team) 495 496 for _, team := range teams { 497 if !team.AllowOpenInvite { 498 t.Fatal("should have returned team with AllowOpenInvite as true") 499 } 500 } 501 502 if len(teams) > 4 { 503 t.Fatal("should have returned max of 4 teams") 504 } 505 } 506 507 if r1 := <-ss.Team().GetAllTeamPageListing(1, 1); r1.Err != nil { 508 t.Fatal(r1.Err) 509 } else { 510 teams := r1.Data.([]*model.Team) 511 512 for _, team := range teams { 513 if !team.AllowOpenInvite { 514 t.Fatal("should have returned team with AllowOpenInvite as true") 515 } 516 } 517 518 if len(teams) > 1 { 519 t.Fatal("should have returned max of 1 team") 520 } 521 } 522 } 523 524 func testDelete(t *testing.T, ss store.Store) { 525 o1 := model.Team{} 526 o1.DisplayName = "DisplayName" 527 o1.Name = "z-z-z" + model.NewId() + "b" 528 o1.Email = model.NewId() + "@nowhere.com" 529 o1.Type = model.TEAM_OPEN 530 o1.AllowOpenInvite = true 531 store.Must(ss.Team().Save(&o1)) 532 533 o2 := model.Team{} 534 o2.DisplayName = "DisplayName" 535 o2.Name = "zz" + model.NewId() + "b" 536 o2.Email = model.NewId() + "@nowhere.com" 537 o2.Type = model.TEAM_OPEN 538 store.Must(ss.Team().Save(&o2)) 539 540 if r1 := <-ss.Team().PermanentDelete(o1.Id); r1.Err != nil { 541 t.Fatal(r1.Err) 542 } 543 } 544 545 func testTeamCount(t *testing.T, ss store.Store) { 546 o1 := model.Team{} 547 o1.DisplayName = "DisplayName" 548 o1.Name = "z-z-z" + model.NewId() + "b" 549 o1.Email = model.NewId() + "@nowhere.com" 550 o1.Type = model.TEAM_OPEN 551 o1.AllowOpenInvite = true 552 store.Must(ss.Team().Save(&o1)) 553 554 if r1 := <-ss.Team().AnalyticsTeamCount(); r1.Err != nil { 555 t.Fatal(r1.Err) 556 } else { 557 if r1.Data.(int64) == 0 { 558 t.Fatal("should be at least 1 team") 559 } 560 } 561 } 562 563 func testTeamMembers(t *testing.T, ss store.Store) { 564 teamId1 := model.NewId() 565 teamId2 := model.NewId() 566 567 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 568 m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 569 m3 := &model.TeamMember{TeamId: teamId2, UserId: model.NewId()} 570 571 if r1 := <-ss.Team().SaveMember(m1, -1); r1.Err != nil { 572 t.Fatal(r1.Err) 573 } 574 575 store.Must(ss.Team().SaveMember(m2, -1)) 576 store.Must(ss.Team().SaveMember(m3, -1)) 577 578 if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil { 579 t.Fatal(r1.Err) 580 } else { 581 ms := r1.Data.([]*model.TeamMember) 582 583 if len(ms) != 2 { 584 t.Fatal() 585 } 586 } 587 588 if r1 := <-ss.Team().GetMembers(teamId2, 0, 100); r1.Err != nil { 589 t.Fatal(r1.Err) 590 } else { 591 ms := r1.Data.([]*model.TeamMember) 592 593 if len(ms) != 1 { 594 t.Fatal() 595 } 596 597 if ms[0].UserId != m3.UserId { 598 t.Fatal() 599 600 } 601 } 602 603 if r1 := <-ss.Team().GetTeamsForUser(m1.UserId); r1.Err != nil { 604 t.Fatal(r1.Err) 605 } else { 606 ms := r1.Data.([]*model.TeamMember) 607 608 if len(ms) != 1 { 609 t.Fatal() 610 } 611 612 if ms[0].TeamId != m1.TeamId { 613 t.Fatal() 614 615 } 616 } 617 618 if r1 := <-ss.Team().RemoveMember(teamId1, m1.UserId); r1.Err != nil { 619 t.Fatal(r1.Err) 620 } 621 622 if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil { 623 t.Fatal(r1.Err) 624 } else { 625 ms := r1.Data.([]*model.TeamMember) 626 627 if len(ms) != 1 { 628 t.Fatal() 629 } 630 631 if ms[0].UserId != m2.UserId { 632 t.Fatal() 633 634 } 635 } 636 637 store.Must(ss.Team().SaveMember(m1, -1)) 638 639 if r1 := <-ss.Team().RemoveAllMembersByTeam(teamId1); r1.Err != nil { 640 t.Fatal(r1.Err) 641 } 642 643 if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil { 644 t.Fatal(r1.Err) 645 } else { 646 ms := r1.Data.([]*model.TeamMember) 647 648 if len(ms) != 0 { 649 t.Fatal() 650 } 651 } 652 653 uid := model.NewId() 654 m4 := &model.TeamMember{TeamId: teamId1, UserId: uid} 655 m5 := &model.TeamMember{TeamId: teamId2, UserId: uid} 656 store.Must(ss.Team().SaveMember(m4, -1)) 657 store.Must(ss.Team().SaveMember(m5, -1)) 658 659 if r1 := <-ss.Team().GetTeamsForUser(uid); r1.Err != nil { 660 t.Fatal(r1.Err) 661 } else { 662 ms := r1.Data.([]*model.TeamMember) 663 664 if len(ms) != 2 { 665 t.Fatal() 666 } 667 } 668 669 if r1 := <-ss.Team().RemoveAllMembersByUser(uid); r1.Err != nil { 670 t.Fatal(r1.Err) 671 } 672 673 if r1 := <-ss.Team().GetTeamsForUser(m1.UserId); r1.Err != nil { 674 t.Fatal(r1.Err) 675 } else { 676 ms := r1.Data.([]*model.TeamMember) 677 678 if len(ms) != 0 { 679 t.Fatal() 680 } 681 } 682 } 683 684 func testSaveTeamMemberMaxMembers(t *testing.T, ss store.Store) { 685 maxUsersPerTeam := 5 686 687 team := store.Must(ss.Team().Save(&model.Team{ 688 DisplayName: "DisplayName", 689 Name: "z-z-z" + model.NewId() + "b", 690 Type: model.TEAM_OPEN, 691 })).(*model.Team) 692 defer func() { 693 <-ss.Team().PermanentDelete(team.Id) 694 }() 695 696 userIds := make([]string, maxUsersPerTeam) 697 698 for i := 0; i < maxUsersPerTeam; i++ { 699 userIds[i] = store.Must(ss.User().Save(&model.User{ 700 Username: model.NewId(), 701 Email: model.NewId(), 702 })).(*model.User).Id 703 704 defer func(userId string) { 705 <-ss.User().PermanentDelete(userId) 706 }(userIds[i]) 707 708 store.Must(ss.Team().SaveMember(&model.TeamMember{ 709 TeamId: team.Id, 710 UserId: userIds[i], 711 }, maxUsersPerTeam)) 712 713 defer func(userId string) { 714 <-ss.Team().RemoveMember(team.Id, userId) 715 }(userIds[i]) 716 } 717 718 if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil { 719 t.Fatal(result.Err) 720 } else if count := result.Data.(int64); int(count) != maxUsersPerTeam { 721 t.Fatalf("should start with 5 team members, had %v instead", count) 722 } 723 724 newUserId := store.Must(ss.User().Save(&model.User{ 725 Username: model.NewId(), 726 Email: model.NewId(), 727 })).(*model.User).Id 728 defer func() { 729 <-ss.User().PermanentDelete(newUserId) 730 }() 731 732 if result := <-ss.Team().SaveMember(&model.TeamMember{ 733 TeamId: team.Id, 734 UserId: newUserId, 735 }, maxUsersPerTeam); result.Err == nil { 736 t.Fatal("shouldn't be able to save member when at maximum members per team") 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 { 742 t.Fatalf("should still have 5 team members, had %v instead", count) 743 } 744 745 // Leaving the team from the UI sets DeleteAt instead of using TeamStore.RemoveMember 746 store.Must(ss.Team().UpdateMember(&model.TeamMember{ 747 TeamId: team.Id, 748 UserId: userIds[0], 749 DeleteAt: 1234, 750 })) 751 752 if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil { 753 t.Fatal(result.Err) 754 } else if count := result.Data.(int64); int(count) != maxUsersPerTeam-1 { 755 t.Fatalf("should now only have 4 team members, had %v instead", count) 756 } 757 758 if result := <-ss.Team().SaveMember(&model.TeamMember{TeamId: team.Id, UserId: newUserId}, maxUsersPerTeam); result.Err != nil { 759 t.Fatal("should've been able to save new member after deleting one", result.Err) 760 } else { 761 defer func(userId string) { 762 <-ss.Team().RemoveMember(team.Id, userId) 763 }(newUserId) 764 } 765 766 if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil { 767 t.Fatal(result.Err) 768 } else if count := result.Data.(int64); int(count) != maxUsersPerTeam { 769 t.Fatalf("should have 5 team members again, had %v instead", count) 770 } 771 772 // Deactivating a user should make them stop counting against max members 773 user2 := store.Must(ss.User().Get(userIds[1])).(*model.User) 774 user2.DeleteAt = 1234 775 store.Must(ss.User().Update(user2, true)) 776 777 newUserId2 := store.Must(ss.User().Save(&model.User{ 778 Username: model.NewId(), 779 Email: model.NewId(), 780 })).(*model.User).Id 781 if result := <-ss.Team().SaveMember(&model.TeamMember{TeamId: team.Id, UserId: newUserId2}, maxUsersPerTeam); result.Err != nil { 782 t.Fatal("should've been able to save new member after deleting one", result.Err) 783 } else { 784 defer func(userId string) { 785 <-ss.Team().RemoveMember(team.Id, userId) 786 }(newUserId2) 787 } 788 } 789 790 func testGetTeamMember(t *testing.T, ss store.Store) { 791 teamId1 := model.NewId() 792 793 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 794 store.Must(ss.Team().SaveMember(m1, -1)) 795 796 if r := <-ss.Team().GetMember(m1.TeamId, m1.UserId); r.Err != nil { 797 t.Fatal(r.Err) 798 } else { 799 rm1 := r.Data.(*model.TeamMember) 800 801 if rm1.TeamId != m1.TeamId { 802 t.Fatal("bad team id") 803 } 804 805 if rm1.UserId != m1.UserId { 806 t.Fatal("bad user id") 807 } 808 } 809 810 if r := <-ss.Team().GetMember(m1.TeamId, ""); r.Err == nil { 811 t.Fatal("empty user id - should have failed") 812 } 813 814 if r := <-ss.Team().GetMember("", m1.UserId); r.Err == nil { 815 t.Fatal("empty team id - should have failed") 816 } 817 } 818 819 func testGetTeamMembersByIds(t *testing.T, ss store.Store) { 820 teamId1 := model.NewId() 821 822 m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 823 store.Must(ss.Team().SaveMember(m1, -1)) 824 825 if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{m1.UserId}); r.Err != nil { 826 t.Fatal(r.Err) 827 } else { 828 rm1 := r.Data.([]*model.TeamMember)[0] 829 830 if rm1.TeamId != m1.TeamId { 831 t.Fatal("bad team id") 832 } 833 834 if rm1.UserId != m1.UserId { 835 t.Fatal("bad user id") 836 } 837 } 838 839 m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 840 store.Must(ss.Team().SaveMember(m2, -1)) 841 842 if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{m1.UserId, m2.UserId, model.NewId()}); r.Err != nil { 843 t.Fatal(r.Err) 844 } else { 845 rm := r.Data.([]*model.TeamMember) 846 847 if len(rm) != 2 { 848 t.Fatal("return wrong number of results") 849 } 850 } 851 852 if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{}); r.Err == nil { 853 t.Fatal("empty user ids - should have failed") 854 } 855 } 856 857 func testTeamStoreMemberCount(t *testing.T, ss store.Store) { 858 u1 := &model.User{} 859 u1.Email = model.NewId() 860 store.Must(ss.User().Save(u1)) 861 862 u2 := &model.User{} 863 u2.Email = model.NewId() 864 u2.DeleteAt = 1 865 store.Must(ss.User().Save(u2)) 866 867 teamId1 := model.NewId() 868 m1 := &model.TeamMember{TeamId: teamId1, UserId: u1.Id} 869 store.Must(ss.Team().SaveMember(m1, -1)) 870 871 m2 := &model.TeamMember{TeamId: teamId1, UserId: u2.Id} 872 store.Must(ss.Team().SaveMember(m2, -1)) 873 874 if result := <-ss.Team().GetTotalMemberCount(teamId1); result.Err != nil { 875 t.Fatal(result.Err) 876 } else { 877 if result.Data.(int64) != 2 { 878 t.Fatal("wrong count") 879 } 880 } 881 882 if result := <-ss.Team().GetActiveMemberCount(teamId1); result.Err != nil { 883 t.Fatal(result.Err) 884 } else { 885 if result.Data.(int64) != 1 { 886 t.Fatal("wrong count") 887 } 888 } 889 890 m3 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} 891 store.Must(ss.Team().SaveMember(m3, -1)) 892 893 if result := <-ss.Team().GetTotalMemberCount(teamId1); result.Err != nil { 894 t.Fatal(result.Err) 895 } else { 896 if result.Data.(int64) != 2 { 897 t.Fatal("wrong count") 898 } 899 } 900 901 if result := <-ss.Team().GetActiveMemberCount(teamId1); result.Err != nil { 902 t.Fatal(result.Err) 903 } else { 904 if result.Data.(int64) != 1 { 905 t.Fatal("wrong count") 906 } 907 } 908 } 909 910 func testGetChannelUnreadsForAllTeams(t *testing.T, ss store.Store) { 911 teamId1 := model.NewId() 912 teamId2 := model.NewId() 913 914 uid := model.NewId() 915 m1 := &model.TeamMember{TeamId: teamId1, UserId: uid} 916 m2 := &model.TeamMember{TeamId: teamId2, UserId: uid} 917 store.Must(ss.Team().SaveMember(m1, -1)) 918 store.Must(ss.Team().SaveMember(m2, -1)) 919 920 c1 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 921 store.Must(ss.Channel().Save(c1, -1)) 922 c2 := &model.Channel{TeamId: m2.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 923 store.Must(ss.Channel().Save(c2, -1)) 924 925 cm1 := &model.ChannelMember{ChannelId: c1.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 926 store.Must(ss.Channel().SaveMember(cm1)) 927 cm2 := &model.ChannelMember{ChannelId: c2.Id, UserId: m2.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 928 store.Must(ss.Channel().SaveMember(cm2)) 929 930 if r1 := <-ss.Team().GetChannelUnreadsForAllTeams("", uid); r1.Err != nil { 931 t.Fatal(r1.Err) 932 } else { 933 ms := r1.Data.([]*model.ChannelUnread) 934 membersMap := make(map[string]bool) 935 for i := range ms { 936 id := ms[i].TeamId 937 if _, ok := membersMap[id]; !ok { 938 membersMap[id] = true 939 } 940 } 941 if len(membersMap) != 2 { 942 t.Fatal("Should be the unreads for all the teams") 943 } 944 945 if ms[0].MsgCount != 10 { 946 t.Fatal("subtraction failed") 947 } 948 } 949 950 if r2 := <-ss.Team().GetChannelUnreadsForAllTeams(teamId1, uid); r2.Err != nil { 951 t.Fatal(r2.Err) 952 } else { 953 ms := r2.Data.([]*model.ChannelUnread) 954 membersMap := make(map[string]bool) 955 for i := range ms { 956 id := ms[i].TeamId 957 if _, ok := membersMap[id]; !ok { 958 membersMap[id] = true 959 } 960 } 961 962 if len(membersMap) != 1 { 963 t.Fatal("Should be the unreads for just one team") 964 } 965 966 if ms[0].MsgCount != 10 { 967 t.Fatal("subtraction failed") 968 } 969 } 970 971 if r1 := <-ss.Team().RemoveAllMembersByUser(uid); r1.Err != nil { 972 t.Fatal(r1.Err) 973 } 974 } 975 976 func testGetChannelUnreadsForTeam(t *testing.T, ss store.Store) { 977 teamId1 := model.NewId() 978 979 uid := model.NewId() 980 m1 := &model.TeamMember{TeamId: teamId1, UserId: uid} 981 store.Must(ss.Team().SaveMember(m1, -1)) 982 983 c1 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 984 store.Must(ss.Channel().Save(c1, -1)) 985 c2 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100} 986 store.Must(ss.Channel().Save(c2, -1)) 987 988 cm1 := &model.ChannelMember{ChannelId: c1.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 989 store.Must(ss.Channel().SaveMember(cm1)) 990 cm2 := &model.ChannelMember{ChannelId: c2.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} 991 store.Must(ss.Channel().SaveMember(cm2)) 992 993 if r1 := <-ss.Team().GetChannelUnreadsForTeam(m1.TeamId, m1.UserId); r1.Err != nil { 994 t.Fatal(r1.Err) 995 } else { 996 ms := r1.Data.([]*model.ChannelUnread) 997 if len(ms) != 2 { 998 t.Fatal("wrong length") 999 } 1000 1001 if ms[0].MsgCount != 10 { 1002 t.Fatal("subtraction failed") 1003 } 1004 } 1005 }