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