summaryrefslogtreecommitdiffstats
path: root/api4
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2018-09-26 07:27:04 -0700
committerHarrison Healey <harrisonmhealey@gmail.com>2018-09-26 10:27:04 -0400
commit37e00ef916af9a5aeae760a01fa0a0cf8ca93637 (patch)
tree280c92b115a4614ee74ed4bb0efcaefe9cc8454f /api4
parentbfec808e53772fc79860412cd11c77ca1629739f (diff)
downloadchat-37e00ef916af9a5aeae760a01fa0a0cf8ca93637.tar.gz
chat-37e00ef916af9a5aeae760a01fa0a0cf8ca93637.tar.bz2
chat-37e00ef916af9a5aeae760a01fa0a0cf8ca93637.zip
Adding paging to elasticsearch API. (#9425)
Diffstat (limited to 'api4')
-rw-r--r--api4/post.go36
-rw-r--r--api4/post_test.go38
2 files changed, 59 insertions, 15 deletions
diff --git a/api4/post.go b/api4/post.go
index 46c688014..6500cba32 100644
--- a/api4/post.go
+++ b/api4/post.go
@@ -330,26 +330,42 @@ func searchPosts(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- includeDeletedChannels := r.URL.Query().Get("include_deleted_channels") == "true"
+ params := model.SearchParameterFromJson(r.Body)
- props := model.StringInterfaceFromJson(r.Body)
-
- terms, ok := props["terms"].(string)
- if !ok || len(terms) == 0 {
+ if params.Terms == nil || len(*params.Terms) == 0 {
c.SetInvalidParam("terms")
return
}
+ terms := *params.Terms
+
+ timeZoneOffset := 0
+ if params.TimeZoneOffset != nil {
+ timeZoneOffset = *params.TimeZoneOffset
+ }
+
+ isOrSearch := false
+ if params.IsOrSearch != nil {
+ isOrSearch = *params.IsOrSearch
+ }
+
+ page := 0
+ if params.Page != nil {
+ page = *params.Page
+ }
- timeZoneOffset, ok := props["time_zone_offset"].(float64)
- if !ok {
- timeZoneOffset = 0
+ perPage := 60
+ if params.PerPage != nil {
+ perPage = *params.PerPage
}
- isOrSearch, _ := props["is_or_search"].(bool)
+ includeDeletedChannels := false
+ if params.IncludeDeletedChannels != nil {
+ includeDeletedChannels = *params.IncludeDeletedChannels
+ }
startTime := time.Now()
- results, err := c.App.SearchPostsInTeam(terms, c.Session.UserId, c.Params.TeamId, isOrSearch, includeDeletedChannels, int(timeZoneOffset))
+ results, err := c.App.SearchPostsInTeam(terms, c.Session.UserId, c.Params.TeamId, isOrSearch, includeDeletedChannels, int(timeZoneOffset), page, perPage)
elapsedTime := float64(time.Since(startTime)) / float64(time.Second)
metrics := c.App.Metrics
diff --git a/api4/post_test.go b/api4/post_test.go
index 3c9875975..70404fdb5 100644
--- a/api4/post_test.go
+++ b/api4/post_test.go
@@ -15,6 +15,8 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/assert"
+
"github.com/mattermost/mattermost-server/app"
"github.com/mattermost/mattermost-server/model"
"github.com/mattermost/mattermost-server/utils"
@@ -1323,6 +1325,24 @@ func TestSearchPosts(t *testing.T) {
t.Fatal("wrong search")
}
+ terms = "search"
+ page := 0
+ perPage := 2
+ searchParams = model.SearchParameter{
+ Terms: &terms,
+ IsOrSearch: &isOrSearch,
+ TimeZoneOffset: &timezoneOffset,
+ Page: &page,
+ PerPage: &perPage,
+ }
+ posts2, resp := Client.SearchPostsWithParams(th.BasicTeam.Id, &searchParams)
+ CheckNoError(t, resp)
+ if len(posts2.Order) != 3 { // We don't support paging for DB search yet, modify this when we do.
+ t.Fatal("Wrong number of posts", len(posts2.Order))
+ }
+ assert.Equal(t, posts.Order[0], posts2.Order[0])
+ assert.Equal(t, posts.Order[1], posts2.Order[1])
+
posts, resp = Client.SearchPosts(th.BasicTeam.Id, "search", false)
CheckNoError(t, resp)
if len(posts.Order) != 3 {
@@ -1341,7 +1361,15 @@ func TestSearchPosts(t *testing.T) {
t.Fatal("wrong search")
}
- posts, resp = Client.SearchPostsIncludeDeletedChannels(th.BasicTeam.Id, "#hashtag", false)
+ terms = "#hashtag"
+ includeDeletedChannels := true
+ searchParams = model.SearchParameter{
+ Terms: &terms,
+ IsOrSearch: &isOrSearch,
+ TimeZoneOffset: &timezoneOffset,
+ IncludeDeletedChannels: &includeDeletedChannels,
+ }
+ posts, resp = Client.SearchPostsWithParams(th.BasicTeam.Id, &searchParams)
CheckNoError(t, resp)
if len(posts.Order) != 2 {
t.Fatal("wrong search")
@@ -1351,7 +1379,7 @@ func TestSearchPosts(t *testing.T) {
*cfg.TeamSettings.ExperimentalViewArchivedChannels = false
})
- posts, resp = Client.SearchPostsIncludeDeletedChannels(th.BasicTeam.Id, "#hashtag", false)
+ posts, resp = Client.SearchPostsWithParams(th.BasicTeam.Id, &searchParams)
CheckNoError(t, resp)
if len(posts.Order) != 1 {
t.Fatal("wrong search")
@@ -1389,13 +1417,13 @@ func TestSearchHashtagPosts(t *testing.T) {
Client := th.Client
message := "#sgtitlereview with space"
- _ = th.CreateMessagePost(message)
+ assert.NotNil(t, th.CreateMessagePost(message))
message = "#sgtitlereview\n with return"
- _ = th.CreateMessagePost(message)
+ assert.NotNil(t, th.CreateMessagePost(message))
message = "no hashtag"
- _ = th.CreateMessagePost(message)
+ assert.NotNil(t, th.CreateMessagePost(message))
posts, resp := Client.SearchPosts(th.BasicTeam.Id, "#sgtitlereview", false)
CheckNoError(t, resp)