diff --git a/api4/team_local.go b/api4/team_local.go index a658e0a7e7..b89c3a16e0 100644 --- a/api4/team_local.go +++ b/api4/team_local.go @@ -21,6 +21,8 @@ func (api *API) InitTeamLocal() { api.BaseRoutes.Team.Handle("", api.ApiLocal(localDeleteTeam)).Methods("DELETE") api.BaseRoutes.Team.Handle("/invite/email", api.ApiLocal(localInviteUsersToTeam)).Methods("POST") api.BaseRoutes.Team.Handle("/patch", api.ApiLocal(patchTeam)).Methods("PUT") + api.BaseRoutes.Team.Handle("/privacy", api.ApiLocal(updateTeamPrivacy)).Methods("PUT") + api.BaseRoutes.Team.Handle("/restore", api.ApiLocal(restoreTeam)).Methods("POST") api.BaseRoutes.TeamByName.Handle("", api.ApiLocal(getTeamByName)).Methods("GET") api.BaseRoutes.TeamMembers.Handle("", api.ApiLocal(addTeamMember)).Methods("POST") diff --git a/api4/team_test.go b/api4/team_test.go index 9da821eb5a..bdcf0cc8ab 100644 --- a/api4/team_test.go +++ b/api4/team_test.go @@ -507,29 +507,29 @@ func TestRestoreTeam(t *testing.T) { CheckForbiddenStatus(t, resp) }) - t.Run("restore archived public team", func(t *testing.T) { + th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { team := createTeam(t, true, model.TEAM_OPEN) - team, resp := Client.RestoreTeam(team.Id) + team, resp := client.RestoreTeam(team.Id) CheckOKStatus(t, resp) require.Zero(t, team.DeleteAt) require.Equal(t, model.TEAM_OPEN, team.Type) - }) + }, "restore archived public team") - t.Run("restore archived private team", func(t *testing.T) { + th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { team := createTeam(t, true, model.TEAM_INVITE) - team, resp := Client.RestoreTeam(team.Id) + team, resp := client.RestoreTeam(team.Id) CheckOKStatus(t, resp) require.Zero(t, team.DeleteAt) require.Equal(t, model.TEAM_INVITE, team.Type) - }) + }, "restore archived private team") - t.Run("restore active public team", func(t *testing.T) { + th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { team := createTeam(t, false, model.TEAM_OPEN) - team, resp := Client.RestoreTeam(team.Id) + team, resp := client.RestoreTeam(team.Id) CheckOKStatus(t, resp) require.Zero(t, team.DeleteAt) require.Equal(t, model.TEAM_OPEN, team.Type) - }) + }, "restore active public team") t.Run("not logged in", func(t *testing.T) { Client.Logout() @@ -542,6 +542,11 @@ func TestRestoreTeam(t *testing.T) { _, resp := Client.RestoreTeam(teamPublic.Id) CheckForbiddenStatus(t, resp) }) + + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { + _, resp := client.RestoreTeam(teamPublic.Id) + CheckOKStatus(t, resp) + }) } func TestPatchTeamSanitization(t *testing.T) { @@ -613,7 +618,6 @@ func TestUpdateTeamPrivacy(t *testing.T) { originalInviteId string }{ {name: "bad privacy", team: teamPublic, privacy: "blap", errChecker: CheckBadRequestStatus, wantType: model.TEAM_OPEN, wantOpenInvite: true}, - {name: "bad team", team: &model.Team{Id: model.NewId()}, privacy: model.TEAM_OPEN, errChecker: CheckForbiddenStatus, wantType: model.TEAM_OPEN, wantOpenInvite: true}, {name: "public to private", team: teamPublic, privacy: model.TEAM_INVITE, errChecker: nil, wantType: model.TEAM_INVITE, wantOpenInvite: false, originalInviteId: teamPublic.InviteId, wantInviteIdChanged: true}, {name: "private to public", team: teamPrivate, privacy: model.TEAM_OPEN, errChecker: nil, wantType: model.TEAM_OPEN, wantOpenInvite: true, originalInviteId: teamPrivate.InviteId, wantInviteIdChanged: false}, {name: "public to public", team: teamPublic2, privacy: model.TEAM_OPEN, errChecker: nil, wantType: model.TEAM_OPEN, wantOpenInvite: true, originalInviteId: teamPublic2.InviteId, wantInviteIdChanged: false}, @@ -622,24 +626,36 @@ func TestUpdateTeamPrivacy(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - team, resp := Client.UpdateTeamPrivacy(test.team.Id, test.privacy) - if test.errChecker != nil { - test.errChecker(t, resp) - return - } else { - CheckNoError(t, resp) - CheckOKStatus(t, resp) - } - require.Equal(t, test.wantType, team.Type) - require.Equal(t, test.wantOpenInvite, team.AllowOpenInvite) - if test.wantInviteIdChanged { - require.NotEqual(t, test.originalInviteId, team.InviteId) - } else { - require.Equal(t, test.originalInviteId, team.InviteId) - } + th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { + team, resp := client.UpdateTeamPrivacy(test.team.Id, test.privacy) + if test.errChecker != nil { + test.errChecker(t, resp) + return + } else { + CheckNoError(t, resp) + CheckOKStatus(t, resp) + } + require.Equal(t, test.wantType, team.Type) + require.Equal(t, test.wantOpenInvite, team.AllowOpenInvite) + if test.wantInviteIdChanged { + require.NotEqual(t, test.originalInviteId, team.InviteId) + } else { + require.Equal(t, test.originalInviteId, team.InviteId) + } + }) }) } + t.Run("non-existent team", func(t *testing.T) { + _, resp := Client.UpdateTeamPrivacy(model.NewId(), model.TEAM_INVITE) + CheckForbiddenStatus(t, resp) + }) + + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { + _, resp := client.UpdateTeamPrivacy(model.NewId(), model.TEAM_INVITE) + CheckNotFoundStatus(t, resp) + }, "non-existent team for admins") + t.Run("not logged in", func(t *testing.T) { Client.Logout() _, resp := Client.UpdateTeamPrivacy(teamPublic.Id, model.TEAM_INVITE)