From b660e217d1549c237068d831aa55eea5b0d52f0f Mon Sep 17 00:00:00 2001 From: Miguel de la Cruz Date: Thu, 23 Jul 2020 12:21:33 +0200 Subject: [PATCH] Add tests to get team local endpoints (#15071) Co-authored-by: Mattermod --- api4/team_test.go | 172 +++++++++++++++++++++++++--------------------- 1 file changed, 94 insertions(+), 78 deletions(-) diff --git a/api4/team_test.go b/api4/team_test.go index 8b950f0aa3..9da821eb5a 100644 --- a/api4/team_test.go +++ b/api4/team_test.go @@ -24,52 +24,54 @@ import ( func TestCreateTeam(t *testing.T) { th := Setup(t) defer th.TearDown() - Client := th.Client + + th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { + team := &model.Team{Name: GenerateTestUsername(), DisplayName: "Some Team", Type: model.TEAM_OPEN} + rteam, resp := client.CreateTeam(team) + CheckNoError(t, resp) + CheckCreatedStatus(t, resp) + + require.Equal(t, rteam.Name, team.Name, "names did not match") + + require.Equal(t, rteam.DisplayName, team.DisplayName, "display names did not match") + + require.Equal(t, rteam.Type, team.Type, "types did not match") + + _, resp = client.CreateTeam(rteam) + CheckBadRequestStatus(t, resp) + + rteam.Id = "" + _, resp = client.CreateTeam(rteam) + CheckErrorMessage(t, resp, "store.sql_team.save.domain_exists.app_error") + CheckBadRequestStatus(t, resp) + + rteam.Name = "" + _, resp = client.CreateTeam(rteam) + CheckErrorMessage(t, resp, "model.team.is_valid.characters.app_error") + CheckBadRequestStatus(t, resp) + + r, err := client.DoApiPost("/teams", "garbage") + require.NotNil(t, err, "should have errored") + + require.Equalf(t, r.StatusCode, http.StatusBadRequest, "wrong status code, actual: %s, expected: %s", strconv.Itoa(r.StatusCode), strconv.Itoa(http.StatusBadRequest)) + + // Test GroupConstrained flag + groupConstrainedTeam := &model.Team{Name: GenerateTestUsername(), DisplayName: "Some Team", Type: model.TEAM_OPEN, GroupConstrained: model.NewBool(true)} + rteam, resp = client.CreateTeam(groupConstrainedTeam) + CheckNoError(t, resp) + CheckCreatedStatus(t, resp) + + assert.Equal(t, *rteam.GroupConstrained, *groupConstrainedTeam.GroupConstrained, "GroupConstrained flags do not match") + }) + + th.Client.Logout() team := &model.Team{Name: GenerateTestUsername(), DisplayName: "Some Team", Type: model.TEAM_OPEN} - rteam, resp := Client.CreateTeam(team) - CheckNoError(t, resp) - CheckCreatedStatus(t, resp) - - require.Equal(t, rteam.Name, team.Name, "names did not match") - - require.Equal(t, rteam.DisplayName, team.DisplayName, "display names did not match") - - require.Equal(t, rteam.Type, team.Type, "types did not match") - - _, resp = Client.CreateTeam(rteam) - CheckBadRequestStatus(t, resp) - - rteam.Id = "" - _, resp = Client.CreateTeam(rteam) - CheckErrorMessage(t, resp, "store.sql_team.save.domain_exists.app_error") - CheckBadRequestStatus(t, resp) - - rteam.Name = "" - _, resp = Client.CreateTeam(rteam) - CheckErrorMessage(t, resp, "model.team.is_valid.characters.app_error") - CheckBadRequestStatus(t, resp) - - r, err := Client.DoApiPost("/teams", "garbage") - require.NotNil(t, err, "should have errored") - - require.Equalf(t, r.StatusCode, http.StatusBadRequest, "wrong status code, actual: %s, expected: %s", strconv.Itoa(r.StatusCode), strconv.Itoa(http.StatusBadRequest)) - - Client.Logout() - - _, resp = Client.CreateTeam(rteam) + _, resp := th.Client.CreateTeam(team) CheckUnauthorizedStatus(t, resp) th.LoginBasic() - // Test GroupConstrained flag - groupConstrainedTeam := &model.Team{Name: GenerateTestUsername(), DisplayName: "Some Team", Type: model.TEAM_OPEN, GroupConstrained: model.NewBool(true)} - rteam, resp = Client.CreateTeam(groupConstrainedTeam) - CheckNoError(t, resp) - CheckCreatedStatus(t, resp) - - assert.Equal(t, *rteam.GroupConstrained, *groupConstrainedTeam.GroupConstrained, "GroupConstrained flags do not match") - // Check the appropriate permissions are enforced. defaultRolePermissions := th.SaveDefaultRolePermissions() defer func() { @@ -79,7 +81,7 @@ func TestCreateTeam(t *testing.T) { th.RemovePermissionFromRole(model.PERMISSION_CREATE_TEAM.Id, model.SYSTEM_USER_ROLE_ID) th.AddPermissionToRole(model.PERMISSION_CREATE_TEAM.Id, model.SYSTEM_ADMIN_ROLE_ID) - _, resp = Client.CreateTeam(team) + _, resp = th.Client.CreateTeam(team) CheckForbiddenStatus(t, resp) } @@ -104,7 +106,7 @@ func TestCreateTeamSanitization(t *testing.T) { require.NotEmpty(t, rteam.InviteId, "should not have sanitized inviteid") }) - t.Run("system admin", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { team := &model.Team{ DisplayName: t.Name() + "_2", Name: GenerateTestTeamName(), @@ -113,11 +115,11 @@ func TestCreateTeamSanitization(t *testing.T) { AllowedDomains: "simulator.amazonses.com,localhost", } - rteam, resp := th.SystemAdminClient.CreateTeam(team) + rteam, resp := client.CreateTeam(team) CheckNoError(t, resp) require.NotEmpty(t, rteam.Email, "should not have sanitized email") require.NotEmpty(t, rteam.InviteId, "should not have sanitized inviteid") - }) + }, "system admin") } func TestGetTeam(t *testing.T) { @@ -126,19 +128,21 @@ func TestGetTeam(t *testing.T) { Client := th.Client team := th.BasicTeam - rteam, resp := Client.GetTeam(team.Id, "") - CheckNoError(t, resp) + th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { + rteam, resp := client.GetTeam(team.Id, "") + CheckNoError(t, resp) - require.Equal(t, rteam.Id, team.Id, "wrong team") + require.Equal(t, rteam.Id, team.Id, "wrong team") - _, resp = Client.GetTeam("junk", "") - CheckBadRequestStatus(t, resp) + _, resp = client.GetTeam("junk", "") + CheckBadRequestStatus(t, resp) - _, resp = Client.GetTeam("", "") - CheckNotFoundStatus(t, resp) + _, resp = client.GetTeam("", "") + CheckNotFoundStatus(t, resp) - _, resp = Client.GetTeam(model.NewId(), "") - CheckNotFoundStatus(t, resp) + _, resp = client.GetTeam(model.NewId(), "") + CheckNotFoundStatus(t, resp) + }) th.LoginTeamAdmin() @@ -150,7 +154,7 @@ func TestGetTeam(t *testing.T) { th.LoginBasic() // AllowInviteOpen is false and team is open, and user is not on team - _, resp = Client.GetTeam(rteam2.Id, "") + _, resp := Client.GetTeam(rteam2.Id, "") CheckForbiddenStatus(t, resp) // AllowInviteOpen is true and team is invite, and user is not on team @@ -161,8 +165,10 @@ func TestGetTeam(t *testing.T) { _, resp = Client.GetTeam(team.Id, "") CheckUnauthorizedStatus(t, resp) - _, resp = th.SystemAdminClient.GetTeam(rteam2.Id, "") - CheckNoError(t, resp) + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { + _, resp = client.GetTeam(rteam2.Id, "") + CheckNoError(t, resp) + }) } func TestGetTeamSanitization(t *testing.T) { @@ -213,13 +219,13 @@ func TestGetTeamSanitization(t *testing.T) { require.NotEmpty(t, rteam.InviteId, "should not have sanitized inviteid") }) - t.Run("system admin", func(t *testing.T) { - rteam, resp := th.SystemAdminClient.GetTeam(team.Id, "") + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { + rteam, resp := client.GetTeam(team.Id, "") CheckNoError(t, resp) require.NotEmpty(t, rteam.Email, "should not have sanitized email") require.NotEmpty(t, rteam.InviteId, "should not have sanitized inviteid") - }) + }, "system admin") } func TestGetTeamUnread(t *testing.T) { @@ -979,6 +985,12 @@ func TestGetAllTeams(t *testing.T) { }) } + t.Run("Local mode", func(t *testing.T) { + teams, res := th.LocalClient.GetAllTeams("", 0, 10) + CheckNoError(t, res) + require.Len(t, teams, 5) + }) + t.Run("Unauthorized", func(t *testing.T) { Client.Logout() _, resp = Client.GetAllTeams("", 1, 10) @@ -1033,8 +1045,8 @@ func TestGetAllTeamsSanitization(t *testing.T) { require.True(t, team2Found, "wasn't returned the expected teams so the test wasn't run correctly") }) - t.Run("system admin", func(t *testing.T) { - rteams, resp := th.SystemAdminClient.GetAllTeams("", 0, 1000) + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { + rteams, resp := client.GetAllTeams("", 0, 1000) CheckNoError(t, resp) for _, rteam := range rteams { if rteam.Id != team.Id && rteam.Id != team2.Id { @@ -1044,31 +1056,35 @@ func TestGetAllTeamsSanitization(t *testing.T) { require.NotEmpty(t, rteam.Email, "should not have sanitized email") require.NotEmpty(t, rteam.InviteId, "should not have sanitized inviteid") } - }) + }, "system admin") } func TestGetTeamByName(t *testing.T) { th := Setup(t).InitBasic() defer th.TearDown() - Client := th.Client team := th.BasicTeam - rteam, resp := Client.GetTeamByName(team.Name, "") - CheckNoError(t, resp) + th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { + rteam, resp := client.GetTeamByName(team.Name, "") + CheckNoError(t, resp) - require.Equal(t, rteam.Name, team.Name, "wrong team") + require.Equal(t, rteam.Name, team.Name, "wrong team") - _, resp = Client.GetTeamByName("junk", "") - CheckNotFoundStatus(t, resp) + _, resp = client.GetTeamByName("junk", "") + CheckNotFoundStatus(t, resp) - _, resp = Client.GetTeamByName("", "") - CheckNotFoundStatus(t, resp) + _, resp = client.GetTeamByName("", "") + CheckNotFoundStatus(t, resp) - _, resp = th.SystemAdminClient.GetTeamByName(strings.ToUpper(team.Name), "") - CheckNoError(t, resp) + }) - Client.Logout() - _, resp = Client.GetTeamByName(team.Name, "") + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { + _, resp := client.GetTeamByName(strings.ToUpper(team.Name), "") + CheckNoError(t, resp) + }) + + th.Client.Logout() + _, resp := th.Client.GetTeamByName(team.Name, "") CheckUnauthorizedStatus(t, resp) _, resp = th.SystemAdminClient.GetTeamByName(team.Name, "") @@ -1077,18 +1093,18 @@ func TestGetTeamByName(t *testing.T) { th.LoginTeamAdmin() team2 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: false} - rteam2, _ := Client.CreateTeam(team2) + rteam2, _ := th.Client.CreateTeam(team2) team3 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_INVITE, AllowOpenInvite: true} - rteam3, _ := Client.CreateTeam(team3) + rteam3, _ := th.Client.CreateTeam(team3) th.LoginBasic() // AllowInviteOpen is false and team is open, and user is not on team - _, resp = Client.GetTeamByName(rteam2.Name, "") + _, resp = th.Client.GetTeamByName(rteam2.Name, "") CheckForbiddenStatus(t, resp) // AllowInviteOpen is true and team is invite only, and user is not on team - _, resp = Client.GetTeamByName(rteam3.Name, "") + _, resp = th.Client.GetTeamByName(rteam3.Name, "") CheckForbiddenStatus(t, resp) }