From 1f6c271b3bedd6656ae7155714423b1b39a669c1 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Wed, 16 May 2018 13:43:22 -0400 Subject: MM-8708 Remove api package (#8784) * Remove api package * Remove api dependency from cmd package * Remove EnableAPIv3 setting * Update web tests * Add more websocket tests * Move some ws and oauth tests to api4 package * Move command tests into api4 package * Test fixes * Fix msg command test * Add some app file tests --- api/user_test.go | 2737 ------------------------------------------------------ 1 file changed, 2737 deletions(-) delete mode 100644 api/user_test.go (limited to 'api/user_test.go') diff --git a/api/user_test.go b/api/user_test.go deleted file mode 100644 index 05ec0e096..000000000 --- a/api/user_test.go +++ /dev/null @@ -1,2737 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See License.txt for license information. - -package api - -import ( - "bytes" - "image" - "image/color" - "io" - "mime/multipart" - "net/http" - "os" - "path/filepath" - "strings" - "testing" - "time" - - "github.com/stretchr/testify/assert" - - "github.com/mattermost/mattermost-server/app" - "github.com/mattermost/mattermost-server/model" - "github.com/mattermost/mattermost-server/store" - "github.com/mattermost/mattermost-server/utils" -) - -func TestCreateUser(t *testing.T) { - th := Setup() - defer th.TearDown() - - Client := th.CreateClient() - - user := model.User{Email: strings.ToLower("success+"+model.NewId()) + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "hello1", Username: "n" + model.NewId()} - - ruser, err := Client.CreateUser(&user, "") - if err != nil { - t.Fatal(err) - } - - Client.Login(user.Email, user.Password) - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - th.LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) - - if ruser.Data.(*model.User).Nickname != user.Nickname { - t.Fatal("nickname didn't match") - } - - if ruser.Data.(*model.User).Password != "" { - t.Fatal("password wasn't blank") - } - - if _, err := Client.CreateUser(ruser.Data.(*model.User), ""); err == nil { - t.Fatal("Cannot create an existing") - } - - ruser.Data.(*model.User).Id = "" - ruser.Data.(*model.User).Username = "n" + model.NewId() - ruser.Data.(*model.User).Password = "passwd1" - if _, err := Client.CreateUser(ruser.Data.(*model.User), ""); err != nil { - if err.Message != "An account with that email already exists." { - t.Fatal(err) - } - } - - ruser.Data.(*model.User).Email = "success+" + model.NewId() + "@simulator.amazonses.com" - ruser.Data.(*model.User).Username = user.Username - if _, err := Client.CreateUser(ruser.Data.(*model.User), ""); err != nil { - if err.Message != "An account with that username already exists." { - t.Fatal(err) - } - } - - ruser.Data.(*model.User).Email = "" - if _, err := Client.CreateUser(ruser.Data.(*model.User), ""); err != nil { - if err.Message != "Invalid email" { - t.Fatal(err) - } - } - - if _, err := Client.DoApiPost("/users/create", "garbage"); err == nil { - t.Fatal("should have been an error") - } -} - -func TestLogin(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - th.App.UpdateConfig(func(cfg *model.Config) { - *cfg.EmailSettings.EnableSignInWithEmail = false - *cfg.EmailSettings.EnableSignInWithUsername = false - *cfg.LdapSettings.Enable = false - }) - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - team2 := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_INVITE} - rteam2 := Client.Must(Client.CreateTeam(&team2)) - - Client.Logout() - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Username: "corey" + model.NewId(), Password: "passwd1"} - ruser, _ := Client.CreateUser(&user, "") - th.LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) - - if result, err := Client.LoginById(ruser.Data.(*model.User).Id, user.Password); err != nil { - t.Fatal(err) - } else { - if result.Data.(*model.User).Email != user.Email { - t.Fatal("emails didn't match") - } - } - - if _, err := Client.Login(user.Email, user.Password); err == nil { - t.Fatal("shouldn't be able to log in by email when disabled") - } - - th.App.UpdateConfig(func(cfg *model.Config) { *cfg.EmailSettings.EnableSignInWithEmail = true }) - if result, err := Client.Login(user.Email, user.Password); err != nil { - t.Fatal(err) - } else { - if result.Data.(*model.User).Email != user.Email { - t.Fatal("emails didn't match") - } - } - - if _, err := Client.Login(user.Username, user.Password); err == nil { - t.Fatal("shouldn't be able to log in by username when disabled") - } - - th.App.UpdateConfig(func(cfg *model.Config) { *cfg.EmailSettings.EnableSignInWithUsername = true }) - if result, err := Client.Login(user.Username, user.Password); err != nil { - t.Fatal(err) - } else { - if result.Data.(*model.User).Email != user.Email { - t.Fatal("emails didn't match") - } - } - - if _, err := Client.Login(user.Email, user.Password+"invalid"); err == nil { - t.Fatal("Invalid Password") - } - - if _, err := Client.Login(user.Username, user.Password+"invalid"); err == nil { - t.Fatal("Invalid Password") - } - - if _, err := Client.Login("", user.Password); err == nil { - t.Fatal("should have failed") - } - - if _, err := Client.Login("", user.Password); err == nil { - t.Fatal("should have failed") - } - - authToken := Client.AuthToken - Client.AuthToken = "invalid" - - if _, err := Client.GetUser(ruser.Data.(*model.User).Id, ""); err == nil { - t.Fatal("should have failed") - } - - Client.AuthToken = "" - - user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - - if _, err := Client.CreateUserFromSignup(&user2, "junk", "1231312"); err == nil { - t.Fatal("Should have errored, signed up without hashed email") - } - - token := model.NewToken( - app.TOKEN_TYPE_TEAM_INVITATION, - model.MapToJson(map[string]string{"teamId": rteam2.Data.(*model.Team).Id, "email": user2.Email}), - ) - <-th.App.Srv.Store.Token().Save(token) - props := make(map[string]string) - props["email"] = user2.Email - props["display_name"] = rteam2.Data.(*model.Team).DisplayName - data := model.MapToJson(props) - - ruser2, err := Client.CreateUserFromSignup(&user2, data, token.Token) - if err != nil { - t.Fatal(err) - } - if result := <-th.App.Srv.Store.Token().GetByToken(token.Token); result.Err == nil { - t.Fatal("The token must be deleted after be used") - } - - if _, err := Client.Login(ruser2.Data.(*model.User).Email, user2.Password); err != nil { - t.Fatal("From verified token") - } - - Client.AuthToken = authToken - - user3 := &model.User{ - Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", - Nickname: "Corey Hulen", - Username: "corey" + model.NewId(), - Password: "passwd1", - AuthService: model.USER_AUTH_SERVICE_LDAP, - } - ruser3 := Client.Must(Client.CreateUser(user3, "")).Data.(*model.User) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser3.Id)) - - if _, err := Client.Login(ruser3.Id, user3.Password); err == nil { - t.Fatal("AD/LDAP user should not be able to log in with AD/LDAP disabled") - } -} - -func TestLoginUnverifiedEmail(t *testing.T) { - assert := assert.New(t) - - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - th.App.UpdateConfig(func(cfg *model.Config) { - *cfg.EmailSettings.EnableSignInWithEmail = true - cfg.EmailSettings.RequireEmailVerification = true - }) - - Client.Logout() - - user := &model.User{ - Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", - Nickname: "Corey Hulen", - Username: "corey" + model.NewId(), - Password: "passwd1", - EmailVerified: false, - } - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - - _, err := Client.Login(user.Email, user.Password+"invalid") - if assert.NotNil(err) { - assert.Equal("api.user.check_user_password.invalid.app_error", err.Id) - } - - _, err = Client.Login(user.Email, "passwd1") - if assert.NotNil(err) { - assert.Equal("api.user.login.not_verified.app_error", err.Id) - } -} - -func TestLoginByLdap(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - Client.Logout() - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Username: "corey" + model.NewId(), Password: "passwd1"} - ruser, _ := Client.CreateUser(&user, "") - th.LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) - - if _, err := Client.LoginByLdap(ruser.Data.(*model.User).Id, user.Password); err == nil { - t.Fatal("should have failed to log in with non AD/LDAP user") - } -} - -func TestLoginWithDeviceId(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - user := th.BasicUser - Client.Must(Client.Logout()) - - deviceId := model.NewId() - if result, err := Client.LoginWithDevice(user.Email, user.Password, deviceId); err != nil { - t.Fatal(err) - } else { - ruser := result.Data.(*model.User) - - if ssresult, err := Client.GetSessions(ruser.Id); err != nil { - t.Fatal(err) - } else { - sessions := ssresult.Data.([]*model.Session) - if _, err := Client.LoginWithDevice(user.Email, user.Password, deviceId); err != nil { - t.Fatal(err) - } - - if sresult := <-th.App.Srv.Store.Session().Get(sessions[0].Id); sresult.Err == nil { - t.Fatal("session should have been removed") - } - } - } -} - -func TestPasswordGuessLockout(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - user := th.BasicUser - Client.Must(Client.Logout()) - - th.App.UpdateConfig(func(cfg *model.Config) { *cfg.EmailSettings.EnableSignInWithEmail = true }) - th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.MaximumLoginAttempts = 2 }) - - // OK to log in - if _, err := Client.Login(user.Username, user.Password); err != nil { - t.Fatal(err) - } - - Client.Must(Client.Logout()) - - // Fail twice - if _, err := Client.Login(user.Email, "notthepassword"); err == nil { - t.Fatal("Shouldn't be able to login with bad password.") - } - if _, err := Client.Login(user.Email, "notthepassword"); err == nil { - t.Fatal("Shouldn't be able to login with bad password.") - } - - // Locked out - if _, err := Client.Login(user.Email, user.Password); err == nil { - t.Fatal("Shouldn't be able to login with password when account is locked out.") - } -} - -func TestSessions(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - user := th.BasicUser - Client.Must(Client.Logout()) - - deviceId := model.NewId() - Client.LoginWithDevice(user.Email, user.Password, deviceId) - Client.Login(user.Email, user.Password) - - r1, err := Client.GetSessions(user.Id) - if err != nil { - t.Fatal(err) - } - - sessions := r1.Data.([]*model.Session) - otherSession := "" - - if len(sessions) != 2 { - t.Fatal("invalid number of sessions") - } - - for _, session := range sessions { - if session.DeviceId == deviceId { - otherSession = session.Id - } - - if len(session.Token) != 0 { - t.Fatal("shouldn't return session tokens") - } - } - - if _, err := Client.RevokeSession(otherSession); err != nil { - t.Fatal(err) - } - - r2, err := Client.GetSessions(user.Id) - if err != nil { - t.Fatal(err) - } - - sessions2 := r2.Data.([]*model.Session) - - if len(sessions2) != 1 { - t.Fatal("invalid number of sessions") - } -} - -func TestGetUser(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - team2 := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam2, _ := Client.CreateTeam(&team2) - - Client.Logout() - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - ruser, _ := Client.CreateUser(&user, "") - th.LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) - - user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", FirstName: "Corey", LastName: "Hulen"} - ruser2, _ := Client.CreateUser(&user2, "") - th.LinkUserToTeam(ruser2.Data.(*model.User), rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser2.Data.(*model.User).Id)) - - user3 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - ruser3, _ := Client.CreateUser(&user3, "") - th.LinkUserToTeam(ruser3.Data.(*model.User), rteam2.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser3.Data.(*model.User).Id)) - - Client.Login(user.Email, user.Password) - - rId := ruser.Data.(*model.User).Id - if result, err := Client.GetUser(rId, ""); err != nil { - t.Fatal("Failed to get user") - } else { - if result.Data.(*model.User).Password != "" { - t.Fatal("User shouldn't have any password data once set") - } - - if cache_result, err := Client.GetUser(rId, result.Etag); err != nil { - t.Fatal(err) - } else if cache_result.Data.(*model.User) != nil { - t.Fatal("cache should be empty") - } - } - - if result, err := Client.GetMe(""); err != nil { - t.Fatal("Failed to get user") - } else { - if result.Data.(*model.User).Password != "" { - t.Fatal("User shouldn't have any password data once set") - } - } - - if _, err := Client.GetUser("FORBIDDENERROR", ""); err == nil { - t.Fatal("shouldn't exist") - } - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = false }) - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = false }) - - if result, err := Client.GetUser(ruser2.Data.(*model.User).Id, ""); err != nil { - t.Fatal(err) - } else { - u := result.Data.(*model.User) - if u.Password != "" { - t.Fatal("password must be empty") - } - if *u.AuthData != "" { - t.Fatal("auth data must be empty") - } - if u.Email != "" { - t.Fatal("email should be sanitized") - } - if u.FirstName != "" { - t.Fatal("full name should be sanitized") - } - if u.LastName != "" { - t.Fatal("full name should be sanitized") - } - } - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = true }) - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = true }) - - if result, err := Client.GetUser(ruser2.Data.(*model.User).Id, ""); err != nil { - t.Fatal(err) - } else { - u := result.Data.(*model.User) - if u.Email == "" { - t.Fatal("email should not be sanitized") - } - if u.FirstName == "" { - t.Fatal("full name should not be sanitized") - } - if u.LastName == "" { - t.Fatal("full name should not be sanitized") - } - } - - if userMap, err := Client.GetProfilesInTeam(rteam.Data.(*model.Team).Id, 0, 100, ""); err != nil { - t.Fatal(err) - } else if len(userMap.Data.(map[string]*model.User)) != 3 { - t.Fatal("should have been 3") - } else if userMap.Data.(map[string]*model.User)[rId].Id != rId { - t.Fatal("should have been valid") - } else { - - // test etag caching - if cache_result, err := Client.GetProfilesInTeam(rteam.Data.(*model.Team).Id, 0, 100, userMap.Etag); err != nil { - t.Fatal(err) - } else if cache_result.Data.(map[string]*model.User) != nil { - t.Log(cache_result.Data) - t.Fatal("cache should be empty") - } - } - - if userMap, err := Client.GetProfilesInTeam(rteam.Data.(*model.Team).Id, 0, 1, ""); err != nil { - t.Fatal(err) - } else if len(userMap.Data.(map[string]*model.User)) != 1 { - t.Fatal("should have been 1") - } - - if userMap, err := Client.GetProfilesInTeam(rteam.Data.(*model.Team).Id, 1, 1, ""); err != nil { - t.Fatal(err) - } else if len(userMap.Data.(map[string]*model.User)) != 1 { - t.Fatal("should have been 1") - } - - if userMap, err := Client.GetProfilesInTeam(rteam.Data.(*model.Team).Id, 10, 10, ""); err != nil { - t.Fatal(err) - } else if len(userMap.Data.(map[string]*model.User)) != 0 { - t.Fatal("should have been 0") - } - - if _, err := Client.GetProfilesInTeam(rteam2.Data.(*model.Team).Id, 0, 100, ""); err == nil { - t.Fatal("shouldn't have access") - } - - Client.AuthToken = "" - if _, err := Client.GetUser(ruser2.Data.(*model.User).Id, ""); err == nil { - t.Fatal("shouldn't have accss") - } - - th.App.UpdateUserRoles(ruser.Data.(*model.User).Id, model.SYSTEM_ADMIN_ROLE_ID, false) - - Client.Login(user.Email, "passwd1") - - if _, err := Client.GetProfilesInTeam(rteam2.Data.(*model.Team).Id, 0, 100, ""); err != nil { - t.Fatal(err) - } -} - -func TestGetProfiles(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - th.BasicClient.Must(th.BasicClient.CreateDirectChannel(th.BasicUser2.Id)) - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = true }) - - if result, err := th.BasicClient.GetProfiles(0, 100, ""); err != nil { - t.Fatal(err) - } else { - users := result.Data.(map[string]*model.User) - - if len(users) < 1 { - t.Fatal("map was wrong length") - } - - for _, user := range users { - if user.Email == "" { - t.Fatal("problem with show email") - } - } - - // test etag caching - if cache_result, err := th.BasicClient.GetProfiles(0, 100, result.Etag); err != nil { - t.Fatal(err) - } else if cache_result.Data.(map[string]*model.User) != nil { - t.Log(cache_result.Etag) - t.Log(result.Etag) - t.Fatal("cache should be empty") - } - } - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = false }) - - if result, err := th.BasicClient.GetProfiles(0, 100, ""); err != nil { - t.Fatal(err) - } else { - users := result.Data.(map[string]*model.User) - - if len(users) < 1 { - t.Fatal("map was wrong length") - } - - for _, user := range users { - if user.Email != "" { - t.Fatal("problem with show email") - } - } - } -} - -func TestGetProfilesByIds(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = true }) - - if result, err := th.BasicClient.GetProfilesByIds([]string{th.BasicUser.Id}); err != nil { - t.Fatal(err) - } else { - users := result.Data.(map[string]*model.User) - - if len(users) != 1 { - t.Fatal("map was wrong length") - } - - for _, user := range users { - if user.Email == "" { - t.Fatal("problem with show email") - } - } - } - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = false }) - - if result, err := th.BasicClient.GetProfilesByIds([]string{th.BasicUser.Id}); err != nil { - t.Fatal(err) - } else { - users := result.Data.(map[string]*model.User) - - if len(users) != 1 { - t.Fatal("map was wrong length") - } - - for _, user := range users { - if user.Email != "" { - t.Fatal("problem with show email") - } - } - } - - if result, err := th.BasicClient.GetProfilesByIds([]string{th.BasicUser.Id, th.BasicUser2.Id}); err != nil { - t.Fatal(err) - } else { - users := result.Data.(map[string]*model.User) - - if len(users) != 2 { - t.Fatal("map was wrong length") - } - } -} - -func TestGetAudits(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - Client.Logout() - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - ruser, _ := Client.CreateUser(&user, "") - th.LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) - - time.Sleep(100 * time.Millisecond) - - Client.Login(user.Email, user.Password) - - time.Sleep(100 * time.Millisecond) - - if result, err := Client.GetAudits(ruser.Data.(*model.User).Id, ""); err != nil { - t.Fatal(err) - } else { - - if len(result.Data.(model.Audits)) != 1 { - t.Fatal(result.Data.(model.Audits)) - } - - if cache_result, err := Client.GetAudits(ruser.Data.(*model.User).Id, result.Etag); err != nil { - t.Fatal(err) - } else if cache_result.Data.(model.Audits) != nil { - t.Fatal("cache should be empty") - } - } - - if _, err := Client.GetAudits("FORBIDDENERROR", ""); err == nil { - t.Fatal("audit log shouldn't exist") - } -} - -func TestUserCreateImage(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - b, err := app.CreateProfileImage("Corey Hulen", "eo1zkdr96pdj98pjmq8zy35wba", th.App.Config().FileSettings.InitialFont) - if err != nil { - t.Fatal(err) - } - - rdr := bytes.NewReader(b) - img, _, err2 := image.Decode(rdr) - if err2 != nil { - t.Fatal(err) - } - - colorful := color.RGBA{116, 49, 196, 255} - - if img.At(1, 1) != colorful { - t.Fatal("Failed to create correct color") - } - - team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id)) - - Client.Login(user.Email, "passwd1") - - if resp, err := Client.DoApiGet("/users/"+user.Id+"/image", "", ""); err != nil { - t.Fatal(err) - } else { - etag := resp.Header.Get(model.HEADER_ETAG_SERVER) - resp2, _ := Client.DoApiGet("/users/"+user.Id+"/image", "", etag) - if resp2.StatusCode == 304 { - t.Fatal("Shouldn't have hit etag") - } - } - - if *th.App.Config().FileSettings.DriverName == model.IMAGE_DRIVER_S3 { - endpoint := th.App.Config().FileSettings.AmazonS3Endpoint - accessKey := th.App.Config().FileSettings.AmazonS3AccessKeyId - secretKey := th.App.Config().FileSettings.AmazonS3SecretAccessKey - secure := *th.App.Config().FileSettings.AmazonS3SSL - signV2 := *th.App.Config().FileSettings.AmazonS3SignV2 - region := th.App.Config().FileSettings.AmazonS3Region - s3Clnt, err := s3New(endpoint, accessKey, secretKey, secure, signV2, region) - if err != nil { - t.Fatal(err) - } - bucket := th.App.Config().FileSettings.AmazonS3Bucket - if err = s3Clnt.RemoveObject(bucket, "/users/"+user.Id+"/profile.png"); err != nil { - t.Fatal(err) - } - } else { - path := th.App.Config().FileSettings.Directory + "/users/" + user.Id + "/profile.png" - if err := os.Remove(path); err != nil { - t.Fatal("Couldn't remove file at " + path) - } - } -} - -func TestUserUploadProfileImage(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - - Client.Logout() - - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id)) - - if *th.App.Config().FileSettings.DriverName != "" { - - body := &bytes.Buffer{} - writer := multipart.NewWriter(body) - - if _, upErr := Client.UploadProfileFile(body.Bytes(), writer.FormDataContentType()); upErr == nil { - t.Fatal("Should have errored") - } - - Client.Login(user.Email, "passwd1") - Client.SetTeamId(team.Id) - - if _, upErr := Client.UploadProfileFile(body.Bytes(), writer.FormDataContentType()); upErr == nil { - t.Fatal("Should have errored") - } - - part, err := writer.CreateFormFile("blargh", "test.png") - if err != nil { - t.Fatal(err) - } - - path, _ := utils.FindDir("tests") - file, err := os.Open(filepath.Join(path, "test.png")) - if err != nil { - t.Fatal(err) - } - defer file.Close() - - _, err = io.Copy(part, file) - if err != nil { - t.Fatal(err) - } - - if err := writer.Close(); err != nil { - t.Fatal(err) - } - - if _, upErr := Client.UploadProfileFile(body.Bytes(), writer.FormDataContentType()); upErr == nil { - t.Fatal("Should have errored") - } - - file2, err := os.Open(path + "/test.png") - if err != nil { - t.Fatal(err) - } - defer file2.Close() - - body = &bytes.Buffer{} - writer = multipart.NewWriter(body) - - part, err = writer.CreateFormFile("image", "test.png") - if err != nil { - t.Fatal(err) - } - - if _, err := io.Copy(part, file2); err != nil { - t.Fatal(err) - } - - if err := writer.Close(); err != nil { - t.Fatal(err) - } - - if _, upErr := Client.UploadProfileFile(body.Bytes(), writer.FormDataContentType()); upErr != nil { - t.Fatal(upErr) - } - - Client.DoApiGet("/users/"+user.Id+"/image", "", "") - - if *th.App.Config().FileSettings.DriverName == model.IMAGE_DRIVER_S3 { - endpoint := th.App.Config().FileSettings.AmazonS3Endpoint - accessKey := th.App.Config().FileSettings.AmazonS3AccessKeyId - secretKey := th.App.Config().FileSettings.AmazonS3SecretAccessKey - secure := *th.App.Config().FileSettings.AmazonS3SSL - signV2 := *th.App.Config().FileSettings.AmazonS3SignV2 - region := th.App.Config().FileSettings.AmazonS3Region - s3Clnt, err := s3New(endpoint, accessKey, secretKey, secure, signV2, region) - if err != nil { - t.Fatal(err) - } - bucket := th.App.Config().FileSettings.AmazonS3Bucket - if err = s3Clnt.RemoveObject(bucket, "/users/"+user.Id+"/profile.png"); err != nil { - t.Fatal(err) - } - } else { - path := th.App.Config().FileSettings.Directory + "users/" + user.Id + "/profile.png" - if err := os.Remove(path); err != nil { - t.Fatal("Couldn't remove file at " + path) - } - } - } else { - body := &bytes.Buffer{} - writer := multipart.NewWriter(body) - if _, upErr := Client.UploadProfileFile(body.Bytes(), writer.FormDataContentType()); upErr.StatusCode != http.StatusNotImplemented { - t.Fatal("Should have failed with 501 - Not Implemented") - } - } -} - -func TestUserUpdate(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - - Client.Logout() - - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Roles: ""} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id)) - - if _, err := Client.UpdateUser(user); err == nil { - t.Fatal("Should have errored") - } - - Client.Login(user.Email, "passwd1") - Client.SetTeamId(team.Id) - - user.Nickname = "Jim Jimmy" - user.Roles = model.SYSTEM_ADMIN_ROLE_ID - user.LastPasswordUpdate = 123 - - if result, err := Client.UpdateUser(user); err != nil { - t.Fatal(err) - } else { - if result.Data.(*model.User).Nickname != "Jim Jimmy" { - t.Fatal("Nickname did not update properly") - } - if result.Data.(*model.User).Roles != model.SYSTEM_USER_ROLE_ID { - t.Fatal("Roles should not have updated") - } - if result.Data.(*model.User).LastPasswordUpdate == 123 { - t.Fatal("LastPasswordUpdate should not have updated") - } - } - - user2 := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) - th.LinkUserToTeam(user2, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user2.Id)) - - Client.Login(user2.Email, "passwd1") - Client.SetTeamId(team.Id) - - user.Nickname = "Tim Timmy" - - if _, err := Client.UpdateUser(user); err == nil { - t.Fatal("Should have errored") - } -} - -func TestUserUpdatePassword(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - - Client.Logout() - Client.SetTeamId(team.Id) - - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id)) - - if _, err := Client.UpdateUserPassword(user.Id, "passwd1", "newpasswd1"); err == nil { - t.Fatal("Should have errored") - } - - Client.Login(user.Email, "passwd1") - - if _, err := Client.UpdateUserPassword("123", "passwd1", "newpwd"); err == nil { - t.Fatal("Should have errored") - } - - if _, err := Client.UpdateUserPassword(user.Id, "", "newpwd"); err == nil { - t.Fatal("Should have errored") - } - - if _, err := Client.UpdateUserPassword(user.Id, "passwd1", "npwd"); err == nil { - t.Fatal("Should have errored") - } - - if _, err := Client.UpdateUserPassword("12345678901234567890123456", "passwd1", "newpwd1"); err == nil { - t.Fatal("Should have errored") - } - - if _, err := Client.UpdateUserPassword(user.Id, "badpwd", "newpwd"); err == nil { - t.Fatal("Should have errored") - } - - if _, err := Client.UpdateUserPassword(user.Id, "passwd1", "newpwd1"); err != nil { - t.Fatal(err) - } - - updatedUser := Client.Must(Client.GetUser(user.Id, "")).Data.(*model.User) - if updatedUser.LastPasswordUpdate == user.LastPasswordUpdate { - t.Fatal("LastPasswordUpdate should have changed") - } - - if _, err := Client.Login(user.Email, "newpwd1"); err != nil { - t.Fatal(err) - } - - // Test lockout - th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.MaximumLoginAttempts = 2 }) - - // Fail twice - if _, err := Client.UpdateUserPassword(user.Id, "badpwd", "newpwd"); err == nil { - t.Fatal("Should have errored") - } - if _, err := Client.UpdateUserPassword(user.Id, "badpwd", "newpwd"); err == nil { - t.Fatal("Should have errored") - } - - // Should fail because account is locked out - if _, err := Client.UpdateUserPassword(user.Id, "newpwd1", "newpwd2"); err == nil { - t.Fatal("Should have errored") - } - - user2 := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) - th.LinkUserToTeam(user2, team) - - Client.Login(user2.Email, "passwd1") - - if _, err := Client.UpdateUserPassword(user.Id, "passwd1", "newpwd"); err == nil { - t.Fatal("Should have errored") - } -} - -func TestUserUpdateRoles(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - - Client.Logout() - - user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id)) - - user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) - th.LinkUserToTeam(user2, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user2.Id)) - - if _, err := Client.UpdateUserRoles(user.Id, ""); err == nil { - t.Fatal("Should have errored, not logged in") - } - - Client.Login(user2.Email, "passwd1") - Client.SetTeamId(team.Id) - - if _, err := Client.UpdateUserRoles(user.Id, ""); err == nil { - t.Fatal("Should have errored, not admin") - } - - team2 := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team2 = Client.Must(Client.CreateTeam(team2)).Data.(*model.Team) - - user3 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user3 = Client.Must(Client.CreateUser(user3, "")).Data.(*model.User) - th.LinkUserToTeam(user3, team2) - store.Must(th.App.Srv.Store.User().VerifyEmail(user3.Id)) - - Client.Login(user3.Email, "passwd1") - Client.SetTeamId(team2.Id) - - if _, err := Client.UpdateUserRoles(user2.Id, ""); err == nil { - t.Fatal("Should have errored, wrong team") - } - - Client.Login(user.Email, "passwd1") - - if _, err := Client.UpdateUserRoles("junk", ""); err == nil { - t.Fatal("Should have errored, bad id") - } - - if _, err := Client.UpdateUserRoles("system_admin", ""); err == nil { - t.Fatal("Should have errored, we want to avoid this mistake") - } - - if _, err := Client.UpdateUserRoles("12345678901234567890123456", ""); err == nil { - t.Fatal("Should have errored, bad id") - } - - if _, err := Client.UpdateUserRoles(user2.Id, "junk"); err == nil { - t.Fatal("Should have errored, bad role") - } -} - -func TestUserUpdateRolesMoreCases(t *testing.T) { - th := Setup().InitSystemAdmin().InitBasic() - defer th.TearDown() - - th.SystemAdminClient.SetTeamId(th.BasicTeam.Id) - th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam) - - const BASIC_USER = "system_user" - const SYSTEM_ADMIN = "system_user system_admin" - - // user 1 is trying to promote user 2 - if _, err := th.BasicClient.UpdateUserRoles(th.BasicUser2.Id, SYSTEM_ADMIN); err == nil { - t.Fatal("Should have errored, basic user is not a system admin") - } - - // user 1 is trying to demote system admin - if _, err := th.BasicClient.UpdateUserRoles(th.SystemAdminUser.Id, BASIC_USER); err == nil { - t.Fatal("Should have errored, can only be system admin") - } - - // user 1 is trying to promote himself - if _, err := th.BasicClient.UpdateUserRoles(th.BasicUser.Id, SYSTEM_ADMIN); err == nil { - t.Fatal("Should have errored, can only be system admin") - } - - // System admin promoting user 2 - if _, err := th.SystemAdminClient.UpdateUserRoles(th.BasicUser2.Id, SYSTEM_ADMIN); err != nil { - t.Fatal("Should have succeeded since they are system admin") - } - - // System admin demoting user 2 - if _, err := th.SystemAdminClient.UpdateUserRoles(th.BasicUser2.Id, BASIC_USER); err != nil { - t.Fatal("Should have succeeded since they are system admin") - } - - // Setting user to team admin should have no effect on results - th.BasicClient.Must(th.SystemAdminClient.UpdateTeamRoles(th.BasicUser.Id, "team_user team_admin")) - - // user 1 is trying to promote user 2 - if _, err := th.BasicClient.UpdateUserRoles(th.BasicUser2.Id, SYSTEM_ADMIN); err == nil { - t.Fatal("Should have errored, basic user is not a system admin") - } - - // user 1 is trying to demote system admin - if _, err := th.BasicClient.UpdateUserRoles(th.SystemAdminUser.Id, BASIC_USER); err == nil { - t.Fatal("Should have errored, can only be system admin") - } - - // user 1 is trying to promote himself - if _, err := th.BasicClient.UpdateUserRoles(th.BasicUser.Id, SYSTEM_ADMIN); err == nil { - t.Fatal("Should have errored, can only be system admin") - } - - // system admin demoting himself - if _, err := th.SystemAdminClient.UpdateUserRoles(th.SystemAdminUser.Id, BASIC_USER); err != nil { - t.Fatal("Should have succeeded since they are system admin") - } -} - -func TestUserUpdateDeviceId(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - - user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id)) - - Client.Login(user.Email, "passwd1") - Client.SetTeamId(team.Id) - deviceId := model.PUSH_NOTIFY_APPLE + ":1234567890" - - if _, err := Client.AttachDeviceId(deviceId); err != nil { - t.Fatal(err) - } - - if result := <-th.App.Srv.Store.Session().GetSessions(user.Id); result.Err != nil { - t.Fatal(result.Err) - } else { - sessions := result.Data.([]*model.Session) - - if sessions[0].DeviceId != deviceId { - t.Fatal("Missing device Id") - } - } -} - -func TestUserUpdateDeviceId2(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - - user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id)) - - Client.Login(user.Email, "passwd1") - Client.SetTeamId(team.Id) - deviceId := model.PUSH_NOTIFY_APPLE_REACT_NATIVE + ":1234567890" - - if _, err := Client.AttachDeviceId(deviceId); err != nil { - t.Fatal(err) - } - - if result := <-th.App.Srv.Store.Session().GetSessions(user.Id); result.Err != nil { - t.Fatal(result.Err) - } else { - sessions := result.Data.([]*model.Session) - - if sessions[0].DeviceId != deviceId { - t.Fatal("Missing device Id") - } - } -} - -func TestUserUpdateActive(t *testing.T) { - th := Setup().InitBasic().InitSystemAdmin() - defer th.TearDown() - - Client := th.BasicClient - SystemAdminClient := th.SystemAdminClient - - team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - - team2 := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team2 = Client.Must(Client.CreateTeam(team2)).Data.(*model.Team) - - Client.Logout() - - user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id)) - - user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) - th.LinkUserToTeam(user2, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user2.Id)) - - if _, err := Client.UpdateActive(user.Id, false); err == nil { - t.Fatal("Should have errored, not logged in") - } - - Client.Login(user2.Email, "passwd1") - Client.SetTeamId(team.Id) - - if _, err := Client.UpdateActive(user.Id, false); err == nil { - t.Fatal("Should have errored, not admin") - } - - Client.Must(Client.Logout()) - - user3 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user3 = Client.Must(Client.CreateUser(user3, "")).Data.(*model.User) - th.LinkUserToTeam(user2, team2) - store.Must(th.App.Srv.Store.User().VerifyEmail(user3.Id)) - - Client.Login(user3.Email, "passwd1") - Client.SetTeamId(team2.Id) - - if _, err := Client.UpdateActive(user.Id, false); err == nil { - t.Fatal("Should have errored, not yourself") - } - - Client.Login(user.Email, "passwd1") - Client.SetTeamId(team.Id) - - if _, err := Client.UpdateActive("junk", false); err == nil { - t.Fatal("Should have errored, bad id") - } - - if _, err := Client.UpdateActive("12345678901234567890123456", false); err == nil { - t.Fatal("Should have errored, bad id") - } - - th.App.SetStatusOnline(user3.Id, "", false) - - if _, err := SystemAdminClient.UpdateActive(user3.Id, false); err != nil { - t.Fatal(err) - } - - if status, err := th.App.GetStatus(user3.Id); err != nil { - t.Fatal(err) - } else if status.Status != model.STATUS_OFFLINE { - t.Fatal("status should have been set to offline") - } -} - -func TestUserPermDelete(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - - user1 := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user1 = Client.Must(Client.CreateUser(user1, "")).Data.(*model.User) - th.LinkUserToTeam(user1, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user1.Id)) - - Client.Login(user1.Email, "passwd1") - Client.SetTeamId(team.Id) - - channel1 := &model.Channel{DisplayName: "TestGetPosts", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id} - channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel) - - post1 := &model.Post{ChannelId: channel1.Id, Message: "search for post1"} - post1 = Client.Must(Client.CreatePost(post1)).Data.(*model.Post) - - post2 := &model.Post{ChannelId: channel1.Id, Message: "search for post2"} - post2 = Client.Must(Client.CreatePost(post2)).Data.(*model.Post) - - post3 := &model.Post{ChannelId: channel1.Id, Message: "#hashtag search for post3"} - post3 = Client.Must(Client.CreatePost(post3)).Data.(*model.Post) - - post4 := &model.Post{ChannelId: channel1.Id, Message: "hashtag for post4"} - post4 = Client.Must(Client.CreatePost(post4)).Data.(*model.Post) - - c := &Context{} - c.RequestId = model.NewId() - c.IpAddress = "test" - - err := th.App.PermanentDeleteUser(user1) - if err != nil { - t.Fatal(err) - } - - Client.ClearOAuthToken() -} - -func TestSendPasswordReset(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id)) - - Client.Logout() - - if result, err := Client.SendPasswordReset(user.Email); err != nil { - t.Fatal(err) - } else { - resp := result.Data.(map[string]string) - if resp["email"] != user.Email { - t.Fatal("wrong email") - } - } - - if _, err := Client.SendPasswordReset("junk@junk.com"); err != nil { - t.Fatal("Should have errored - bad email") - } - - if _, err := Client.SendPasswordReset(""); err == nil { - t.Fatal("Should have errored - no email") - } - - authData := model.NewId() - user2 := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", AuthData: &authData, AuthService: "random"} - user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) - th.LinkUserToTeam(user2, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user2.Id)) - - if _, err := Client.SendPasswordReset(user2.Email); err == nil { - t.Fatal("should have errored - SSO user can't send reset password link") - } -} - -/*func TestResetPassword(t *testing.T) { - th := Setup().InitSystemAdmin() - Client := th.SystemAdminClient - team := th.SystemAdminTeam - - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id)) - - //Delete all the messages before check the reset password - utils.DeleteMailBox(user.Email) - - Client.Must(Client.SendPasswordReset(user.Email)) - - //Check if the email was send to the rigth email address and the recovery key match - var resultsMailbox utils.JSONMessageHeaderInbucket - err := utils.RetryInbucket(5, func() error { - var err error - resultsMailbox, err = utils.GetMailBox(user.Email) - return err - }) - if err != nil { - t.Log(err) - t.Log("No email was received, maybe due load on the server. Disabling this verification") - } - - var recoveryTokenString string - if err == nil && len(resultsMailbox) > 0 { - if !strings.ContainsAny(resultsMailbox[0].To[0], user.Email) { - t.Fatal("Wrong To recipient") - } else { - if resultsEmail, err := utils.GetMessageFromMailbox(user.Email, resultsMailbox[0].ID); err == nil { - loc := strings.Index(resultsEmail.Body.Text, "token=") - if loc == -1 { - t.Log(recoveryTokenString) - t.Log(resultsEmail.Body.Text) - t.Fatal("Code not found in email") - } - loc += 6 - recoveryTokenString = resultsEmail.Body.Text[loc : loc+model.TOKEN_SIZE] - t.Log(resultsEmail.Body.Text) - } - } - } - - var recoveryToken *model.Token - if result := <-th.App.Srv.Store.Token().GetByToken(recoveryTokenString); result.Err != nil { - t.Log(recoveryTokenString) - t.Fatal(result.Err) - } else { - recoveryToken = result.Data.(*model.Token) - } - - if recoveryToken.Token != recoveryTokenString { - t.Fatal("Did not send the correct token. DB: "+recoveryToken.Token, " Sent: "+recoveryTokenString) - } - - if _, err := Client.ResetPassword(recoveryToken.Token, ""); err == nil { - t.Fatal("Should have errored - no password") - } - - if _, err := Client.ResetPassword(recoveryToken.Token, "newp"); err == nil { - t.Fatal("Should have errored - password too short") - } - - if _, err := Client.ResetPassword("", "newpwd"); err == nil { - t.Fatal("Should have errored - no code") - } - - if _, err := Client.ResetPassword("junk", "newpwd"); err == nil { - t.Fatal("Should have errored - bad code") - } - - code := "" - for i := 0; i < model.TOKEN_SIZE; i++ { - code += "a" - } - if _, err := Client.ResetPassword(code, "newpwd1"); err == nil { - t.Fatal("Should have errored - bad code") - } - - if _, err := Client.ResetPassword(recoveryToken.Token, "newpwd1"); err != nil { - t.Log(recoveryToken.Token) - t.Fatal(err) - } - -}*/ - -func TestUserUpdateNotify(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - - Client.Logout() - - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Roles: ""} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, team) - store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id)) - - data := make(map[string]string) - data["user_id"] = user.Id - data["email"] = "true" - data["desktop"] = "all" - data["desktop_sound"] = "false" - data["comments"] = "any" - - if _, err := Client.UpdateUserNotify(data); err == nil { - t.Fatal("Should have errored - not logged in") - } - - Client.Login(user.Email, "passwd1") - Client.SetTeamId(team.Id) - - if result, err := Client.UpdateUserNotify(data); err != nil { - t.Fatal(err) - } else { - if result.Data.(*model.User).NotifyProps["desktop"] != data["desktop"] { - t.Fatal("NotifyProps did not update properly - desktop") - } - if result.Data.(*model.User).NotifyProps["desktop_sound"] != data["desktop_sound"] { - t.Fatal("NotifyProps did not update properly - desktop_sound") - } - if result.Data.(*model.User).NotifyProps["email"] != data["email"] { - t.Fatal("NotifyProps did not update properly - email") - } - if result.Data.(*model.User).NotifyProps["comments"] != data["comments"] { - t.Fatal("NotifyProps did not update properly - comments") - } - } - - if _, err := Client.UpdateUserNotify(nil); err == nil { - t.Fatal("Should have errored") - } - - data["user_id"] = "junk" - if _, err := Client.UpdateUserNotify(data); err == nil { - t.Fatal("Should have errored - junk user id") - } - - data["user_id"] = "12345678901234567890123456" - if _, err := Client.UpdateUserNotify(data); err == nil { - t.Fatal("Should have errored - bad user id") - } - - data["user_id"] = user.Id - data["desktop"] = "" - if _, err := Client.UpdateUserNotify(data); err == nil { - t.Fatal("Should have errored - empty desktop notify") - } - - data["desktop"] = "all" - data["desktop_sound"] = "" - if _, err := Client.UpdateUserNotify(data); err == nil { - t.Fatal("Should have errored - empty desktop sound") - } - - data["desktop_sound"] = "false" - data["email"] = "" - if _, err := Client.UpdateUserNotify(data); err == nil { - t.Fatal("Should have errored - empty email") - } - - data["email"] = "true" - data["comments"] = "" - if _, err := Client.UpdateUserNotify(data); err == nil { - t.Fatal("Should have errored - empty comments") - } -} - -func TestFuzzyUserCreate(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - Client.Logout() - - for i := 0; i < len(utils.FUZZY_STRINGS_NAMES) || i < len(utils.FUZZY_STRINGS_EMAILS); i++ { - testName := "Name" - testEmail := "test@nowhere.com" - - if i < len(utils.FUZZY_STRINGS_NAMES) { - testName = utils.FUZZY_STRINGS_NAMES[i] - } - if i < len(utils.FUZZY_STRINGS_EMAILS) { - testEmail = utils.FUZZY_STRINGS_EMAILS[i] - } - - user := model.User{Email: strings.ToLower(model.NewId()) + testEmail, Nickname: testName, Password: "hello1"} - - ruser, err := Client.CreateUser(&user, "") - if err != nil { - t.Fatal(err) - } - - th.LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) - } -} - -func TestEmailToOAuth(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - Client.Logout() - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - ruser := Client.Must(Client.CreateUser(&user, "")).Data.(*model.User) - th.LinkUserToTeam(ruser, rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Id)) - - m := map[string]string{} - if _, err := Client.EmailToOAuth(m); err == nil { - t.Fatal("should have failed - empty data") - } - - m["password"] = "passwd1" - _, err := Client.EmailToOAuth(m) - if err == nil { - t.Fatal("should have failed - missing team_name, service, email") - } - - m["team_name"] = team.Name - if _, err := Client.EmailToOAuth(m); err == nil { - t.Fatal("should have failed - missing service, email") - } - - m["service"] = "someservice" - if _, err := Client.EmailToOAuth(m); err == nil { - t.Fatal("should have failed - missing email") - } - - m["team_name"] = "junk" - if _, err := Client.EmailToOAuth(m); err == nil { - t.Fatal("should have failed - bad team name") - } - - m["team_name"] = team.Name - m["email"] = "junk" - if _, err := Client.EmailToOAuth(m); err == nil { - t.Fatal("should have failed - bad email") - } - - m["email"] = ruser.Email - m["password"] = "junk" - if _, err := Client.EmailToOAuth(m); err == nil { - t.Fatal("should have failed - bad password") - } -} - -func TestOAuthToEmail(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - Client.Logout() - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - ruser := Client.Must(Client.CreateUser(&user, "")).Data.(*model.User) - th.LinkUserToTeam(ruser, rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Id)) - - user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - ruser2 := Client.Must(Client.CreateUser(&user2, "")).Data.(*model.User) - th.LinkUserToTeam(ruser2, rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser2.Id)) - - m := map[string]string{} - if _, err := Client.OAuthToEmail(m); err == nil { - t.Fatal("should have failed - not logged in") - } - - Client.Login(user.Email, user.Password) - - if _, err := Client.OAuthToEmail(m); err == nil { - t.Fatal("should have failed - empty data") - } - - m["password"] = "passwd1" - _, err := Client.OAuthToEmail(m) - if err == nil { - t.Fatal("should have failed - missing team_name, service, email") - } - - m["team_name"] = team.Name - if _, err := Client.OAuthToEmail(m); err == nil { - t.Fatal("should have failed - missing email") - } - - m["team_name"] = team.Name - m["email"] = "junk" - if _, err := Client.OAuthToEmail(m); err == nil { - t.Fatal("should have failed - bad email") - } - - m["email"] = ruser2.Email - if _, err := Client.OAuthToEmail(m); err == nil { - t.Fatal("should have failed - wrong user") - } -} - -func TestLDAPToEmail(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - ruser := Client.Must(Client.CreateUser(&user, "")).Data.(*model.User) - th.LinkUserToTeam(ruser, rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Id)) - - Client.Login(user.Email, user.Password) - - m := map[string]string{} - if _, err := Client.LDAPToEmail(m); err == nil { - t.Fatal("should have failed - empty data") - } - - m["email_password"] = "passwd1" - _, err := Client.LDAPToEmail(m) - if err == nil { - t.Fatal("should have failed - missing team_name, ldap_password, email") - } - - m["team_name"] = team.Name - if _, err := Client.LDAPToEmail(m); err == nil { - t.Fatal("should have failed - missing email, ldap_password") - } - - m["ldap_password"] = "passwd1" - if _, err := Client.LDAPToEmail(m); err == nil { - t.Fatal("should have failed - missing email") - } - - m["email"] = ruser.Email - m["team_name"] = "junk" - if _, err := Client.LDAPToEmail(m); err == nil { - t.Fatal("should have failed - bad team name") - } - - m["team_name"] = team.Name - m["email"] = "junk" - if _, err := Client.LDAPToEmail(m); err == nil { - t.Fatal("should have failed - bad email") - } - - m["email"] = user.Email - if _, err := Client.LDAPToEmail(m); err == nil { - t.Fatal("should have failed - user is not an AD/LDAP user") - } -} - -func TestEmailToLDAP(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - ruser := Client.Must(Client.CreateUser(&user, "")).Data.(*model.User) - th.LinkUserToTeam(ruser, rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Id)) - - Client.Login(user.Email, user.Password) - - m := map[string]string{} - if _, err := Client.EmailToLDAP(m); err == nil { - t.Fatal("should have failed - empty data") - } - - m["email_password"] = "passwd1" - _, err := Client.EmailToLDAP(m) - if err == nil { - t.Fatal("should have failed - missing team_name, ldap_id, ldap_password, email") - } - - m["team_name"] = team.Name - if _, err := Client.EmailToLDAP(m); err == nil { - t.Fatal("should have failed - missing email, ldap_password, ldap_id") - } - - m["ldap_id"] = "someid" - if _, err := Client.EmailToLDAP(m); err == nil { - t.Fatal("should have failed - missing email, ldap_password") - } - - m["ldap_password"] = "passwd1" - if _, err := Client.EmailToLDAP(m); err == nil { - t.Fatal("should have failed - missing email") - } - - m["email"] = ruser.Email - m["team_name"] = "junk" - if _, err := Client.EmailToLDAP(m); err == nil { - t.Fatal("should have failed - bad team name") - } - - m["team_name"] = team.Name - m["email"] = "junk" - if _, err := Client.EmailToLDAP(m); err == nil { - t.Fatal("should have failed - bad email") - } - - m["email"] = user.Email - m["email_password"] = "junk" - if _, err := Client.EmailToLDAP(m); err == nil { - t.Fatal("should have failed - bad password") - } - - m["email_password"] = "passwd1" - if _, err := Client.EmailToLDAP(m); err == nil { - t.Fatal("should have failed - missing ldap bits or user") - } -} - -func TestMeInitialLoad(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - if result, err := th.BasicClient.GetInitialLoad(); err != nil { - t.Fatal(err) - } else { - il := result.Data.(*model.InitialLoad) - - if il.User == nil { - t.Fatal("should be valid") - } - - if il.Preferences == nil { - t.Fatal("should be valid") - } - - if len(il.Teams) != 1 { - t.Fatal("should be valid") - } - - if len(il.TeamMembers) != 1 { - t.Fatal("should be valid") - } - - if len(il.ClientCfg) == 0 { - t.Fatal("should be valid") - } - - if len(il.LicenseCfg) == 0 { - t.Fatal("should be valid") - } - } - - th.BasicClient.Logout() - - if result, err := th.BasicClient.GetInitialLoad(); err != nil { - t.Fatal(err) - } else { - il := result.Data.(*model.InitialLoad) - - if il.User != nil { - t.Fatal("should be valid") - } - - if il.Preferences != nil { - t.Fatal("should be valid") - } - - if len(il.Teams) != 0 { - t.Fatal("should be valid") - } - - if len(il.TeamMembers) != 0 { - t.Fatal("should be valid") - } - - if len(il.ClientCfg) == 0 { - t.Fatal("should be valid") - } - - if len(il.LicenseCfg) == 0 { - t.Fatal("should be valid") - } - } - -} - -func TestGenerateMfaSecret(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - ruser, _ := Client.CreateUser(&user, "") - th.LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) - - Client.Logout() - - if _, err := Client.GenerateMfaSecret(); err == nil { - t.Fatal("should have failed - not logged in") - } - - Client.Login(user.Email, user.Password) - - if _, err := Client.GenerateMfaSecret(); err == nil { - t.Fatal("should have failed - not licensed") - } - - // need to add more test cases when license and config can be configured for tests -} - -func TestUpdateMfa(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - th.App.SetLicense(nil) - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - ruser, _ := Client.CreateUser(&user, "") - th.LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) - - Client.Logout() - - if _, err := Client.UpdateMfa(true, "123456"); err == nil { - t.Fatal("should have failed - not logged in") - } - - Client.Login(user.Email, user.Password) - - if _, err := Client.UpdateMfa(true, ""); err == nil { - t.Fatal("should have failed - no token") - } - - if _, err := Client.UpdateMfa(true, "123456"); err == nil { - t.Fatal("should have failed - not licensed") - } - - th.App.SetLicense(model.NewTestLicense("mfa")) - th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableMultifactorAuthentication = true }) - - if _, err := Client.UpdateMfa(true, "123456"); err == nil { - t.Fatal("should have failed - bad token") - } - - // need to add more test cases when enterprise bits can be loaded into tests -} - -func TestCheckMfa(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} - rteam, _ := Client.CreateTeam(&team) - - Client.Logout() - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - ruser, _ := Client.CreateUser(&user, "") - th.LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) - store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) - - if result, err := Client.CheckMfa(user.Email); err != nil { - t.Fatal(err) - } else { - resp := result.Data.(map[string]string) - if resp["mfa_required"] != "false" { - t.Fatal("mfa should not be required") - } - } - - // need to add more test cases when enterprise bits can be loaded into tests -} - -func TestUserTyping(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - WebSocketClient, err := th.CreateWebSocketClient() - if err != nil { - t.Fatal(err) - } - defer WebSocketClient.Close() - WebSocketClient.Listen() - - time.Sleep(300 * time.Millisecond) - if resp := <-WebSocketClient.ResponseChannel; resp.Status != model.STATUS_OK { - t.Fatal("should have responded OK to authentication challenge") - } - - WebSocketClient.UserTyping("", "") - time.Sleep(300 * time.Millisecond) - if resp := <-WebSocketClient.ResponseChannel; resp.Error.Id != "api.websocket_handler.invalid_param.app_error" { - t.Fatal("should have been invalid param response") - } - - th.LoginBasic2() - Client.Must(Client.JoinChannel(th.BasicChannel.Id)) - - WebSocketClient2, err2 := th.CreateWebSocketClient() - if err2 != nil { - t.Fatal(err2) - } - defer WebSocketClient2.Close() - WebSocketClient2.Listen() - - time.Sleep(300 * time.Millisecond) - - WebSocketClient.UserTyping(th.BasicChannel.Id, "") - - time.Sleep(300 * time.Millisecond) - - stop := make(chan bool) - eventHit := false - - go func() { - for { - select { - case resp := <-WebSocketClient2.EventChannel: - if resp.Event == model.WEBSOCKET_EVENT_TYPING && resp.Data["user_id"].(string) == th.BasicUser.Id { - eventHit = true - } - case <-stop: - return - } - } - }() - - time.Sleep(1000 * time.Millisecond) - - stop <- true - - if !eventHit { - t.Fatal("did not receive typing event") - } - - WebSocketClient.UserTyping(th.BasicChannel.Id, "someparentid") - - time.Sleep(300 * time.Millisecond) - - eventHit = false - - go func() { - for { - select { - case resp := <-WebSocketClient2.EventChannel: - if resp.Event == model.WEBSOCKET_EVENT_TYPING && resp.Data["parent_id"] == "someparentid" { - eventHit = true - } - case <-stop: - return - } - } - }() - - time.Sleep(300 * time.Millisecond) - - stop <- true - - if !eventHit { - t.Fatal("did not receive typing event") - } -} - -func TestGetProfilesInChannel(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = true }) - - if result, err := Client.GetProfilesInChannel(th.BasicChannel.Id, 0, 100, ""); err != nil { - t.Fatal(err) - } else { - users := result.Data.(map[string]*model.User) - - if len(users) < 1 { - t.Fatal("map was wrong length") - } - - for _, user := range users { - if user.Email == "" { - t.Fatal("problem with show email") - } - } - } - - th.LoginBasic2() - - if _, err := Client.GetProfilesInChannel(th.BasicChannel.Id, 0, 100, ""); err == nil { - t.Fatal("should not have access") - } - - Client.Must(Client.JoinChannel(th.BasicChannel.Id)) - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = false }) - - if result, err := Client.GetProfilesInChannel(th.BasicChannel.Id, 0, 100, ""); err != nil { - t.Fatal(err) - } else { - users := result.Data.(map[string]*model.User) - - if len(users) < 1 { - t.Fatal("map was wrong length") - } - - found := false - for _, user := range users { - if user.Email != "" { - t.Fatal("problem with show email") - } - if user.Id == th.BasicUser2.Id { - found = true - } - } - - if !found { - t.Fatal("should have found profile") - } - } - - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - Client.Must(Client.CreateUser(&user, "")) - - Client.Login(user.Email, "passwd1") - Client.SetTeamId("junk") - - if _, err := Client.GetProfilesInChannel(th.BasicChannel.Id, 0, 100, ""); err == nil { - t.Fatal("should not have access") - } -} - -func TestGetProfilesNotInChannel(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = true }) - - if result, err := Client.GetProfilesNotInChannel(th.BasicChannel.Id, 0, 100, ""); err != nil { - t.Fatal(err) - } else { - users := result.Data.(map[string]*model.User) - - if len(users) < 1 { - t.Fatal("map was wrong length") - } - - found := false - for _, user := range users { - if user.Email == "" { - t.Fatal("problem with show email") - } - if user.Id == th.BasicUser2.Id { - found = true - } - } - - if !found { - t.Fatal("should have found profile") - } - } - - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) - th.LinkUserToTeam(user, th.BasicTeam) - - th.LoginBasic2() - - if _, err := Client.GetProfilesNotInChannel(th.BasicChannel.Id, 0, 100, ""); err == nil { - t.Fatal("should not have access") - } - - Client.Must(Client.JoinChannel(th.BasicChannel.Id)) - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = false }) - - if result, err := Client.GetProfilesNotInChannel(th.BasicChannel.Id, 0, 100, ""); err != nil { - t.Fatal(err) - } else { - users := result.Data.(map[string]*model.User) - - if len(users) < 1 { - t.Fatal("map was wrong length") - } - - found := false - for _, user := range users { - if user.Email != "" { - t.Fatal("problem with show email") - } - if user.Id == th.BasicUser2.Id { - found = true - } - } - - if found { - t.Fatal("should not have found profile") - } - } - - user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} - Client.Must(Client.CreateUser(&user2, "")) - - Client.Login(user2.Email, "passwd1") - Client.SetTeamId(th.BasicTeam.Id) - - if _, err := Client.GetProfilesNotInChannel(th.BasicChannel.Id, 0, 100, ""); err == nil { - t.Fatal("should not have access") - } -} - -func TestSearchUsers(t *testing.T) { - th := Setup().InitBasic().InitSystemAdmin() - defer th.TearDown() - - Client := th.BasicClient - - inactiveUser := th.CreateUser(Client) - th.LinkUserToTeam(inactiveUser, th.BasicTeam) - th.SystemAdminClient.Must(th.SystemAdminClient.UpdateActive(inactiveUser.Id, false)) - - if result, err := Client.SearchUsers(model.UserSearch{Term: th.BasicUser.Username}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == th.BasicUser.Id { - found = true - } - } - - if !found { - t.Fatal("should have found profile") - } - } - - if result, err := Client.SearchUsers(model.UserSearch{Term: inactiveUser.Username, TeamId: th.BasicTeam.Id}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == inactiveUser.Id { - found = true - } - } - - if found { - t.Fatal("should not have found inactive user") - } - } - - if result, err := Client.SearchUsers(model.UserSearch{Term: inactiveUser.Username, TeamId: th.BasicTeam.Id, AllowInactive: true}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == inactiveUser.Id { - found = true - } - } - - if !found { - t.Fatal("should have found inactive user") - } - } - - if result, err := Client.SearchUsers(model.UserSearch{Term: th.BasicUser.Username, InChannelId: th.BasicChannel.Id}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - if len(users) != 1 { - t.Fatal("map was wrong length") - } - - found := false - for _, user := range users { - if user.Id == th.BasicUser.Id { - found = true - } - } - - if !found { - t.Fatal("should have found profile") - } - } - - if result, err := Client.SearchUsers(model.UserSearch{Term: th.BasicUser2.Username, NotInChannelId: th.BasicChannel.Id}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - if len(users) != 1 { - t.Fatal("map was wrong length") - } - - found1 := false - found2 := false - for _, user := range users { - if user.Id == th.BasicUser.Id { - found1 = true - } else if user.Id == th.BasicUser2.Id { - found2 = true - } - } - - if found1 { - t.Fatal("should not have found profile") - } - if !found2 { - t.Fatal("should have found profile") - } - } - - if result, err := Client.SearchUsers(model.UserSearch{Term: th.BasicUser2.Username, TeamId: th.BasicTeam.Id, NotInChannelId: th.BasicChannel.Id}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - if len(users) != 1 { - t.Fatal("map was wrong length") - } - - found1 := false - found2 := false - for _, user := range users { - if user.Id == th.BasicUser.Id { - found1 = true - } else if user.Id == th.BasicUser2.Id { - found2 = true - } - } - - if found1 { - t.Fatal("should not have found profile") - } - if !found2 { - t.Fatal("should have found profile") - } - } - - if result, err := Client.SearchUsers(model.UserSearch{Term: th.BasicUser.Username, TeamId: "junk", NotInChannelId: th.BasicChannel.Id}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - if len(users) != 0 { - t.Fatal("map was wrong length") - } - } - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = false }) - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = false }) - - privacyEmailPrefix := strings.ToLower(model.NewId()) - privacyUser := &model.User{Email: privacyEmailPrefix + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", FirstName: model.NewId(), LastName: "Jimmers"} - privacyUser = Client.Must(Client.CreateUser(privacyUser, "")).Data.(*model.User) - th.LinkUserToTeam(privacyUser, th.BasicTeam) - - if result, err := Client.SearchUsers(model.UserSearch{Term: privacyUser.FirstName}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == privacyUser.Id { - found = true - } - } - - if found { - t.Fatal("should not have found profile") - } - } - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = true }) - - if result, err := Client.SearchUsers(model.UserSearch{Term: privacyUser.FirstName}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == privacyUser.Id { - found = true - } - } - - if found { - t.Fatal("should not have found profile") - } - } - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = false }) - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = true }) - - if result, err := Client.SearchUsers(model.UserSearch{Term: privacyUser.FirstName}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == privacyUser.Id { - found = true - } - } - - if !found { - t.Fatal("should have found profile") - } - } - - if result, err := Client.SearchUsers(model.UserSearch{Term: privacyEmailPrefix}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == privacyUser.Id { - found = true - } - } - - if found { - t.Fatal("should not have found profile") - } - } - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = true }) - - if result, err := Client.SearchUsers(model.UserSearch{Term: privacyEmailPrefix}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == privacyUser.Id { - found = true - } - } - - if !found { - t.Fatal("should have found profile") - } - } - - th.LoginBasic2() - - if result, err := Client.SearchUsers(model.UserSearch{Term: th.BasicUser.Username}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == th.BasicUser.Id { - found = true - } - } - - if !found { - t.Fatal("should have found profile") - } - } - - if _, err := Client.SearchUsers(model.UserSearch{}); err == nil { - t.Fatal("should have errored - blank term") - } - - if _, err := Client.SearchUsers(model.UserSearch{Term: th.BasicUser.Username, InChannelId: th.BasicChannel.Id}); err == nil { - t.Fatal("should not have access") - } - - if _, err := Client.SearchUsers(model.UserSearch{Term: th.BasicUser.Username, NotInChannelId: th.BasicChannel.Id}); err == nil { - t.Fatal("should not have access") - } - - userWithoutTeam := th.CreateUser(Client) - if result, err := Client.SearchUsers(model.UserSearch{Term: userWithoutTeam.Username}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == userWithoutTeam.Id { - found = true - } - } - - if !found { - t.Fatal("should have found user without team") - } - } - - if result, err := Client.SearchUsers(model.UserSearch{Term: userWithoutTeam.Username, WithoutTeam: true}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == userWithoutTeam.Id { - found = true - } - } - - if !found { - t.Fatal("should have found user without team") - } - } - - if result, err := Client.SearchUsers(model.UserSearch{Term: th.BasicUser.Username, WithoutTeam: true}); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - - found := false - for _, user := range users { - if user.Id == th.BasicUser.Id { - found = true - } - } - - if found { - t.Fatal("should not have found user with team") - } - } -} - -func TestAutocompleteUsers(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - if result, err := Client.AutocompleteUsers(th.BasicUser.Username); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - if len(users) != 1 { - t.Fatal("should have returned 1 user in") - } - } - - if result, err := Client.AutocompleteUsers("amazonses"); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - if len(users) != 0 { - t.Fatal("should have returned 0 users - email should not autocomplete") - } - } - - if result, err := Client.AutocompleteUsers(""); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - if len(users) == 0 { - t.Fatal("should have many users") - } - } - - notInTeamUser := th.CreateUser(Client) - - if result, err := Client.AutocompleteUsers(notInTeamUser.Username); err != nil { - t.Fatal(err) - } else { - users := result.Data.([]*model.User) - if len(users) != 1 { - t.Fatal("should have returned 1 user in") - } - } - - if result, err := Client.AutocompleteUsersInTeam(notInTeamUser.Username); err != nil { - t.Fatal(err) - } else { - autocomplete := result.Data.(*model.UserAutocompleteInTeam) - if len(autocomplete.InTeam) != 0 { - t.Fatal("should have returned 0 users") - } - } - - if result, err := Client.AutocompleteUsersInTeam(th.BasicUser.Username); err != nil { - t.Fatal(err) - } else { - autocomplete := result.Data.(*model.UserAutocompleteInTeam) - if len(autocomplete.InTeam) != 1 { - t.Fatal("should have returned 1 user in") - } - } - - if result, err := Client.AutocompleteUsersInTeam(th.BasicUser.Username[0:5]); err != nil { - t.Fatal(err) - } else { - autocomplete := result.Data.(*model.UserAutocompleteInTeam) - if len(autocomplete.InTeam) < 1 { - t.Fatal("should have returned at least 1 user in") - } - } - - if result, err := Client.AutocompleteUsersInChannel(th.BasicUser.Username, th.BasicChannel.Id); err != nil { - t.Fatal(err) - } else { - autocomplete := result.Data.(*model.UserAutocompleteInChannel) - if len(autocomplete.InChannel) != 1 { - t.Fatal("should have returned 1 user in") - } - if len(autocomplete.OutOfChannel) != 0 { - t.Fatal("should have returned no users out") - } - } - - if result, err := Client.AutocompleteUsersInChannel("", th.BasicChannel.Id); err != nil { - t.Fatal(err) - } else { - autocomplete := result.Data.(*model.UserAutocompleteInChannel) - if len(autocomplete.InChannel) != 1 && autocomplete.InChannel[0].Id != th.BasicUser2.Id { - t.Fatal("should have returned at 1 user in") - } - if len(autocomplete.OutOfChannel) != 1 && autocomplete.OutOfChannel[0].Id != th.BasicUser2.Id { - t.Fatal("should have returned 1 user out") - } - } - - if result, err := Client.AutocompleteUsersInTeam(""); err != nil { - t.Fatal(err) - } else { - autocomplete := result.Data.(*model.UserAutocompleteInTeam) - if len(autocomplete.InTeam) != 2 { - t.Fatal("should have returned 2 users in") - } - } - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = false }) - - privacyUser := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", FirstName: model.NewId(), LastName: "Jimmers"} - privacyUser = Client.Must(Client.CreateUser(privacyUser, "")).Data.(*model.User) - th.LinkUserToTeam(privacyUser, th.BasicTeam) - - if result, err := Client.AutocompleteUsersInChannel(privacyUser.FirstName, th.BasicChannel.Id); err != nil { - t.Fatal(err) - } else { - autocomplete := result.Data.(*model.UserAutocompleteInChannel) - if len(autocomplete.InChannel) != 0 { - t.Fatal("should have returned no users") - } - if len(autocomplete.OutOfChannel) != 0 { - t.Fatal("should have returned no users") - } - } - - if result, err := Client.AutocompleteUsersInTeam(privacyUser.FirstName); err != nil { - t.Fatal(err) - } else { - autocomplete := result.Data.(*model.UserAutocompleteInTeam) - if len(autocomplete.InTeam) != 0 { - t.Fatal("should have returned no users") - } - } - - if _, err := Client.AutocompleteUsersInChannel("", "junk"); err == nil { - t.Fatal("should have errored - bad channel id") - } - - Client.SetTeamId("junk") - if _, err := Client.AutocompleteUsersInChannel("", th.BasicChannel.Id); err == nil { - t.Fatal("should have errored - bad team id") - } - - if _, err := Client.AutocompleteUsersInTeam(""); err == nil { - t.Fatal("should have errored - bad team id") - } -} - -func TestGetByUsername(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - if result, err := Client.GetByUsername(th.BasicUser.Username, ""); err != nil { - t.Fatal("Failed to get user") - } else { - if result.Data.(*model.User).Password != "" { - t.Fatal("User shouldn't have any password data once set") - } - } - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = false }) - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = false }) - - if result, err := Client.GetByUsername(th.BasicUser2.Username, ""); err != nil { - t.Fatal(err) - } else { - u := result.Data.(*model.User) - if u.Password != "" { - t.Fatal("password must be empty") - } - if *u.AuthData != "" { - t.Fatal("auth data must be empty") - } - if u.Email != "" { - t.Fatal("email should be sanitized") - } - } - -} - -func TestGetByEmail(t *testing.T) { - th := Setup().InitBasic() - defer th.TearDown() - - Client := th.BasicClient - - if _, respMetdata := Client.GetByEmail(th.BasicUser.Email, ""); respMetdata.Error != nil { - t.Fatal("Failed to get user by email") - } - - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = false }) - th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = false }) - - if user, respMetdata := Client.GetByEmail(th.BasicUser2.Email, ""); respMetdata.Error != nil { - t.Fatal(respMetdata.Error) - } else { - if user.Password != "" { - t.Fatal("password must be empty") - } - if *user.AuthData != "" { - t.Fatal("auth data must be empty") - } - if user.Email != "" { - t.Fatal("email should be sanitized") - } - } -} -- cgit v1.2.3-1-g7c22