github.com/psyb0t/mattermost-server@v4.6.1-0.20180125161845-5503a1351abf+incompatible/api/team_test.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package api
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/mattermost/mattermost-server/model"
    10  	"github.com/mattermost/mattermost-server/store"
    11  	"github.com/mattermost/mattermost-server/utils"
    12  )
    13  
    14  func TestCreateTeam(t *testing.T) {
    15  	th := Setup().InitBasic()
    16  	defer th.TearDown()
    17  
    18  	Client := th.BasicClient
    19  
    20  	team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN}
    21  	rteam, err := Client.CreateTeam(&team)
    22  	if err != nil {
    23  		t.Fatal(err)
    24  	}
    25  
    26  	user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"}
    27  	user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User)
    28  	th.LinkUserToTeam(user, rteam.Data.(*model.Team))
    29  	store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id))
    30  
    31  	Client.Login(user.Email, "passwd1")
    32  	Client.SetTeamId(rteam.Data.(*model.Team).Id)
    33  
    34  	c1 := Client.Must(Client.GetChannels("")).Data.(*model.ChannelList)
    35  	if len(*c1) != 2 {
    36  		t.Fatal("default channels not created")
    37  	}
    38  
    39  	if rteam.Data.(*model.Team).DisplayName != team.DisplayName {
    40  		t.Fatal("full name didn't match")
    41  	}
    42  
    43  	if _, err := Client.CreateTeam(rteam.Data.(*model.Team)); err == nil {
    44  		t.Fatal("Cannot create an existing")
    45  	}
    46  
    47  	rteam.Data.(*model.Team).Id = ""
    48  	if _, err := Client.CreateTeam(rteam.Data.(*model.Team)); err != nil {
    49  		if err.Message != "A team with that name already exists" {
    50  			t.Fatal(err)
    51  		}
    52  	}
    53  
    54  	if _, err := Client.DoApiPost("/teams/create", "garbage"); err == nil {
    55  		t.Fatal("should have been an error")
    56  	}
    57  }
    58  
    59  func TestCreateTeamSanitization(t *testing.T) {
    60  	th := Setup().InitBasic().InitSystemAdmin()
    61  	defer th.TearDown()
    62  
    63  	// Non-admin users can create a team, but they become a team admin by doing so
    64  
    65  	t.Run("team admin", func(t *testing.T) {
    66  		team := &model.Team{
    67  			DisplayName:    t.Name() + "_1",
    68  			Name:           GenerateTestTeamName(),
    69  			Email:          th.GenerateTestEmail(),
    70  			Type:           model.TEAM_OPEN,
    71  			AllowedDomains: "simulator.amazonses.com",
    72  		}
    73  
    74  		if res, err := th.BasicClient.CreateTeam(team); err != nil {
    75  			t.Fatal(err)
    76  		} else if rteam := res.Data.(*model.Team); rteam.Email == "" {
    77  			t.Fatal("should not have sanitized email")
    78  		} else if rteam.AllowedDomains == "" {
    79  			t.Fatal("should not have sanitized allowed domains")
    80  		}
    81  	})
    82  
    83  	t.Run("system admin", func(t *testing.T) {
    84  		team := &model.Team{
    85  			DisplayName:    t.Name() + "_2",
    86  			Name:           GenerateTestTeamName(),
    87  			Email:          th.GenerateTestEmail(),
    88  			Type:           model.TEAM_OPEN,
    89  			AllowedDomains: "simulator.amazonses.com",
    90  		}
    91  
    92  		if res, err := th.SystemAdminClient.CreateTeam(team); err != nil {
    93  			t.Fatal(err)
    94  		} else if rteam := res.Data.(*model.Team); rteam.Email == "" {
    95  			t.Fatal("should not have sanitized email")
    96  		} else if rteam.AllowedDomains == "" {
    97  			t.Fatal("should not have sanitized allowed domains")
    98  		}
    99  	})
   100  }
   101  
   102  func TestAddUserToTeam(t *testing.T) {
   103  	th := Setup().InitSystemAdmin().InitBasic()
   104  	defer th.TearDown()
   105  
   106  	th.BasicClient.Logout()
   107  
   108  	// Test adding a user to a team you are not a member of.
   109  	th.SystemAdminClient.SetTeamId(th.BasicTeam.Id)
   110  	th.SystemAdminClient.Must(th.SystemAdminClient.RemoveUserFromTeam(th.BasicTeam.Id, th.BasicUser2.Id))
   111  
   112  	th.LoginBasic2()
   113  
   114  	user2 := th.CreateUser(th.BasicClient)
   115  
   116  	if _, err := th.BasicClient.AddUserToTeam(th.BasicTeam.Id, user2.Id); err == nil {
   117  		t.Fatal("Should have failed because of not being a team member")
   118  	}
   119  
   120  	// Test adding a user to a team you are a member of.
   121  	th.BasicClient.Logout()
   122  	th.LoginBasic()
   123  
   124  	if _, err := th.BasicClient.AddUserToTeam(th.BasicTeam.Id, user2.Id); err != nil {
   125  		t.Fatal(err)
   126  	}
   127  
   128  	// Check it worked properly.
   129  	if result, err := th.BasicClient.AddUserToTeam(th.BasicTeam.Id, user2.Id); err != nil {
   130  		t.Fatal(err)
   131  	} else {
   132  		rm := result.Data.(map[string]string)
   133  		if rm["user_id"] != user2.Id {
   134  			t.Fatal("ids didn't match")
   135  		}
   136  	}
   137  
   138  	if _, err := th.BasicClient.GetTeamMember(th.BasicTeam.Id, user2.Id); err != nil {
   139  		t.Fatal(err)
   140  	}
   141  
   142  	// Restore config/license at end of test case.
   143  	restrictTeamInvite := *th.App.Config().TeamSettings.RestrictTeamInvite
   144  	isLicensed := utils.IsLicensed()
   145  	license := utils.License()
   146  	defer func() {
   147  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictTeamInvite = restrictTeamInvite })
   148  		utils.SetIsLicensed(isLicensed)
   149  		utils.SetLicense(license)
   150  		th.App.SetDefaultRolesBasedOnConfig()
   151  	}()
   152  
   153  	// Set the config so that only team admins can add a user to a team.
   154  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictTeamInvite = model.PERMISSIONS_TEAM_ADMIN })
   155  	th.App.SetDefaultRolesBasedOnConfig()
   156  
   157  	// Test without the EE license to see that the permission restriction is ignored.
   158  	user3 := th.CreateUser(th.BasicClient)
   159  	if _, err := th.BasicClient.AddUserToTeam(th.BasicTeam.Id, user3.Id); err != nil {
   160  		t.Fatal(err)
   161  	}
   162  
   163  	// Add an EE license.
   164  	utils.SetIsLicensed(true)
   165  	utils.SetLicense(&model.License{Features: &model.Features{}})
   166  	utils.License().Features.SetDefaults()
   167  	th.App.SetDefaultRolesBasedOnConfig()
   168  
   169  	// Check that a regular user can't add someone to the team.
   170  	user4 := th.CreateUser(th.BasicClient)
   171  	if _, err := th.BasicClient.AddUserToTeam(th.BasicTeam.Id, user4.Id); err == nil {
   172  		t.Fatal("should have failed due to permissions error")
   173  	}
   174  
   175  	// Should work as team admin.
   176  	th.UpdateUserToTeamAdmin(th.BasicUser, th.BasicTeam)
   177  	th.App.InvalidateAllCaches()
   178  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictTeamInvite = model.PERMISSIONS_TEAM_ADMIN })
   179  	utils.SetIsLicensed(true)
   180  	utils.SetLicense(&model.License{Features: &model.Features{}})
   181  	utils.License().Features.SetDefaults()
   182  	th.App.SetDefaultRolesBasedOnConfig()
   183  
   184  	user5 := th.CreateUser(th.BasicClient)
   185  	if _, err := th.BasicClient.AddUserToTeam(th.BasicTeam.Id, user5.Id); err != nil {
   186  		t.Fatal(err)
   187  	}
   188  
   189  	// Change permission level to System Admin
   190  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictTeamInvite = model.PERMISSIONS_SYSTEM_ADMIN })
   191  	th.App.SetDefaultRolesBasedOnConfig()
   192  
   193  	// Should not work as team admin.
   194  	user6 := th.CreateUser(th.BasicClient)
   195  	if _, err := th.BasicClient.AddUserToTeam(th.BasicTeam.Id, user6.Id); err == nil {
   196  		t.Fatal("should have failed due to permissions error")
   197  	}
   198  
   199  	// Should work as system admin.
   200  	user7 := th.CreateUser(th.BasicClient)
   201  	if _, err := th.SystemAdminClient.AddUserToTeam(th.BasicTeam.Id, user7.Id); err != nil {
   202  		t.Fatal(err)
   203  	}
   204  }
   205  
   206  func TestRemoveUserFromTeam(t *testing.T) {
   207  	th := Setup().InitSystemAdmin().InitBasic()
   208  	defer th.TearDown()
   209  
   210  	if _, err := th.BasicClient.RemoveUserFromTeam(th.SystemAdminTeam.Id, th.SystemAdminUser.Id); err == nil {
   211  		t.Fatal("should fail not enough permissions")
   212  	} else {
   213  		if err.Id != "api.context.permissions.app_error" {
   214  			t.Fatal("wrong error. Got: " + err.Id)
   215  		}
   216  	}
   217  
   218  	if _, err := th.BasicClient.RemoveUserFromTeam("", th.SystemAdminUser.Id); err == nil {
   219  		t.Fatal("should fail not enough permissions")
   220  	} else {
   221  		if err.Id != "api.context.permissions.app_error" {
   222  			t.Fatal("wrong error")
   223  		}
   224  	}
   225  
   226  	if _, err := th.BasicClient.RemoveUserFromTeam("", th.BasicUser.Id); err != nil {
   227  		t.Fatal("should have removed the user from the team")
   228  	}
   229  
   230  	th.BasicClient.Logout()
   231  	th.LoginSystemAdmin()
   232  
   233  	th.SystemAdminClient.Must(th.SystemAdminClient.AddUserToTeam(th.BasicTeam.Id, th.BasicUser.Id))
   234  
   235  	if _, err := th.SystemAdminClient.RemoveUserFromTeam(th.BasicTeam.Id, th.BasicUser.Id); err != nil {
   236  		t.Fatal("should have removed the user from the team")
   237  	}
   238  }
   239  
   240  func TestAddUserToTeamFromInvite(t *testing.T) {
   241  	th := Setup().InitBasic()
   242  	defer th.TearDown()
   243  
   244  	user2 := th.CreateUser(th.BasicClient)
   245  	th.BasicClient.Must(th.BasicClient.Logout())
   246  	th.BasicClient.Must(th.BasicClient.Login(user2.Email, user2.Password))
   247  
   248  	if result, err := th.BasicClient.AddUserToTeamFromInvite("", "", th.BasicTeam.InviteId); err != nil {
   249  		t.Fatal(err)
   250  	} else {
   251  		rtm := result.Data.(*model.Team)
   252  		if rtm.Id != th.BasicTeam.Id {
   253  			t.Fatal()
   254  		}
   255  	}
   256  }
   257  
   258  func TestGetAllTeams(t *testing.T) {
   259  	th := Setup().InitBasic().InitSystemAdmin()
   260  	defer th.TearDown()
   261  
   262  	Client := th.BasicClient
   263  
   264  	team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN}
   265  	team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team)
   266  
   267  	Client.Logout()
   268  
   269  	user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"}
   270  	user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User)
   271  	th.LinkUserToTeam(user, team)
   272  	store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id))
   273  
   274  	Client.Login(user.Email, "passwd1")
   275  	Client.SetTeamId(team.Id)
   276  
   277  	if r1, err := Client.GetAllTeams(); err != nil {
   278  		t.Fatal(err)
   279  	} else if teams := r1.Data.(map[string]*model.Team); len(teams) != 1 {
   280  		t.Fatal("non admin users only get the teams that they're a member of")
   281  	} else if receivedTeam, ok := teams[team.Id]; !ok || receivedTeam.Id != team.Id {
   282  		t.Fatal("should've received team that the user is a member of")
   283  	}
   284  
   285  	if r1, err := th.SystemAdminClient.GetAllTeams(); err != nil {
   286  		t.Fatal(err)
   287  	} else if teams := r1.Data.(map[string]*model.Team); len(teams) == 1 {
   288  		t.Fatal("admin users should receive all teams")
   289  	} else if receivedTeam, ok := teams[team.Id]; !ok || receivedTeam.Id != team.Id {
   290  		t.Fatal("admin should've received team that they aren't a member of")
   291  	}
   292  
   293  	Client.Logout()
   294  	if _, err := Client.GetAllTeams(); err == nil {
   295  		t.Fatal("Should have failed due to not being logged in.")
   296  	}
   297  }
   298  
   299  func TestGetAllTeamsSanitization(t *testing.T) {
   300  	th := Setup().InitBasic().InitSystemAdmin()
   301  	defer th.TearDown()
   302  
   303  	var team *model.Team
   304  	if res, err := th.BasicClient.CreateTeam(&model.Team{
   305  		DisplayName:    t.Name() + "_1",
   306  		Name:           GenerateTestTeamName(),
   307  		Email:          th.GenerateTestEmail(),
   308  		Type:           model.TEAM_OPEN,
   309  		AllowedDomains: "simulator.amazonses.com",
   310  	}); err != nil {
   311  		t.Fatal(err)
   312  	} else {
   313  		team = res.Data.(*model.Team)
   314  	}
   315  
   316  	var team2 *model.Team
   317  	if res, err := th.SystemAdminClient.CreateTeam(&model.Team{
   318  		DisplayName:    t.Name() + "_2",
   319  		Name:           GenerateTestTeamName(),
   320  		Email:          th.GenerateTestEmail(),
   321  		Type:           model.TEAM_OPEN,
   322  		AllowedDomains: "simulator.amazonses.com",
   323  	}); err != nil {
   324  		t.Fatal(err)
   325  	} else {
   326  		team2 = res.Data.(*model.Team)
   327  	}
   328  
   329  	t.Run("team admin/team user", func(t *testing.T) {
   330  		if res, err := th.BasicClient.GetAllTeams(); err != nil {
   331  			t.Fatal(err)
   332  		} else {
   333  			for _, rteam := range res.Data.(map[string]*model.Team) {
   334  				if rteam.Id == team.Id {
   335  					if rteam.Email == "" {
   336  						t.Fatal("should not have sanitized email for team admin")
   337  					} else if rteam.AllowedDomains == "" {
   338  						t.Fatal("should not have sanitized allowed domains for team admin")
   339  					}
   340  				} else if rteam.Id == team2.Id {
   341  					if rteam.Email != "" {
   342  						t.Fatal("should've sanitized email for non-admin")
   343  					} else if rteam.AllowedDomains != "" {
   344  						t.Fatal("should've sanitized allowed domains for non-admin")
   345  					}
   346  				}
   347  			}
   348  		}
   349  	})
   350  
   351  	t.Run("system admin", func(t *testing.T) {
   352  		if res, err := th.SystemAdminClient.GetAllTeams(); err != nil {
   353  			t.Fatal(err)
   354  		} else {
   355  			for _, rteam := range res.Data.(map[string]*model.Team) {
   356  				if rteam.Id != team.Id && rteam.Id != team2.Id {
   357  					continue
   358  				}
   359  
   360  				if rteam.Email == "" {
   361  					t.Fatal("should not have sanitized email")
   362  				} else if rteam.AllowedDomains == "" {
   363  					t.Fatal("should not have sanitized allowed domains")
   364  				}
   365  			}
   366  		}
   367  	})
   368  }
   369  
   370  func TestGetAllTeamListings(t *testing.T) {
   371  	th := Setup().InitBasic()
   372  	defer th.TearDown()
   373  
   374  	Client := th.BasicClient
   375  
   376  	team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN, AllowOpenInvite: true}
   377  	team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team)
   378  
   379  	Client.Logout()
   380  
   381  	user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"}
   382  	user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User)
   383  	th.LinkUserToTeam(user, team)
   384  	store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id))
   385  
   386  	Client.Login(user.Email, "passwd1")
   387  	Client.SetTeamId(team.Id)
   388  
   389  	if r1, err := Client.GetAllTeamListings(); err != nil {
   390  		t.Fatal(err)
   391  	} else {
   392  		teams := r1.Data.(map[string]*model.Team)
   393  		if teams[team.Id].Name != team.Name {
   394  			t.Fatal("team name doesn't match")
   395  		}
   396  	}
   397  
   398  	th.App.UpdateUserRoles(user.Id, model.SYSTEM_ADMIN_ROLE_ID, false)
   399  
   400  	Client.Login(user.Email, "passwd1")
   401  	Client.SetTeamId(team.Id)
   402  
   403  	if r1, err := Client.GetAllTeams(); err != nil {
   404  		t.Fatal(err)
   405  	} else {
   406  		teams := r1.Data.(map[string]*model.Team)
   407  		if teams[team.Id].Name != team.Name {
   408  			t.Fatal("team name doesn't match")
   409  		}
   410  	}
   411  }
   412  
   413  func TestGetAllTeamListingsSanitization(t *testing.T) {
   414  	th := Setup().InitBasic().InitSystemAdmin()
   415  	defer th.TearDown()
   416  
   417  	var team *model.Team
   418  	if res, err := th.BasicClient.CreateTeam(&model.Team{
   419  		DisplayName:     t.Name() + "_1",
   420  		Name:            GenerateTestTeamName(),
   421  		Email:           th.GenerateTestEmail(),
   422  		Type:            model.TEAM_OPEN,
   423  		AllowedDomains:  "simulator.amazonses.com",
   424  		AllowOpenInvite: true,
   425  	}); err != nil {
   426  		t.Fatal(err)
   427  	} else {
   428  		team = res.Data.(*model.Team)
   429  	}
   430  
   431  	var team2 *model.Team
   432  	if res, err := th.SystemAdminClient.CreateTeam(&model.Team{
   433  		DisplayName:     t.Name() + "_2",
   434  		Name:            GenerateTestTeamName(),
   435  		Email:           th.GenerateTestEmail(),
   436  		Type:            model.TEAM_OPEN,
   437  		AllowedDomains:  "simulator.amazonses.com",
   438  		AllowOpenInvite: true,
   439  	}); err != nil {
   440  		t.Fatal(err)
   441  	} else {
   442  		team2 = res.Data.(*model.Team)
   443  	}
   444  
   445  	t.Run("team admin/non-admin", func(t *testing.T) {
   446  		if res, err := th.BasicClient.GetAllTeamListings(); err != nil {
   447  			t.Fatal(err)
   448  		} else {
   449  			for _, rteam := range res.Data.(map[string]*model.Team) {
   450  				if rteam.Id == team.Id {
   451  					if rteam.Email == "" {
   452  						t.Fatal("should not have sanitized email for team admin")
   453  					} else if rteam.AllowedDomains == "" {
   454  						t.Fatal("should not have sanitized allowed domains for team admin")
   455  					}
   456  				} else if rteam.Id == team2.Id {
   457  					if rteam.Email != "" {
   458  						t.Fatal("should've sanitized email for non-admin")
   459  					} else if rteam.AllowedDomains != "" {
   460  						t.Fatal("should've sanitized allowed domains for non-admin")
   461  					}
   462  				}
   463  			}
   464  		}
   465  	})
   466  
   467  	t.Run("system admin", func(t *testing.T) {
   468  		if res, err := th.SystemAdminClient.GetAllTeamListings(); err != nil {
   469  			t.Fatal(err)
   470  		} else {
   471  			for _, rteam := range res.Data.(map[string]*model.Team) {
   472  				if rteam.Id != team.Id && rteam.Id != team2.Id {
   473  					continue
   474  				}
   475  
   476  				if rteam.Email == "" {
   477  					t.Fatal("should not have sanitized email")
   478  				} else if rteam.AllowedDomains == "" {
   479  					t.Fatal("should not have sanitized allowed domains")
   480  				}
   481  			}
   482  		}
   483  	})
   484  }
   485  
   486  func TestTeamPermDelete(t *testing.T) {
   487  	th := Setup().InitBasic()
   488  	defer th.TearDown()
   489  
   490  	Client := th.BasicClient
   491  
   492  	team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN}
   493  	team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team)
   494  
   495  	Client.Logout()
   496  
   497  	user1 := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"}
   498  	user1 = Client.Must(Client.CreateUser(user1, "")).Data.(*model.User)
   499  	th.LinkUserToTeam(user1, team)
   500  	store.Must(th.App.Srv.Store.User().VerifyEmail(user1.Id))
   501  
   502  	Client.Login(user1.Email, "passwd1")
   503  	Client.SetTeamId(team.Id)
   504  
   505  	channel1 := &model.Channel{DisplayName: "TestGetPosts", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
   506  	channel1 = Client.Must(Client.CreateChannel(channel1)).Data.(*model.Channel)
   507  
   508  	post1 := &model.Post{ChannelId: channel1.Id, Message: "search for post1"}
   509  	post1 = Client.Must(Client.CreatePost(post1)).Data.(*model.Post)
   510  
   511  	post2 := &model.Post{ChannelId: channel1.Id, Message: "search for post2"}
   512  	post2 = Client.Must(Client.CreatePost(post2)).Data.(*model.Post)
   513  
   514  	post3 := &model.Post{ChannelId: channel1.Id, Message: "#hashtag search for post3"}
   515  	post3 = Client.Must(Client.CreatePost(post3)).Data.(*model.Post)
   516  
   517  	post4 := &model.Post{ChannelId: channel1.Id, Message: "hashtag for post4"}
   518  	post4 = Client.Must(Client.CreatePost(post4)).Data.(*model.Post)
   519  
   520  	c := &Context{}
   521  	c.RequestId = model.NewId()
   522  	c.IpAddress = "test"
   523  
   524  	err := th.App.PermanentDeleteTeam(team)
   525  	if err != nil {
   526  		t.Fatal(err)
   527  	}
   528  
   529  	Client.ClearOAuthToken()
   530  }
   531  
   532  func TestInviteMembers(t *testing.T) {
   533  	th := Setup().InitBasic().InitSystemAdmin()
   534  	defer th.TearDown()
   535  
   536  	Client := th.BasicClient
   537  	SystemAdminClient := th.SystemAdminClient
   538  
   539  	team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN}
   540  	team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team)
   541  
   542  	Client.Logout()
   543  
   544  	user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"}
   545  	user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User)
   546  	th.LinkUserToTeam(user, team)
   547  	store.Must(th.App.Srv.Store.User().VerifyEmail(user.Id))
   548  
   549  	Client.Login(user.Email, "passwd1")
   550  	Client.SetTeamId(team.Id)
   551  
   552  	invite := make(map[string]string)
   553  	invite["email"] = "success+" + model.NewId() + "@simulator.amazonses.com"
   554  	invite["first_name"] = "Test"
   555  	invite["last_name"] = "Guy"
   556  	invites := &model.Invites{Invites: []map[string]string{invite}}
   557  	invites.Invites = append(invites.Invites, invite)
   558  
   559  	if _, err := Client.InviteMembers(invites); err != nil {
   560  		t.Fatal(err)
   561  	}
   562  
   563  	invites2 := &model.Invites{Invites: []map[string]string{}}
   564  	if _, err := Client.InviteMembers(invites2); err == nil {
   565  		t.Fatal("Should have errored out on no invites to send")
   566  	}
   567  
   568  	restrictTeamInvite := *th.App.Config().TeamSettings.RestrictTeamInvite
   569  	defer func() {
   570  		th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictTeamInvite = restrictTeamInvite })
   571  		th.App.SetDefaultRolesBasedOnConfig()
   572  	}()
   573  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictTeamInvite = model.PERMISSIONS_TEAM_ADMIN })
   574  	th.App.SetDefaultRolesBasedOnConfig()
   575  
   576  	th.LoginBasic2()
   577  	th.LinkUserToTeam(th.BasicUser2, team)
   578  
   579  	if _, err := Client.InviteMembers(invites); err != nil {
   580  		t.Fatal(err)
   581  	}
   582  
   583  	isLicensed := utils.IsLicensed()
   584  	license := utils.License()
   585  	defer func() {
   586  		utils.SetIsLicensed(isLicensed)
   587  		utils.SetLicense(license)
   588  		th.App.SetDefaultRolesBasedOnConfig()
   589  	}()
   590  	utils.SetIsLicensed(true)
   591  	utils.SetLicense(&model.License{Features: &model.Features{}})
   592  	utils.License().Features.SetDefaults()
   593  	th.App.SetDefaultRolesBasedOnConfig()
   594  
   595  	if _, err := Client.InviteMembers(invites); err == nil {
   596  		t.Fatal("should have errored not team admin and licensed")
   597  	}
   598  
   599  	th.UpdateUserToTeamAdmin(th.BasicUser2, team)
   600  	Client.Logout()
   601  	th.LoginBasic2()
   602  	Client.SetTeamId(team.Id)
   603  
   604  	if _, err := Client.InviteMembers(invites); err != nil {
   605  		t.Fatal(err)
   606  	}
   607  
   608  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictTeamInvite = model.PERMISSIONS_SYSTEM_ADMIN })
   609  	th.App.SetDefaultRolesBasedOnConfig()
   610  
   611  	if _, err := Client.InviteMembers(invites); err == nil {
   612  		t.Fatal("should have errored not system admin and licensed")
   613  	}
   614  
   615  	th.LinkUserToTeam(th.SystemAdminUser, team)
   616  
   617  	if _, err := SystemAdminClient.InviteMembers(invites); err != nil {
   618  		t.Fatal(err)
   619  	}
   620  }
   621  
   622  func TestUpdateTeamDisplayName(t *testing.T) {
   623  	th := Setup().InitBasic()
   624  	defer th.TearDown()
   625  
   626  	Client := th.BasicClient
   627  
   628  	team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN}
   629  	team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team)
   630  
   631  	Client.Logout()
   632  
   633  	user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"}
   634  	user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User)
   635  	th.LinkUserToTeam(user2, team)
   636  	store.Must(th.App.Srv.Store.User().VerifyEmail(user2.Id))
   637  
   638  	Client.Login(user2.Email, "passwd1")
   639  	Client.SetTeamId(team.Id)
   640  
   641  	vteam := &model.Team{DisplayName: team.DisplayName, Name: team.Name, Email: team.Email, Type: team.Type}
   642  	vteam.DisplayName = "NewName"
   643  	if _, err := Client.UpdateTeam(vteam); err == nil {
   644  		t.Fatal("Should have errored, not admin")
   645  	}
   646  
   647  	th.LoginBasic()
   648  
   649  	vteam.DisplayName = ""
   650  	if _, err := Client.UpdateTeam(vteam); err == nil {
   651  		t.Fatal("Should have errored, empty name")
   652  	}
   653  
   654  	vteam.DisplayName = "NewName"
   655  	if _, err := Client.UpdateTeam(vteam); err != nil {
   656  		t.Fatal(err)
   657  	}
   658  }
   659  
   660  func TestUpdateTeamSanitization(t *testing.T) {
   661  	th := Setup().InitBasic().InitSystemAdmin()
   662  	defer th.TearDown()
   663  
   664  	var team *model.Team
   665  	if res, err := th.BasicClient.CreateTeam(&model.Team{
   666  		DisplayName:    t.Name() + "_1",
   667  		Name:           GenerateTestTeamName(),
   668  		Email:          th.GenerateTestEmail(),
   669  		Type:           model.TEAM_OPEN,
   670  		AllowedDomains: "simulator.amazonses.com",
   671  	}); err != nil {
   672  		t.Fatal(err)
   673  	} else {
   674  		team = res.Data.(*model.Team)
   675  	}
   676  
   677  	// Non-admin users cannot update the team
   678  
   679  	t.Run("team admin", func(t *testing.T) {
   680  		// API v3 always assumes you're updating the current team
   681  		th.BasicClient.SetTeamId(team.Id)
   682  
   683  		if res, err := th.BasicClient.UpdateTeam(team); err != nil {
   684  			t.Fatal(err)
   685  		} else if rteam := res.Data.(*model.Team); rteam.Email == "" {
   686  			t.Fatal("should not have sanitized email for admin")
   687  		} else if rteam.AllowedDomains == "" {
   688  			t.Fatal("should not have sanitized allowed domains")
   689  		}
   690  	})
   691  
   692  	t.Run("system admin", func(t *testing.T) {
   693  		// API v3 always assumes you're updating the current team
   694  		th.SystemAdminClient.SetTeamId(team.Id)
   695  
   696  		if res, err := th.SystemAdminClient.UpdateTeam(team); err != nil {
   697  			t.Fatal(err)
   698  		} else if rteam := res.Data.(*model.Team); rteam.Email == "" {
   699  			t.Fatal("should not have sanitized email for admin")
   700  		} else if rteam.AllowedDomains == "" {
   701  			t.Fatal("should not have sanitized allowed domains")
   702  		}
   703  	})
   704  }
   705  
   706  func TestFuzzyTeamCreate(t *testing.T) {
   707  	th := Setup().InitBasic()
   708  	defer th.TearDown()
   709  
   710  	Client := th.BasicClient
   711  
   712  	for i := 0; i < len(utils.FUZZY_STRINGS_NAMES) || i < len(utils.FUZZY_STRINGS_EMAILS); i++ {
   713  		testDisplayName := "Name"
   714  		testEmail := "test@nowhere.com"
   715  
   716  		if i < len(utils.FUZZY_STRINGS_NAMES) {
   717  			testDisplayName = utils.FUZZY_STRINGS_NAMES[i]
   718  		}
   719  		if i < len(utils.FUZZY_STRINGS_EMAILS) {
   720  			testEmail = utils.FUZZY_STRINGS_EMAILS[i]
   721  		}
   722  
   723  		team := model.Team{DisplayName: testDisplayName, Name: "z-z-" + model.NewId() + "a", Email: testEmail, Type: model.TEAM_OPEN}
   724  
   725  		_, err := Client.CreateTeam(&team)
   726  		if err != nil {
   727  			t.Fatal(err)
   728  		}
   729  	}
   730  }
   731  
   732  func TestGetMyTeam(t *testing.T) {
   733  	th := Setup().InitBasic()
   734  	defer th.TearDown()
   735  
   736  	Client := th.BasicClient
   737  
   738  	team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN}
   739  	rteam, _ := Client.CreateTeam(team)
   740  	team = rteam.Data.(*model.Team)
   741  
   742  	Client.Logout()
   743  
   744  	user := model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"}
   745  	ruser, _ := Client.CreateUser(&user, "")
   746  	th.LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team))
   747  	store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id))
   748  
   749  	Client.Login(user.Email, user.Password)
   750  	Client.SetTeamId(team.Id)
   751  
   752  	if result, err := Client.GetMyTeam(""); err != nil {
   753  		t.Fatal(err)
   754  	} else {
   755  		if result.Data.(*model.Team).DisplayName != team.DisplayName {
   756  			t.Fatal("team names did not match")
   757  		}
   758  		if result.Data.(*model.Team).Name != team.Name {
   759  			t.Fatal("team domains did not match")
   760  		}
   761  		if result.Data.(*model.Team).Type != team.Type {
   762  			t.Fatal("team types did not match")
   763  		}
   764  	}
   765  }
   766  
   767  func TestGetMyTeamSanitization(t *testing.T) {
   768  	th := Setup().InitBasic().InitSystemAdmin()
   769  	defer th.TearDown()
   770  
   771  	var team *model.Team
   772  	if res, err := th.BasicClient.CreateTeam(&model.Team{
   773  		DisplayName:    t.Name() + "_1",
   774  		Name:           GenerateTestTeamName(),
   775  		Email:          th.GenerateTestEmail(),
   776  		Type:           model.TEAM_OPEN,
   777  		AllowedDomains: "simulator.amazonses.com",
   778  	}); err != nil {
   779  		t.Fatal(err)
   780  	} else {
   781  		team = res.Data.(*model.Team)
   782  	}
   783  
   784  	t.Run("team user", func(t *testing.T) {
   785  		th.LinkUserToTeam(th.BasicUser2, team)
   786  
   787  		client := th.CreateClient()
   788  		client.Must(client.Login(th.BasicUser2.Email, th.BasicUser2.Password))
   789  
   790  		client.SetTeamId(team.Id)
   791  
   792  		if res, err := client.GetMyTeam(""); err != nil {
   793  			t.Fatal(err)
   794  		} else if rteam := res.Data.(*model.Team); rteam.Email != "" {
   795  			t.Fatal("should've sanitized email")
   796  		} else if rteam.AllowedDomains != "" {
   797  			t.Fatal("should've sanitized allowed domains")
   798  		}
   799  	})
   800  
   801  	t.Run("team admin", func(t *testing.T) {
   802  		th.BasicClient.SetTeamId(team.Id)
   803  
   804  		if res, err := th.BasicClient.GetMyTeam(""); err != nil {
   805  			t.Fatal(err)
   806  		} else if rteam := res.Data.(*model.Team); rteam.Email == "" {
   807  			t.Fatal("should not have sanitized email")
   808  		} else if rteam.AllowedDomains == "" {
   809  			t.Fatal("should not have sanitized allowed domains")
   810  		}
   811  	})
   812  
   813  	t.Run("system admin", func(t *testing.T) {
   814  		th.SystemAdminClient.SetTeamId(team.Id)
   815  
   816  		if res, err := th.SystemAdminClient.GetMyTeam(""); err != nil {
   817  			t.Fatal(err)
   818  		} else if rteam := res.Data.(*model.Team); rteam.Email == "" {
   819  			t.Fatal("should not have sanitized email")
   820  		} else if rteam.AllowedDomains == "" {
   821  			t.Fatal("should not have sanitized allowed domains")
   822  		}
   823  	})
   824  }
   825  
   826  func TestGetTeamMembers(t *testing.T) {
   827  	th := Setup().InitBasic()
   828  	defer th.TearDown()
   829  
   830  	if result, err := th.BasicClient.GetTeamMembers(th.BasicTeam.Id, 0, 100); err != nil {
   831  		t.Fatal(err)
   832  	} else {
   833  		members := result.Data.([]*model.TeamMember)
   834  		if len(members) == 0 {
   835  			t.Fatal("should have results")
   836  		}
   837  	}
   838  
   839  	if _, err := th.BasicClient.GetTeamMembers("junk", 0, 100); err == nil {
   840  		t.Fatal("should have errored - bad team id")
   841  	}
   842  }
   843  
   844  func TestGetMyTeamMembers(t *testing.T) {
   845  	th := Setup().InitBasic()
   846  	defer th.TearDown()
   847  
   848  	if result, err := th.BasicClient.GetMyTeamMembers(); err != nil {
   849  		t.Fatal(err)
   850  	} else {
   851  		members := result.Data.([]*model.TeamMember)
   852  		if len(members) == 0 {
   853  			t.Fatal("should have results")
   854  		}
   855  	}
   856  }
   857  
   858  func TestGetMyTeamsUnread(t *testing.T) {
   859  	th := Setup().InitBasic()
   860  	defer th.TearDown()
   861  
   862  	if result, err := th.BasicClient.GetMyTeamsUnread(""); err != nil {
   863  		t.Fatal(err)
   864  	} else {
   865  		members := result.Data.([]*model.TeamUnread)
   866  		if len(members) == 0 {
   867  			t.Fatal("should have results")
   868  		}
   869  	}
   870  
   871  	if result, err := th.BasicClient.GetMyTeamsUnread(th.BasicTeam.Id); err != nil {
   872  		t.Fatal(err)
   873  	} else {
   874  		members := result.Data.([]*model.TeamUnread)
   875  		if len(members) != 0 {
   876  			t.Fatal("should not have results")
   877  		}
   878  	}
   879  }
   880  
   881  func TestGetTeamMember(t *testing.T) {
   882  	th := Setup().InitBasic()
   883  	defer th.TearDown()
   884  
   885  	if result, err := th.BasicClient.GetTeamMember(th.BasicTeam.Id, th.BasicUser.Id); err != nil {
   886  		t.Fatal(err)
   887  	} else {
   888  		member := result.Data.(*model.TeamMember)
   889  		if member == nil {
   890  			t.Fatal("should be valid")
   891  		}
   892  	}
   893  
   894  	if _, err := th.BasicClient.GetTeamMember("junk", th.BasicUser.Id); err == nil {
   895  		t.Fatal("should have errored - bad team id")
   896  	}
   897  
   898  	if _, err := th.BasicClient.GetTeamMember(th.BasicTeam.Id, ""); err == nil {
   899  		t.Fatal("should have errored - blank user id")
   900  	}
   901  
   902  	if _, err := th.BasicClient.GetTeamMember(th.BasicTeam.Id, "junk"); err == nil {
   903  		t.Fatal("should have errored - bad user id")
   904  	}
   905  
   906  	if _, err := th.BasicClient.GetTeamMember(th.BasicTeam.Id, "12345678901234567890123456"); err == nil {
   907  		t.Fatal("should have errored - bad user id")
   908  	}
   909  }
   910  
   911  func TestGetTeamMembersByIds(t *testing.T) {
   912  	th := Setup().InitBasic()
   913  	defer th.TearDown()
   914  
   915  	if result, err := th.BasicClient.GetTeamMembersByIds(th.BasicTeam.Id, []string{th.BasicUser.Id}); err != nil {
   916  		t.Fatal(err)
   917  	} else {
   918  		member := result.Data.([]*model.TeamMember)[0]
   919  		if member.UserId != th.BasicUser.Id {
   920  			t.Fatal("user id did not match")
   921  		}
   922  		if member.TeamId != th.BasicTeam.Id {
   923  			t.Fatal("team id did not match")
   924  		}
   925  	}
   926  
   927  	if result, err := th.BasicClient.GetTeamMembersByIds(th.BasicTeam.Id, []string{th.BasicUser.Id, th.BasicUser2.Id, model.NewId()}); err != nil {
   928  		t.Fatal(err)
   929  	} else {
   930  		members := result.Data.([]*model.TeamMember)
   931  		if len(members) != 2 {
   932  			t.Fatal("length should have been 2")
   933  		}
   934  	}
   935  
   936  	if _, err := th.BasicClient.GetTeamMembersByIds("junk", []string{th.BasicUser.Id}); err == nil {
   937  		t.Fatal("should have errored - bad team id")
   938  	}
   939  
   940  	if _, err := th.BasicClient.GetTeamMembersByIds(th.BasicTeam.Id, []string{}); err == nil {
   941  		t.Fatal("should have errored - empty user ids")
   942  	}
   943  }
   944  
   945  func TestUpdateTeamMemberRoles(t *testing.T) {
   946  	th := Setup().InitSystemAdmin().InitBasic()
   947  	defer th.TearDown()
   948  
   949  	th.SystemAdminClient.SetTeamId(th.BasicTeam.Id)
   950  	th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam)
   951  
   952  	const BASIC_MEMBER = "team_user"
   953  	const TEAM_ADMIN = "team_user team_admin"
   954  
   955  	// user 1 trying to promote user 2
   956  	if _, err := th.BasicClient.UpdateTeamRoles(th.BasicUser2.Id, TEAM_ADMIN); err == nil {
   957  		t.Fatal("Should have errored, not team admin")
   958  	}
   959  
   960  	// user 1 trying to promote themselves
   961  	if _, err := th.BasicClient.UpdateTeamRoles(th.BasicUser.Id, TEAM_ADMIN); err == nil {
   962  		t.Fatal("Should have errored, not team admin")
   963  	}
   964  
   965  	// user 1 trying to demote someone
   966  	if _, err := th.BasicClient.UpdateTeamRoles(th.SystemAdminUser.Id, BASIC_MEMBER); err == nil {
   967  		t.Fatal("Should have errored, not team admin")
   968  	}
   969  
   970  	// system admin promoting user1
   971  	if _, err := th.SystemAdminClient.UpdateTeamRoles(th.BasicUser.Id, TEAM_ADMIN); err != nil {
   972  		t.Fatal("Should have worked: " + err.Error())
   973  	}
   974  
   975  	// user 1 trying to promote user 2
   976  	if _, err := th.BasicClient.UpdateTeamRoles(th.BasicUser2.Id, TEAM_ADMIN); err != nil {
   977  		t.Fatal("Should have worked, user is team admin: " + th.BasicUser.Id)
   978  	}
   979  
   980  	// user 1 trying to demote user 2
   981  	if _, err := th.BasicClient.UpdateTeamRoles(th.BasicUser2.Id, BASIC_MEMBER); err != nil {
   982  		t.Fatal("Should have worked, user is team admin")
   983  	}
   984  
   985  	// user 1 trying to demote a system admin
   986  	if _, err := th.BasicClient.UpdateTeamRoles(th.SystemAdminUser.Id, BASIC_MEMBER); err != nil {
   987  		t.Fatal("Should have worked, user is team admin and has the ability to manage permissions on this team.")
   988  		// Note to anyone who thinks this test is wrong:
   989  		// This operation will not effect the system admin's permissions because they have global access to all teams.
   990  		// Their team level permissions are irrelavent. A team admin should be able to manage team level permissions.
   991  	}
   992  
   993  	// System admins should be able to manipulate permission no matter what their team level permissions are.
   994  	// systemAdmin trying to promote user 2
   995  	if _, err := th.SystemAdminClient.UpdateTeamRoles(th.BasicUser2.Id, TEAM_ADMIN); err != nil {
   996  		t.Fatal("Should have worked, user is system admin")
   997  	}
   998  
   999  	// system admin trying to demote user 2
  1000  	if _, err := th.SystemAdminClient.UpdateTeamRoles(th.BasicUser2.Id, BASIC_MEMBER); err != nil {
  1001  		t.Fatal("Should have worked, user is system admin")
  1002  	}
  1003  
  1004  	// user 1 trying to demote himself
  1005  	if _, err := th.BasicClient.UpdateTeamRoles(th.BasicUser.Id, BASIC_MEMBER); err != nil {
  1006  		t.Fatal("Should have worked, user is team admin")
  1007  	}
  1008  }
  1009  
  1010  func TestGetTeamStats(t *testing.T) {
  1011  	th := Setup().InitBasic().InitSystemAdmin()
  1012  	defer th.TearDown()
  1013  
  1014  	Client := th.BasicClient
  1015  
  1016  	if result, err := th.SystemAdminClient.GetTeamStats(th.BasicTeam.Id); err != nil {
  1017  		t.Fatal(err)
  1018  	} else {
  1019  		if result.Data.(*model.TeamStats).TotalMemberCount != 2 {
  1020  			t.Fatal("wrong count")
  1021  		}
  1022  
  1023  		if result.Data.(*model.TeamStats).ActiveMemberCount != 2 {
  1024  			t.Fatal("wrong count")
  1025  		}
  1026  	}
  1027  
  1028  	th.SystemAdminClient.Must(th.SystemAdminClient.UpdateActive(th.BasicUser2.Id, false))
  1029  
  1030  	if result, err := th.SystemAdminClient.GetTeamStats(th.BasicTeam.Id); err != nil {
  1031  		t.Fatal(err)
  1032  	} else {
  1033  		if result.Data.(*model.TeamStats).TotalMemberCount != 2 {
  1034  			t.Fatal("wrong count")
  1035  		}
  1036  
  1037  		if result.Data.(*model.TeamStats).ActiveMemberCount != 1 {
  1038  			t.Fatal("wrong count")
  1039  		}
  1040  	}
  1041  
  1042  	if _, err := th.SystemAdminClient.GetTeamStats("junk"); err == nil {
  1043  		t.Fatal("should fail invalid teamid")
  1044  	} else {
  1045  		if err.Id != "store.sql_team.get.find.app_error" {
  1046  			t.Fatal("wrong error. Got: " + err.Id)
  1047  		}
  1048  	}
  1049  
  1050  	if result, err := th.SystemAdminClient.GetTeamStats(th.BasicTeam.Id); err != nil {
  1051  		t.Fatal(err)
  1052  	} else {
  1053  		if result.Data.(*model.TeamStats).TotalMemberCount != 2 {
  1054  			t.Fatal("wrong count")
  1055  		}
  1056  	}
  1057  
  1058  	user := model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"}
  1059  	ruser, _ := Client.CreateUser(&user, "")
  1060  	store.Must(th.App.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id))
  1061  
  1062  	Client.Login(user.Email, user.Password)
  1063  
  1064  	if _, err := Client.GetTeamStats(th.BasicTeam.Id); err == nil {
  1065  		t.Fatal("should have errored - not on team")
  1066  	}
  1067  }
  1068  
  1069  func TestUpdateTeamDescription(t *testing.T) {
  1070  	th := Setup().InitBasic()
  1071  	defer th.TearDown()
  1072  
  1073  	Client := th.BasicClient
  1074  
  1075  	team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN}
  1076  	team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team)
  1077  
  1078  	Client.Logout()
  1079  
  1080  	user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Jabba the Hutt", Password: "passwd1"}
  1081  	user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User)
  1082  	th.LinkUserToTeam(user2, team)
  1083  	store.Must(th.App.Srv.Store.User().VerifyEmail(user2.Id))
  1084  
  1085  	Client.Login(user2.Email, "passwd1")
  1086  	Client.SetTeamId(team.Id)
  1087  
  1088  	vteam := &model.Team{DisplayName: team.DisplayName, Name: team.Name, Description: team.Description, Email: team.Email, Type: team.Type}
  1089  	vteam.Description = "yommamma"
  1090  	if _, err := Client.UpdateTeam(vteam); err == nil {
  1091  		t.Fatal("Should have errored, not admin")
  1092  	}
  1093  
  1094  	th.LoginBasic()
  1095  
  1096  	vteam.Description = ""
  1097  	if _, err := Client.UpdateTeam(vteam); err != nil {
  1098  		t.Fatal("Should have errored, should save blank Description")
  1099  	}
  1100  
  1101  	vteam.Description = "yommamma"
  1102  	if _, err := Client.UpdateTeam(vteam); err != nil {
  1103  		t.Fatal(err)
  1104  	}
  1105  }
  1106  
  1107  func TestGetTeamByName(t *testing.T) {
  1108  	th := Setup().InitSystemAdmin().InitBasic()
  1109  	defer th.TearDown()
  1110  
  1111  	Client := th.BasicClient
  1112  
  1113  	team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN, AllowOpenInvite: false}
  1114  	team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team)
  1115  
  1116  	team2 := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN, AllowOpenInvite: true}
  1117  	team2 = Client.Must(Client.CreateTeam(team2)).Data.(*model.Team)
  1118  
  1119  	team3 := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_INVITE, AllowOpenInvite: true}
  1120  	team3 = Client.Must(Client.CreateTeam(team3)).Data.(*model.Team)
  1121  
  1122  	if _, err := Client.GetTeamByName(team.Name); err != nil {
  1123  		t.Fatal("Failed to get team")
  1124  	}
  1125  
  1126  	if _, err := Client.GetTeamByName("InvalidTeamName"); err == nil {
  1127  		t.Fatal("Should not exist this team")
  1128  	}
  1129  
  1130  	if _, err := Client.GetTeamByName(team2.Name); err != nil {
  1131  		t.Fatal("Failed to get team")
  1132  	}
  1133  
  1134  	Client.Must(Client.Logout())
  1135  
  1136  	user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Jabba the Hutt", Password: "passwd1"}
  1137  	user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User)
  1138  	store.Must(th.App.Srv.Store.User().VerifyEmail(user2.Id))
  1139  
  1140  	Client.Login(user2.Email, "passwd1")
  1141  
  1142  	// AllowInviteOpen is false and team is open and user is not part of the team
  1143  	if _, err := Client.GetTeamByName(team.Name); err == nil {
  1144  		t.Fatal("Should fail dont have permissions to get the team")
  1145  	}
  1146  
  1147  	if _, err := Client.GetTeamByName("InvalidTeamName"); err == nil {
  1148  		t.Fatal("Should not exist this team")
  1149  	}
  1150  
  1151  	// AllowInviteOpen is true and is open and user is not part of the team
  1152  	if _, err := Client.GetTeamByName(team2.Name); err != nil {
  1153  		t.Fatal("Should not fail team is open")
  1154  	}
  1155  
  1156  	// AllowInviteOpen is true and is invite only and user is not part of the team
  1157  	if _, err := Client.GetTeamByName(team3.Name); err == nil {
  1158  		t.Fatal("Should fail team is invite only")
  1159  	}
  1160  
  1161  	Client.Must(Client.Logout())
  1162  	th.BasicClient.Logout()
  1163  	th.LoginSystemAdmin()
  1164  
  1165  	if _, err := th.SystemAdminClient.GetTeamByName(team.Name); err != nil {
  1166  		t.Fatal("Should not fail to get team the user is admin")
  1167  	}
  1168  
  1169  	if _, err := th.SystemAdminClient.GetTeamByName(team2.Name); err != nil {
  1170  		t.Fatal("Should not fail to get team the user is admin and team is open")
  1171  	}
  1172  
  1173  	if _, err := th.SystemAdminClient.GetTeamByName(team3.Name); err != nil {
  1174  		t.Fatal("Should not fail to get team the user is admin and team is invite")
  1175  	}
  1176  
  1177  	if _, err := Client.GetTeamByName("InvalidTeamName"); err == nil {
  1178  		t.Fatal("Should not exist this team")
  1179  	}
  1180  
  1181  	Client.Logout()
  1182  	if _, err := Client.GetTeamByName(th.BasicTeam.Name); err == nil {
  1183  		t.Fatal("Should have failed when not logged in.")
  1184  	}
  1185  }
  1186  
  1187  func TestGetTeamByNameSanitization(t *testing.T) {
  1188  	th := Setup().InitBasic().InitSystemAdmin()
  1189  	defer th.TearDown()
  1190  
  1191  	var team *model.Team
  1192  	if res, err := th.BasicClient.CreateTeam(&model.Team{
  1193  		DisplayName:    t.Name() + "_1",
  1194  		Name:           GenerateTestTeamName(),
  1195  		Email:          th.GenerateTestEmail(),
  1196  		Type:           model.TEAM_OPEN,
  1197  		AllowedDomains: "simulator.amazonses.com",
  1198  	}); err != nil {
  1199  		t.Fatal(err)
  1200  	} else {
  1201  		team = res.Data.(*model.Team)
  1202  	}
  1203  
  1204  	t.Run("team user", func(t *testing.T) {
  1205  		th.LinkUserToTeam(th.BasicUser2, team)
  1206  
  1207  		client := th.CreateClient()
  1208  		client.Must(client.Login(th.BasicUser2.Email, th.BasicUser2.Password))
  1209  
  1210  		if res, err := client.GetTeamByName(team.Name); err != nil {
  1211  			t.Fatal(err)
  1212  		} else if rteam := res.Data.(*model.Team); rteam.Email != "" {
  1213  			t.Fatal("should've sanitized email")
  1214  		} else if rteam.AllowedDomains != "" {
  1215  			t.Fatal("should've sanitized allowed domains")
  1216  		}
  1217  	})
  1218  
  1219  	t.Run("team admin", func(t *testing.T) {
  1220  		if res, err := th.BasicClient.GetTeamByName(team.Name); err != nil {
  1221  			t.Fatal(err)
  1222  		} else if rteam := res.Data.(*model.Team); rteam.Email == "" {
  1223  			t.Fatal("should not have sanitized email")
  1224  		} else if rteam.AllowedDomains == "" {
  1225  			t.Fatal("should not have sanitized allowed domains")
  1226  		}
  1227  	})
  1228  
  1229  	t.Run("system admin", func(t *testing.T) {
  1230  		th.SystemAdminClient.SetTeamId(team.Id)
  1231  
  1232  		if res, err := th.SystemAdminClient.GetTeamByName(team.Name); err != nil {
  1233  			t.Fatal(err)
  1234  		} else if rteam := res.Data.(*model.Team); rteam.Email == "" {
  1235  			t.Fatal("should not have sanitized email")
  1236  		} else if rteam.AllowedDomains == "" {
  1237  			t.Fatal("should not have sanitized allowed domains")
  1238  		}
  1239  	})
  1240  }
  1241  
  1242  func TestFindTeamByName(t *testing.T) {
  1243  	th := Setup().InitBasic()
  1244  	defer th.TearDown()
  1245  
  1246  	Client := th.BasicClient
  1247  	Client.Logout()
  1248  
  1249  	if _, err := Client.FindTeamByName(th.BasicTeam.Name); err == nil {
  1250  		t.Fatal("Should have failed when not logged in.")
  1251  	}
  1252  }