diff options
Diffstat (limited to 'api4')
-rw-r--r-- | api4/team.go | 30 | ||||
-rw-r--r-- | api4/team_test.go | 76 |
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() |