github.com/haalcala/mattermost-server-change-repo/v5@v5.33.2/app/team_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package app 5 6 import ( 7 "fmt" 8 "math/rand" 9 "sort" 10 "strings" 11 "testing" 12 13 "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/mock" 15 "github.com/stretchr/testify/require" 16 17 "github.com/mattermost/mattermost-server/v5/model" 18 "github.com/mattermost/mattermost-server/v5/store/storetest/mocks" 19 ) 20 21 func TestCreateTeam(t *testing.T) { 22 th := Setup(t).InitBasic() 23 defer th.TearDown() 24 25 id := model.NewId() 26 team := &model.Team{ 27 DisplayName: "dn_" + id, 28 Name: "name" + id, 29 Email: "success+" + id + "@simulator.amazonses.com", 30 Type: model.TEAM_OPEN, 31 } 32 33 _, err := th.App.CreateTeam(team) 34 require.Nil(t, err, "Should create a new team") 35 36 _, err = th.App.CreateTeam(th.BasicTeam) 37 require.NotNil(t, err, "Should not create a new team - team already exist") 38 } 39 40 func TestCreateTeamWithUser(t *testing.T) { 41 th := Setup(t).InitBasic() 42 defer th.TearDown() 43 44 id := model.NewId() 45 team := &model.Team{ 46 DisplayName: "dn_" + id, 47 Name: "name" + id, 48 Email: "success+" + id + "@simulator.amazonses.com", 49 Type: model.TEAM_OPEN, 50 } 51 52 _, err := th.App.CreateTeamWithUser(team, th.BasicUser.Id) 53 require.Nil(t, err, "Should create a new team with existing user") 54 55 _, err = th.App.CreateTeamWithUser(team, model.NewId()) 56 require.NotNil(t, err, "Should not create a new team - user does not exist") 57 } 58 59 func TestUpdateTeam(t *testing.T) { 60 th := Setup(t).InitBasic() 61 defer th.TearDown() 62 63 th.BasicTeam.DisplayName = "Testing 123" 64 65 updatedTeam, err := th.App.UpdateTeam(th.BasicTeam) 66 require.Nil(t, err, "Should update the team") 67 require.Equal(t, "Testing 123", updatedTeam.DisplayName, "Wrong Team DisplayName") 68 } 69 70 func TestAddUserToTeam(t *testing.T) { 71 th := Setup(t).InitBasic() 72 defer th.TearDown() 73 74 t.Run("add user", func(t *testing.T) { 75 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 76 ruser, _ := th.App.CreateUser(&user) 77 defer th.App.PermanentDeleteUser(&user) 78 79 _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") 80 require.Nil(t, err, "Should add user to the team") 81 }) 82 83 t.Run("allow user by domain", func(t *testing.T) { 84 th.BasicTeam.AllowedDomains = "example.com" 85 _, err := th.App.UpdateTeam(th.BasicTeam) 86 require.Nil(t, err, "Should update the team") 87 88 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 89 ruser, _ := th.App.CreateUser(&user) 90 defer th.App.PermanentDeleteUser(&user) 91 92 _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") 93 require.Nil(t, err, "Should have allowed whitelisted user") 94 }) 95 96 t.Run("block user by domain but allow bot", func(t *testing.T) { 97 th.BasicTeam.AllowedDomains = "example.com" 98 _, err := th.App.UpdateTeam(th.BasicTeam) 99 require.Nil(t, err, "Should update the team") 100 101 user := model.User{Email: strings.ToLower(model.NewId()) + "test@invalid.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 102 ruser, err := th.App.CreateUser(&user) 103 require.Nil(t, err, "Error creating user: %s", err) 104 defer th.App.PermanentDeleteUser(&user) 105 106 _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") 107 require.NotNil(t, err, "Should not add restricted user") 108 require.Equal(t, "JoinUserToTeam", err.Where, "Error should be JoinUserToTeam") 109 110 user = model.User{Email: strings.ToLower(model.NewId()) + "test@invalid.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), AuthService: "notnil", AuthData: model.NewString("notnil")} 111 ruser, err = th.App.CreateUser(&user) 112 require.Nil(t, err, "Error creating authservice user: %s", err) 113 defer th.App.PermanentDeleteUser(&user) 114 115 _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") 116 require.NotNil(t, err, "Should not add authservice user") 117 require.Equal(t, "JoinUserToTeam", err.Where, "Error should be JoinUserToTeam") 118 119 bot, err := th.App.CreateBot(&model.Bot{ 120 Username: "somebot", 121 Description: "a bot", 122 OwnerId: th.BasicUser.Id, 123 }) 124 require.Nil(t, err) 125 126 _, err = th.App.AddUserToTeam(th.BasicTeam.Id, bot.UserId, "") 127 assert.Nil(t, err, "should be able to add bot to domain restricted team") 128 }) 129 130 t.Run("block user with subdomain", func(t *testing.T) { 131 th.BasicTeam.AllowedDomains = "example.com" 132 _, err := th.App.UpdateTeam(th.BasicTeam) 133 require.Nil(t, err, "Should update the team") 134 135 user := model.User{Email: strings.ToLower(model.NewId()) + "test@invalid.example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 136 ruser, _ := th.App.CreateUser(&user) 137 defer th.App.PermanentDeleteUser(&user) 138 139 _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") 140 require.NotNil(t, err, "Should not add restricted user") 141 require.Equal(t, "JoinUserToTeam", err.Where, "Error should be JoinUserToTeam") 142 }) 143 144 t.Run("allow users by multiple domains", func(t *testing.T) { 145 th.BasicTeam.AllowedDomains = "foo.com, bar.com" 146 _, err := th.App.UpdateTeam(th.BasicTeam) 147 require.Nil(t, err, "Should update the team") 148 149 user1 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@foo.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 150 ruser1, _ := th.App.CreateUser(&user1) 151 152 user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@bar.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 153 ruser2, _ := th.App.CreateUser(&user2) 154 155 user3 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@invalid.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 156 ruser3, _ := th.App.CreateUser(&user3) 157 158 defer th.App.PermanentDeleteUser(&user1) 159 defer th.App.PermanentDeleteUser(&user2) 160 defer th.App.PermanentDeleteUser(&user3) 161 162 _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser1.Id, "") 163 require.Nil(t, err, "Should have allowed whitelisted user1") 164 165 _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser2.Id, "") 166 require.Nil(t, err, "Should have allowed whitelisted user2") 167 168 _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser3.Id, "") 169 require.NotNil(t, err, "Should not have allowed restricted user3") 170 require.Equal(t, "JoinUserToTeam", err.Where, "Error should be JoinUserToTeam") 171 }) 172 173 t.Run("should set up initial sidebar categories when joining a team", func(t *testing.T) { 174 user := th.CreateUser() 175 team := th.CreateTeam() 176 177 _, err := th.App.AddUserToTeam(team.Id, user.Id, "") 178 require.Nil(t, err) 179 180 res, err := th.App.GetSidebarCategories(user.Id, team.Id) 181 require.Nil(t, err) 182 assert.Len(t, res.Categories, 3) 183 assert.Equal(t, model.SidebarCategoryFavorites, res.Categories[0].Type) 184 assert.Equal(t, model.SidebarCategoryChannels, res.Categories[1].Type) 185 assert.Equal(t, model.SidebarCategoryDirectMessages, res.Categories[2].Type) 186 }) 187 } 188 189 func TestAddUserToTeamByToken(t *testing.T) { 190 th := Setup(t).InitBasic() 191 defer th.TearDown() 192 193 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 194 ruser, _ := th.App.CreateUser(&user) 195 rguest := th.CreateGuest() 196 197 t.Run("invalid token", func(t *testing.T) { 198 _, err := th.App.AddUserToTeamByToken(ruser.Id, "123") 199 require.NotNil(t, err, "Should fail on unexisting token") 200 }) 201 202 t.Run("invalid token type", func(t *testing.T) { 203 token := model.NewToken( 204 TokenTypeVerifyEmail, 205 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id}), 206 ) 207 208 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 209 defer th.App.DeleteToken(token) 210 211 _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) 212 require.NotNil(t, err, "Should fail on bad token type") 213 }) 214 215 t.Run("expired token", func(t *testing.T) { 216 token := model.NewToken( 217 TokenTypeTeamInvitation, 218 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id}), 219 ) 220 221 token.CreateAt = model.GetMillis() - InvitationExpiryTime - 1 222 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 223 defer th.App.DeleteToken(token) 224 225 _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) 226 require.NotNil(t, err, "Should fail on expired token") 227 }) 228 229 t.Run("invalid team id", func(t *testing.T) { 230 token := model.NewToken( 231 TokenTypeTeamInvitation, 232 model.MapToJson(map[string]string{"teamId": model.NewId()}), 233 ) 234 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 235 defer th.App.DeleteToken(token) 236 237 _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) 238 require.NotNil(t, err, "Should fail on bad team id") 239 }) 240 241 t.Run("invalid user id", func(t *testing.T) { 242 token := model.NewToken( 243 TokenTypeTeamInvitation, 244 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id}), 245 ) 246 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 247 defer th.App.DeleteToken(token) 248 249 _, err := th.App.AddUserToTeamByToken(model.NewId(), token.Token) 250 require.NotNil(t, err, "Should fail on bad user id") 251 }) 252 253 t.Run("valid request", func(t *testing.T) { 254 token := model.NewToken( 255 TokenTypeTeamInvitation, 256 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id}), 257 ) 258 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 259 _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) 260 require.Nil(t, err, "Should add user to the team") 261 262 _, nErr := th.App.Srv().Store.Token().GetByToken(token.Token) 263 require.Error(t, nErr, "The token must be deleted after be used") 264 265 members, err := th.App.GetChannelMembersForUser(th.BasicTeam.Id, ruser.Id) 266 require.Nil(t, err) 267 assert.Len(t, *members, 2) 268 }) 269 270 t.Run("invalid add a guest using a regular invite", func(t *testing.T) { 271 token := model.NewToken( 272 TokenTypeTeamInvitation, 273 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id}), 274 ) 275 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 276 _, err := th.App.AddUserToTeamByToken(rguest.Id, token.Token) 277 assert.NotNil(t, err) 278 }) 279 280 t.Run("invalid add a regular user using a guest invite", func(t *testing.T) { 281 token := model.NewToken( 282 TokenTypeGuestInvitation, 283 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id, "channels": th.BasicChannel.Id}), 284 ) 285 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 286 _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) 287 assert.NotNil(t, err) 288 }) 289 290 t.Run("invalid add a guest user with a non-granted email domain", func(t *testing.T) { 291 restrictedDomain := *th.App.Config().GuestAccountsSettings.RestrictCreationToDomains 292 defer func() { 293 th.App.UpdateConfig(func(cfg *model.Config) { cfg.GuestAccountsSettings.RestrictCreationToDomains = &restrictedDomain }) 294 }() 295 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.GuestAccountsSettings.RestrictCreationToDomains = "restricted.com" }) 296 token := model.NewToken( 297 TokenTypeGuestInvitation, 298 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id, "channels": th.BasicChannel.Id}), 299 ) 300 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 301 _, err := th.App.AddUserToTeamByToken(rguest.Id, token.Token) 302 require.NotNil(t, err) 303 assert.Equal(t, "api.team.join_user_to_team.allowed_domains.app_error", err.Id) 304 }) 305 306 t.Run("add a guest user with a granted email domain", func(t *testing.T) { 307 restrictedDomain := *th.App.Config().GuestAccountsSettings.RestrictCreationToDomains 308 defer func() { 309 th.App.UpdateConfig(func(cfg *model.Config) { cfg.GuestAccountsSettings.RestrictCreationToDomains = &restrictedDomain }) 310 }() 311 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.GuestAccountsSettings.RestrictCreationToDomains = "restricted.com" }) 312 token := model.NewToken( 313 TokenTypeGuestInvitation, 314 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id, "channels": th.BasicChannel.Id}), 315 ) 316 guestEmail := rguest.Email 317 rguest.Email = "test@restricted.com" 318 _, err := th.App.Srv().Store.User().Update(rguest, false) 319 th.App.InvalidateCacheForUser(rguest.Id) 320 require.NoError(t, err) 321 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 322 _, appErr := th.App.AddUserToTeamByToken(rguest.Id, token.Token) 323 require.Nil(t, appErr) 324 rguest.Email = guestEmail 325 _, err = th.App.Srv().Store.User().Update(rguest, false) 326 require.NoError(t, err) 327 }) 328 329 t.Run("add a guest user even though there are team and system domain restrictions", func(t *testing.T) { 330 th.BasicTeam.AllowedDomains = "restricted-team.com" 331 _, err := th.Server.Store.Team().Update(th.BasicTeam) 332 require.NoError(t, err) 333 restrictedDomain := *th.App.Config().TeamSettings.RestrictCreationToDomains 334 defer func() { 335 th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.RestrictCreationToDomains = &restrictedDomain }) 336 }() 337 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictCreationToDomains = "restricted.com" }) 338 token := model.NewToken( 339 TokenTypeGuestInvitation, 340 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id, "channels": th.BasicChannel.Id}), 341 ) 342 _, err = th.App.Srv().Store.User().Update(rguest, false) 343 require.NoError(t, err) 344 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 345 _, appErr := th.App.AddUserToTeamByToken(rguest.Id, token.Token) 346 require.Nil(t, appErr) 347 th.BasicTeam.AllowedDomains = "" 348 _, err = th.Server.Store.Team().Update(th.BasicTeam) 349 require.NoError(t, err) 350 }) 351 352 t.Run("valid request from guest invite", func(t *testing.T) { 353 token := model.NewToken( 354 TokenTypeGuestInvitation, 355 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id, "channels": th.BasicChannel.Id}), 356 ) 357 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 358 359 _, err := th.App.AddUserToTeamByToken(rguest.Id, token.Token) 360 require.Nil(t, err, "Should add user to the team") 361 362 _, nErr := th.App.Srv().Store.Token().GetByToken(token.Token) 363 require.Error(t, nErr, "The token must be deleted after be used") 364 365 members, err := th.App.GetChannelMembersForUser(th.BasicTeam.Id, rguest.Id) 366 require.Nil(t, err) 367 require.Len(t, *members, 1) 368 assert.Equal(t, (*members)[0].ChannelId, th.BasicChannel.Id) 369 }) 370 371 t.Run("group-constrained team", func(t *testing.T) { 372 th.BasicTeam.GroupConstrained = model.NewBool(true) 373 _, err := th.App.UpdateTeam(th.BasicTeam) 374 require.Nil(t, err, "Should update the team") 375 376 token := model.NewToken( 377 TokenTypeTeamInvitation, 378 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id}), 379 ) 380 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 381 382 _, err = th.App.AddUserToTeamByToken(ruser.Id, token.Token) 383 require.NotNil(t, err, "Should return an error when trying to join a group-constrained team.") 384 require.Equal(t, "app.team.invite_token.group_constrained.error", err.Id) 385 386 th.BasicTeam.GroupConstrained = model.NewBool(false) 387 _, err = th.App.UpdateTeam(th.BasicTeam) 388 require.Nil(t, err, "Should update the team") 389 }) 390 391 t.Run("block user", func(t *testing.T) { 392 th.BasicTeam.AllowedDomains = "example.com" 393 _, err := th.App.UpdateTeam(th.BasicTeam) 394 require.Nil(t, err, "Should update the team") 395 396 user := model.User{Email: strings.ToLower(model.NewId()) + "test@invalid.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 397 ruser, _ := th.App.CreateUser(&user) 398 defer th.App.PermanentDeleteUser(&user) 399 400 token := model.NewToken( 401 TokenTypeTeamInvitation, 402 model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id}), 403 ) 404 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 405 406 _, err = th.App.AddUserToTeamByToken(ruser.Id, token.Token) 407 require.NotNil(t, err, "Should not add restricted user") 408 require.Equal(t, "JoinUserToTeam", err.Where, "Error should be JoinUserToTeam") 409 }) 410 411 t.Run("should set up initial sidebar categories when joining a team by token", func(t *testing.T) { 412 user := th.CreateUser() 413 team := th.CreateTeam() 414 415 token := model.NewToken( 416 TokenTypeTeamInvitation, 417 model.MapToJson(map[string]string{"teamId": team.Id}), 418 ) 419 require.NoError(t, th.App.Srv().Store.Token().Save(token)) 420 421 _, err := th.App.AddUserToTeamByToken(user.Id, token.Token) 422 require.Nil(t, err) 423 424 res, err := th.App.GetSidebarCategories(user.Id, team.Id) 425 require.Nil(t, err) 426 assert.Len(t, res.Categories, 3) 427 assert.Equal(t, model.SidebarCategoryFavorites, res.Categories[0].Type) 428 assert.Equal(t, model.SidebarCategoryChannels, res.Categories[1].Type) 429 assert.Equal(t, model.SidebarCategoryDirectMessages, res.Categories[2].Type) 430 }) 431 } 432 433 func TestAddUserToTeamByTeamId(t *testing.T) { 434 th := Setup(t).InitBasic() 435 defer th.TearDown() 436 437 t.Run("add user", func(t *testing.T) { 438 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 439 ruser, _ := th.App.CreateUser(&user) 440 441 err := th.App.AddUserToTeamByTeamId(th.BasicTeam.Id, ruser) 442 require.Nil(t, err, "Should add user to the team") 443 }) 444 445 t.Run("block user", func(t *testing.T) { 446 th.BasicTeam.AllowedDomains = "example.com" 447 _, err := th.App.UpdateTeam(th.BasicTeam) 448 require.Nil(t, err, "Should update the team") 449 450 user := model.User{Email: strings.ToLower(model.NewId()) + "test@invalid.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 451 ruser, _ := th.App.CreateUser(&user) 452 defer th.App.PermanentDeleteUser(&user) 453 454 err = th.App.AddUserToTeamByTeamId(th.BasicTeam.Id, ruser) 455 require.NotNil(t, err, "Should not add restricted user") 456 require.Equal(t, "JoinUserToTeam", err.Where, "Error should be JoinUserToTeam") 457 }) 458 459 } 460 461 func TestPermanentDeleteTeam(t *testing.T) { 462 th := Setup(t).InitBasic() 463 defer th.TearDown() 464 465 team, err := th.App.CreateTeam(&model.Team{ 466 DisplayName: "deletion-test", 467 Name: "deletion-test", 468 Email: "foo@foo.com", 469 Type: model.TEAM_OPEN, 470 }) 471 require.Nil(t, err, "Should create a team") 472 473 defer func() { 474 th.App.PermanentDeleteTeam(team) 475 }() 476 477 command, err := th.App.CreateCommand(&model.Command{ 478 CreatorId: th.BasicUser.Id, 479 TeamId: team.Id, 480 Trigger: "foo", 481 URL: "http://foo", 482 Method: model.COMMAND_METHOD_POST, 483 }) 484 require.Nil(t, err, "Should create a command") 485 defer th.App.DeleteCommand(command.Id) 486 487 command, err = th.App.GetCommand(command.Id) 488 require.NotNil(t, command, "command should not be nil") 489 require.Nil(t, err, "unable to get new command") 490 491 err = th.App.PermanentDeleteTeam(team) 492 require.Nil(t, err) 493 494 command, err = th.App.GetCommand(command.Id) 495 require.Nil(t, command, "command wasn't deleted") 496 require.NotNil(t, err, "should not return an error") 497 498 // Test deleting a team with no channels. 499 team = th.CreateTeam() 500 defer func() { 501 th.App.PermanentDeleteTeam(team) 502 }() 503 504 channels, err := th.App.GetPublicChannelsForTeam(team.Id, 0, 1000) 505 require.Nil(t, err) 506 507 for _, channel := range *channels { 508 err2 := th.App.PermanentDeleteChannel(channel) 509 require.Nil(t, err2) 510 } 511 512 err = th.App.PermanentDeleteTeam(team) 513 require.Nil(t, err) 514 } 515 516 func TestSanitizeTeam(t *testing.T) { 517 th := Setup(t) 518 defer th.TearDown() 519 520 team := &model.Team{ 521 Id: model.NewId(), 522 Email: th.MakeEmail(), 523 InviteId: model.NewId(), 524 AllowedDomains: "example.com", 525 } 526 527 copyTeam := func() *model.Team { 528 copy := &model.Team{} 529 *copy = *team 530 return copy 531 } 532 533 t.Run("not a user of the team", func(t *testing.T) { 534 userID := model.NewId() 535 session := model.Session{ 536 Roles: model.SYSTEM_USER_ROLE_ID, 537 TeamMembers: []*model.TeamMember{ 538 { 539 UserId: userID, 540 TeamId: model.NewId(), 541 Roles: model.TEAM_USER_ROLE_ID, 542 }, 543 }, 544 } 545 546 sanitized := th.App.SanitizeTeam(session, copyTeam()) 547 require.Empty(t, sanitized.Email, "should've sanitized team") 548 require.Empty(t, sanitized.InviteId, "should've sanitized inviteid") 549 }) 550 551 t.Run("user of the team", func(t *testing.T) { 552 userID := model.NewId() 553 session := model.Session{ 554 Roles: model.SYSTEM_USER_ROLE_ID, 555 TeamMembers: []*model.TeamMember{ 556 { 557 UserId: userID, 558 TeamId: team.Id, 559 Roles: model.TEAM_USER_ROLE_ID, 560 }, 561 }, 562 } 563 564 sanitized := th.App.SanitizeTeam(session, copyTeam()) 565 require.Empty(t, sanitized.Email, "should've sanitized team") 566 require.NotEmpty(t, sanitized.InviteId, "should have not sanitized inviteid") 567 }) 568 569 t.Run("team admin", func(t *testing.T) { 570 userID := model.NewId() 571 session := model.Session{ 572 Roles: model.SYSTEM_USER_ROLE_ID, 573 TeamMembers: []*model.TeamMember{ 574 { 575 UserId: userID, 576 TeamId: team.Id, 577 Roles: model.TEAM_USER_ROLE_ID + " " + model.TEAM_ADMIN_ROLE_ID, 578 }, 579 }, 580 } 581 582 sanitized := th.App.SanitizeTeam(session, copyTeam()) 583 require.NotEmpty(t, sanitized.Email, "shouldn't have sanitized team") 584 require.NotEmpty(t, sanitized.InviteId, "shouldn't have sanitized inviteid") 585 }) 586 587 t.Run("team admin of another team", func(t *testing.T) { 588 userID := model.NewId() 589 session := model.Session{ 590 Roles: model.SYSTEM_USER_ROLE_ID, 591 TeamMembers: []*model.TeamMember{ 592 { 593 UserId: userID, 594 TeamId: model.NewId(), 595 Roles: model.TEAM_USER_ROLE_ID + " " + model.TEAM_ADMIN_ROLE_ID, 596 }, 597 }, 598 } 599 600 sanitized := th.App.SanitizeTeam(session, copyTeam()) 601 require.Empty(t, sanitized.Email, "should've sanitized team") 602 require.Empty(t, sanitized.InviteId, "should've sanitized inviteid") 603 }) 604 605 t.Run("system admin, not a user of team", func(t *testing.T) { 606 userID := model.NewId() 607 session := model.Session{ 608 Roles: model.SYSTEM_USER_ROLE_ID + " " + model.SYSTEM_ADMIN_ROLE_ID, 609 TeamMembers: []*model.TeamMember{ 610 { 611 UserId: userID, 612 TeamId: model.NewId(), 613 Roles: model.TEAM_USER_ROLE_ID, 614 }, 615 }, 616 } 617 618 sanitized := th.App.SanitizeTeam(session, copyTeam()) 619 require.NotEmpty(t, sanitized.Email, "shouldn't have sanitized team") 620 require.NotEmpty(t, sanitized.InviteId, "shouldn't have sanitized inviteid") 621 }) 622 623 t.Run("system admin, user of team", func(t *testing.T) { 624 userID := model.NewId() 625 session := model.Session{ 626 Roles: model.SYSTEM_USER_ROLE_ID + " " + model.SYSTEM_ADMIN_ROLE_ID, 627 TeamMembers: []*model.TeamMember{ 628 { 629 UserId: userID, 630 TeamId: team.Id, 631 Roles: model.TEAM_USER_ROLE_ID, 632 }, 633 }, 634 } 635 636 sanitized := th.App.SanitizeTeam(session, copyTeam()) 637 require.NotEmpty(t, sanitized.Email, "shouldn't have sanitized team") 638 require.NotEmpty(t, sanitized.InviteId, "shouldn't have sanitized inviteid") 639 }) 640 } 641 642 func TestSanitizeTeams(t *testing.T) { 643 th := Setup(t) 644 defer th.TearDown() 645 646 t.Run("not a system admin", func(t *testing.T) { 647 teams := []*model.Team{ 648 { 649 Id: model.NewId(), 650 Email: th.MakeEmail(), 651 AllowedDomains: "example.com", 652 }, 653 { 654 Id: model.NewId(), 655 Email: th.MakeEmail(), 656 AllowedDomains: "example.com", 657 }, 658 } 659 660 userID := model.NewId() 661 session := model.Session{ 662 Roles: model.SYSTEM_USER_ROLE_ID, 663 TeamMembers: []*model.TeamMember{ 664 { 665 UserId: userID, 666 TeamId: teams[0].Id, 667 Roles: model.TEAM_USER_ROLE_ID, 668 }, 669 { 670 UserId: userID, 671 TeamId: teams[1].Id, 672 Roles: model.TEAM_USER_ROLE_ID + " " + model.TEAM_ADMIN_ROLE_ID, 673 }, 674 }, 675 } 676 677 sanitized := th.App.SanitizeTeams(session, teams) 678 679 require.Empty(t, sanitized[0].Email, "should've sanitized first team") 680 require.NotEmpty(t, sanitized[1].Email, "shouldn't have sanitized second team") 681 }) 682 683 t.Run("system admin", func(t *testing.T) { 684 teams := []*model.Team{ 685 { 686 Id: model.NewId(), 687 Email: th.MakeEmail(), 688 AllowedDomains: "example.com", 689 }, 690 { 691 Id: model.NewId(), 692 Email: th.MakeEmail(), 693 AllowedDomains: "example.com", 694 }, 695 } 696 697 userID := model.NewId() 698 session := model.Session{ 699 Roles: model.SYSTEM_USER_ROLE_ID + " " + model.SYSTEM_ADMIN_ROLE_ID, 700 TeamMembers: []*model.TeamMember{ 701 { 702 UserId: userID, 703 TeamId: teams[0].Id, 704 Roles: model.TEAM_USER_ROLE_ID, 705 }, 706 }, 707 } 708 709 sanitized := th.App.SanitizeTeams(session, teams) 710 assert.NotEmpty(t, sanitized[0].Email, "shouldn't have sanitized first team") 711 assert.NotEmpty(t, sanitized[1].Email, "shouldn't have sanitized second team") 712 }) 713 } 714 715 func TestJoinUserToTeam(t *testing.T) { 716 th := Setup(t) 717 defer th.TearDown() 718 719 id := model.NewId() 720 team := &model.Team{ 721 DisplayName: "dn_" + id, 722 Name: "name" + id, 723 Email: "success+" + id + "@simulator.amazonses.com", 724 Type: model.TEAM_OPEN, 725 } 726 727 _, err := th.App.CreateTeam(team) 728 require.Nil(t, err, "Should create a new team") 729 730 maxUsersPerTeam := th.App.Config().TeamSettings.MaxUsersPerTeam 731 defer func() { 732 th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.MaxUsersPerTeam = maxUsersPerTeam }) 733 th.App.PermanentDeleteTeam(team) 734 }() 735 one := 1 736 th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.MaxUsersPerTeam = &one }) 737 738 t.Run("new join", func(t *testing.T) { 739 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 740 ruser, _ := th.App.CreateUser(&user) 741 defer th.App.PermanentDeleteUser(&user) 742 743 var alreadyAdded bool 744 _, alreadyAdded, err = th.App.joinUserToTeam(team, ruser) 745 require.False(t, alreadyAdded, "Should return already added equal to false") 746 require.Nil(t, err, "Should return no error") 747 }) 748 749 t.Run("join when you are a member", func(t *testing.T) { 750 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 751 ruser, _ := th.App.CreateUser(&user) 752 defer th.App.PermanentDeleteUser(&user) 753 754 th.App.joinUserToTeam(team, ruser) 755 756 var alreadyAdded bool 757 _, alreadyAdded, err = th.App.joinUserToTeam(team, ruser) 758 require.True(t, alreadyAdded, "Should return already added") 759 require.Nil(t, err, "Should return no error") 760 }) 761 762 t.Run("re-join after leaving", func(t *testing.T) { 763 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 764 ruser, _ := th.App.CreateUser(&user) 765 defer th.App.PermanentDeleteUser(&user) 766 767 th.App.joinUserToTeam(team, ruser) 768 th.App.LeaveTeam(team, ruser, ruser.Id) 769 770 var alreadyAdded bool 771 _, alreadyAdded, err = th.App.joinUserToTeam(team, ruser) 772 require.False(t, alreadyAdded, "Should return already added equal to false") 773 require.Nil(t, err, "Should return no error") 774 }) 775 776 t.Run("new join with limit problem", func(t *testing.T) { 777 user1 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 778 ruser1, _ := th.App.CreateUser(&user1) 779 user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 780 ruser2, _ := th.App.CreateUser(&user2) 781 782 defer th.App.PermanentDeleteUser(&user1) 783 defer th.App.PermanentDeleteUser(&user2) 784 th.App.joinUserToTeam(team, ruser1) 785 786 _, _, err = th.App.joinUserToTeam(team, ruser2) 787 require.NotNil(t, err, "Should fail") 788 }) 789 790 t.Run("re-join alfter leaving with limit problem", func(t *testing.T) { 791 user1 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 792 ruser1, _ := th.App.CreateUser(&user1) 793 794 user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 795 ruser2, _ := th.App.CreateUser(&user2) 796 797 defer th.App.PermanentDeleteUser(&user1) 798 defer th.App.PermanentDeleteUser(&user2) 799 800 th.App.joinUserToTeam(team, ruser1) 801 th.App.LeaveTeam(team, ruser1, ruser1.Id) 802 th.App.joinUserToTeam(team, ruser2) 803 804 _, _, err = th.App.joinUserToTeam(team, ruser1) 805 require.NotNil(t, err, "Should fail") 806 }) 807 808 t.Run("new join with correct scheme_admin value from group syncable", func(t *testing.T) { 809 user1 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 810 ruser1, _ := th.App.CreateUser(&user1) 811 defer th.App.PermanentDeleteUser(&user1) 812 813 group := th.CreateGroup() 814 815 _, err = th.App.UpsertGroupMember(group.Id, user1.Id) 816 require.Nil(t, err) 817 818 gs, err := th.App.UpsertGroupSyncable(&model.GroupSyncable{ 819 AutoAdd: true, 820 SyncableId: team.Id, 821 Type: model.GroupSyncableTypeTeam, 822 GroupId: group.Id, 823 SchemeAdmin: false, 824 }) 825 require.Nil(t, err) 826 827 th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.MaxUsersPerTeam = model.NewInt(999) }) 828 829 tm1, _, err := th.App.joinUserToTeam(team, ruser1) 830 require.Nil(t, err) 831 require.False(t, tm1.SchemeAdmin) 832 833 user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 834 ruser2, _ := th.App.CreateUser(&user2) 835 defer th.App.PermanentDeleteUser(&user2) 836 837 _, err = th.App.UpsertGroupMember(group.Id, user2.Id) 838 require.Nil(t, err) 839 840 gs.SchemeAdmin = true 841 _, err = th.App.UpdateGroupSyncable(gs) 842 require.Nil(t, err) 843 844 tm2, _, err := th.App.joinUserToTeam(team, ruser2) 845 require.Nil(t, err) 846 require.True(t, tm2.SchemeAdmin) 847 }) 848 } 849 850 func TestAppUpdateTeamScheme(t *testing.T) { 851 th := Setup(t).InitBasic() 852 defer th.TearDown() 853 854 team := th.BasicTeam 855 mockID := model.NewString("x") 856 team.SchemeId = mockID 857 858 updatedTeam, err := th.App.UpdateTeamScheme(th.BasicTeam) 859 require.Nil(t, err) 860 require.Equal(t, mockID, updatedTeam.SchemeId, "Wrong Team SchemeId") 861 } 862 863 func TestGetTeamMembers(t *testing.T) { 864 th := Setup(t).InitBasic() 865 defer th.TearDown() 866 867 var users []model.User 868 users = append(users, *th.BasicUser) 869 users = append(users, *th.BasicUser2) 870 871 for i := 0; i < 8; i++ { 872 user := model.User{ 873 Email: strings.ToLower(model.NewId()) + "success+test@example.com", 874 Username: fmt.Sprintf("user%v", i), 875 Password: "passwd1", 876 DeleteAt: int64(rand.Intn(2)), 877 } 878 ruser, err := th.App.CreateUser(&user) 879 require.Nil(t, err) 880 require.NotNil(t, ruser) 881 defer th.App.PermanentDeleteUser(&user) 882 883 _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") 884 require.Nil(t, err) 885 886 // Store the users for comparison later 887 users = append(users, *ruser) 888 } 889 890 t.Run("Ensure Sorted By Username when TeamMemberGet options is passed", func(t *testing.T) { 891 members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 100, &model.TeamMembersGetOptions{Sort: model.USERNAME}) 892 require.Nil(t, err) 893 894 // Sort the users array by username 895 sort.Slice(users, func(i, j int) bool { 896 return users[i].Username < users[j].Username 897 }) 898 899 // We should have the same number of users in both users and members array as we have not excluded any deleted members 900 require.Equal(t, len(users), len(members)) 901 for i, member := range members { 902 assert.Equal(t, users[i].Id, member.UserId) 903 } 904 }) 905 906 t.Run("Ensure ExcludedDeletedUsers when TeamMemberGetOptions is passed", func(t *testing.T) { 907 members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 100, &model.TeamMembersGetOptions{ExcludeDeletedUsers: true}) 908 require.Nil(t, err) 909 910 // Choose all users who aren't deleted from our users array 911 var usersNotDeletedIDs []string 912 var membersIDs []string 913 for _, u := range users { 914 if u.DeleteAt == 0 { 915 usersNotDeletedIDs = append(usersNotDeletedIDs, u.Id) 916 } 917 } 918 919 for _, m := range members { 920 membersIDs = append(membersIDs, m.UserId) 921 } 922 923 require.Equal(t, len(usersNotDeletedIDs), len(membersIDs)) 924 require.ElementsMatch(t, usersNotDeletedIDs, membersIDs) 925 }) 926 927 t.Run("Ensure Sorted By Username and ExcludedDeletedUsers when TeamMemberGetOptions is passed", func(t *testing.T) { 928 members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 100, &model.TeamMembersGetOptions{Sort: model.USERNAME, ExcludeDeletedUsers: true}) 929 require.Nil(t, err) 930 931 var usersNotDeleted []model.User 932 for _, u := range users { 933 if u.DeleteAt == 0 { 934 usersNotDeleted = append(usersNotDeleted, u) 935 } 936 } 937 938 // Sort our non deleted members by username 939 sort.Slice(usersNotDeleted, func(i, j int) bool { 940 return usersNotDeleted[i].Username < usersNotDeleted[j].Username 941 }) 942 943 require.Equal(t, len(usersNotDeleted), len(members)) 944 for i, member := range members { 945 assert.Equal(t, usersNotDeleted[i].Id, member.UserId) 946 } 947 }) 948 949 t.Run("Ensure Sorted By User ID when no TeamMemberGetOptions is passed", func(t *testing.T) { 950 951 // Sort them by UserID because the result of GetTeamMembers() is also sorted 952 sort.Slice(users, func(i, j int) bool { 953 return users[i].Id < users[j].Id 954 }) 955 956 // Fetch team members multipile times 957 members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 5, nil) 958 require.Nil(t, err) 959 960 // This should return 5 members 961 members2, err := th.App.GetTeamMembers(th.BasicTeam.Id, 5, 6, nil) 962 require.Nil(t, err) 963 members = append(members, members2...) 964 965 require.Equal(t, len(users), len(members)) 966 for i, member := range members { 967 assert.Equal(t, users[i].Id, member.UserId) 968 } 969 }) 970 } 971 972 func TestGetTeamStats(t *testing.T) { 973 th := Setup(t).InitBasic() 974 defer th.TearDown() 975 976 t.Run("without view restrictions", func(t *testing.T) { 977 teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, nil) 978 require.Nil(t, err) 979 require.NotNil(t, teamStats) 980 members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 5, nil) 981 require.Nil(t, err) 982 assert.Equal(t, int64(len(members)), teamStats.TotalMemberCount) 983 assert.Equal(t, int64(len(members)), teamStats.ActiveMemberCount) 984 }) 985 986 t.Run("with view restrictions by this team", func(t *testing.T) { 987 restrictions := &model.ViewUsersRestrictions{Teams: []string{th.BasicTeam.Id}} 988 teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, restrictions) 989 require.Nil(t, err) 990 require.NotNil(t, teamStats) 991 members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 5, nil) 992 require.Nil(t, err) 993 assert.Equal(t, int64(len(members)), teamStats.TotalMemberCount) 994 assert.Equal(t, int64(len(members)), teamStats.ActiveMemberCount) 995 }) 996 997 t.Run("with view restrictions by valid channel", func(t *testing.T) { 998 restrictions := &model.ViewUsersRestrictions{Teams: []string{}, Channels: []string{th.BasicChannel.Id}} 999 teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, restrictions) 1000 require.Nil(t, err) 1001 require.NotNil(t, teamStats) 1002 members, err := th.App.GetChannelMembersPage(th.BasicChannel.Id, 0, 5) 1003 require.Nil(t, err) 1004 assert.Equal(t, int64(len(*members)), teamStats.TotalMemberCount) 1005 assert.Equal(t, int64(len(*members)), teamStats.ActiveMemberCount) 1006 }) 1007 1008 t.Run("with view restrictions to not see anything", func(t *testing.T) { 1009 restrictions := &model.ViewUsersRestrictions{Teams: []string{}, Channels: []string{}} 1010 teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, restrictions) 1011 require.Nil(t, err) 1012 require.NotNil(t, teamStats) 1013 assert.Equal(t, int64(0), teamStats.TotalMemberCount) 1014 assert.Equal(t, int64(0), teamStats.ActiveMemberCount) 1015 }) 1016 1017 t.Run("with view restrictions by other team", func(t *testing.T) { 1018 restrictions := &model.ViewUsersRestrictions{Teams: []string{"other-team-id"}} 1019 teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, restrictions) 1020 require.Nil(t, err) 1021 require.NotNil(t, teamStats) 1022 assert.Equal(t, int64(0), teamStats.TotalMemberCount) 1023 assert.Equal(t, int64(0), teamStats.ActiveMemberCount) 1024 }) 1025 1026 t.Run("with view restrictions by not-existing channel", func(t *testing.T) { 1027 restrictions := &model.ViewUsersRestrictions{Teams: []string{}, Channels: []string{"test"}} 1028 teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, restrictions) 1029 require.Nil(t, err) 1030 require.NotNil(t, teamStats) 1031 assert.Equal(t, int64(0), teamStats.TotalMemberCount) 1032 assert.Equal(t, int64(0), teamStats.ActiveMemberCount) 1033 }) 1034 } 1035 1036 func TestUpdateTeamMemberRolesChangingGuest(t *testing.T) { 1037 th := Setup(t).InitBasic() 1038 defer th.TearDown() 1039 1040 t.Run("from guest to user", func(t *testing.T) { 1041 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 1042 ruser, _ := th.App.CreateGuest(&user) 1043 1044 _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") 1045 require.Nil(t, err) 1046 1047 _, err = th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, "team_user") 1048 require.NotNil(t, err, "Should fail when try to modify the guest role") 1049 }) 1050 1051 t.Run("from user to guest", func(t *testing.T) { 1052 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 1053 ruser, _ := th.App.CreateUser(&user) 1054 1055 _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") 1056 require.Nil(t, err) 1057 1058 _, err = th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, "team_guest") 1059 require.NotNil(t, err, "Should fail when try to modify the guest role") 1060 }) 1061 1062 t.Run("from user to admin", func(t *testing.T) { 1063 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 1064 ruser, _ := th.App.CreateUser(&user) 1065 1066 _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") 1067 require.Nil(t, err) 1068 1069 _, err = th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, "team_user team_admin") 1070 require.Nil(t, err, "Should work when you not modify guest role") 1071 }) 1072 1073 t.Run("from guest to guest plus custom", func(t *testing.T) { 1074 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 1075 ruser, _ := th.App.CreateGuest(&user) 1076 1077 _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") 1078 require.Nil(t, err) 1079 1080 _, err = th.App.CreateRole(&model.Role{Name: "custom", DisplayName: "custom", Description: "custom"}) 1081 require.Nil(t, err) 1082 1083 _, err = th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, "team_guest custom") 1084 require.Nil(t, err, "Should work when you not modify guest role") 1085 }) 1086 1087 t.Run("a guest cant have user role", func(t *testing.T) { 1088 user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} 1089 ruser, _ := th.App.CreateGuest(&user) 1090 1091 _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") 1092 require.Nil(t, err) 1093 1094 _, err = th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, "team_guest team_user") 1095 require.NotNil(t, err, "Should work when you not modify guest role") 1096 }) 1097 } 1098 1099 func TestInvalidateAllEmailInvites(t *testing.T) { 1100 th := Setup(t) 1101 defer th.TearDown() 1102 1103 t1 := model.Token{ 1104 Token: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 1105 CreateAt: model.GetMillis(), 1106 Type: TokenTypeGuestInvitation, 1107 Extra: "", 1108 } 1109 err := th.App.Srv().Store.Token().Save(&t1) 1110 require.NoError(t, err) 1111 1112 t2 := model.Token{ 1113 Token: "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", 1114 CreateAt: model.GetMillis(), 1115 Type: TokenTypeTeamInvitation, 1116 Extra: "", 1117 } 1118 err = th.App.Srv().Store.Token().Save(&t2) 1119 require.NoError(t, err) 1120 1121 t3 := model.Token{ 1122 Token: "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", 1123 CreateAt: model.GetMillis(), 1124 Type: "other", 1125 Extra: "", 1126 } 1127 err = th.App.Srv().Store.Token().Save(&t3) 1128 require.NoError(t, err) 1129 1130 appErr := th.App.InvalidateAllEmailInvites() 1131 require.Nil(t, appErr) 1132 1133 _, err = th.App.Srv().Store.Token().GetByToken(t1.Token) 1134 require.Error(t, err) 1135 1136 _, err = th.App.Srv().Store.Token().GetByToken(t2.Token) 1137 require.Error(t, err) 1138 1139 _, err = th.App.Srv().Store.Token().GetByToken(t3.Token) 1140 require.NoError(t, err) 1141 } 1142 1143 func TestClearTeamMembersCache(t *testing.T) { 1144 th := SetupWithStoreMock(t) 1145 defer th.TearDown() 1146 1147 mockStore := th.App.Srv().Store.(*mocks.Store) 1148 mockTeamStore := mocks.TeamStore{} 1149 tms := []*model.TeamMember{} 1150 for i := 0; i < 200; i++ { 1151 tms = append(tms, &model.TeamMember{ 1152 TeamId: "1", 1153 }) 1154 } 1155 mockTeamStore.On("GetMembers", "teamID", 0, 100, mock.Anything).Return(tms, nil) 1156 mockTeamStore.On("GetMembers", "teamID", 100, 100, mock.Anything).Return([]*model.TeamMember{{ 1157 TeamId: "1", 1158 }}, nil) 1159 mockStore.On("Team").Return(&mockTeamStore) 1160 1161 th.App.ClearTeamMembersCache("teamID") 1162 }