summaryrefslogtreecommitdiffstats
path: root/api4
diff options
context:
space:
mode:
Diffstat (limited to 'api4')
-rw-r--r--api4/team.go30
-rw-r--r--api4/team_test.go76
2 files changed, 106 insertions, 0 deletions
diff --git a/api4/team.go b/api4/team.go
index 85a083ee1..d71ccbf2e 100644
--- a/api4/team.go
+++ b/api4/team.go
@@ -20,6 +20,7 @@ func InitTeam() {
BaseRoutes.Teams.Handle("", ApiSessionRequired(createTeam)).Methods("POST")
BaseRoutes.Teams.Handle("", ApiSessionRequired(getAllTeams)).Methods("GET")
+ BaseRoutes.Teams.Handle("/search", ApiSessionRequired(searchTeams)).Methods("POST")
BaseRoutes.TeamsForUser.Handle("", ApiSessionRequired(getTeamsForUser)).Methods("GET")
BaseRoutes.TeamsForUser.Handle("/unread", ApiSessionRequired(getTeamsUnreadForUser)).Methods("GET")
@@ -456,6 +457,35 @@ func getAllTeams(c *Context, w http.ResponseWriter, r *http.Request) {
w.Write([]byte(model.TeamListToJson(teams)))
}
+func searchTeams(c *Context, w http.ResponseWriter, r *http.Request) {
+ props := model.TeamSearchFromJson(r.Body)
+ if props == nil {
+ c.SetInvalidParam("team_search")
+ return
+ }
+
+ if len(props.Term) == 0 {
+ c.SetInvalidParam("term")
+ return
+ }
+
+ var teams []*model.Team
+ var err *model.AppError
+
+ if app.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_SYSTEM) {
+ teams, err = app.SearchAllTeams(props.Term)
+ } else {
+ teams, err = app.SearchOpenTeams(props.Term)
+ }
+
+ if err != nil {
+ c.Err = err
+ return
+ }
+
+ w.Write([]byte(model.TeamListToJson(teams)))
+}
+
func teamExists(c *Context, w http.ResponseWriter, r *http.Request) {
c.RequireTeamName()
if c.Err != nil {
diff --git a/api4/team_test.go b/api4/team_test.go
index 6127919c1..227b0958b 100644
--- a/api4/team_test.go
+++ b/api4/team_test.go
@@ -7,6 +7,7 @@ import (
"encoding/binary"
"fmt"
"net/http"
+ "reflect"
"strconv"
"strings"
"testing"
@@ -405,6 +406,81 @@ func TestGetTeamByName(t *testing.T) {
CheckForbiddenStatus(t, resp)
}
+func TestSearchAllTeams(t *testing.T) {
+ th := Setup().InitBasic().InitSystemAdmin()
+ defer TearDown()
+ Client := th.Client
+ oTeam := th.BasicTeam
+
+ pTeam := &model.Team{DisplayName: "PName", Name: GenerateTestTeamName(), Email: GenerateTestEmail(), Type: model.TEAM_INVITE}
+ Client.CreateTeam(pTeam)
+
+ rteams, resp := Client.SearchTeams(&model.TeamSearch{Term: oTeam.Name})
+ CheckNoError(t, resp)
+
+ if len(rteams) != 1 {
+ t.Fatal("should have returned 1 team")
+ }
+
+ if !reflect.DeepEqual(rteams[0], oTeam) {
+ t.Fatal("invalid team")
+ }
+
+ rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: oTeam.DisplayName})
+ CheckNoError(t, resp)
+
+ if len(rteams) != 1 {
+ t.Fatal("should have returned 1 team")
+ }
+
+ if !reflect.DeepEqual(rteams[0], oTeam) {
+ t.Fatal("invalid team")
+ }
+
+ rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: pTeam.Name})
+ CheckNoError(t, resp)
+
+ if len(rteams) != 0 {
+ t.Fatal("should have not returned team")
+ }
+
+ rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: pTeam.DisplayName})
+ CheckNoError(t, resp)
+
+ if len(rteams) != 0 {
+ t.Fatal("should have not returned team")
+ }
+
+ rteams, resp = th.SystemAdminClient.SearchTeams(&model.TeamSearch{Term: oTeam.Name})
+ CheckNoError(t, resp)
+
+ if len(rteams) != 1 {
+ t.Fatal("should have returned 1 team")
+ }
+
+ rteams, resp = th.SystemAdminClient.SearchTeams(&model.TeamSearch{Term: pTeam.DisplayName})
+ CheckNoError(t, resp)
+
+ if len(rteams) != 1 {
+ t.Fatal("should have returned 1 team")
+ }
+
+ rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: "junk"})
+ CheckNoError(t, resp)
+
+ if len(rteams) != 0 {
+ t.Fatal("should have not returned team")
+ }
+
+ Client.Logout()
+
+ rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: pTeam.Name})
+ CheckUnauthorizedStatus(t, resp)
+
+ rteams, resp = Client.SearchTeams(&model.TeamSearch{Term: pTeam.DisplayName})
+ CheckUnauthorizedStatus(t, resp)
+}
+
func TestGetTeamsForUser(t *testing.T) {
th := Setup().InitBasic().InitSystemAdmin()
defer TearDown()