summaryrefslogtreecommitdiffstats
path: root/store
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2016-11-03 11:24:45 -0400
committerCorey Hulen <corey@hulen.com>2016-11-03 08:24:45 -0700
commit6da0ccd94447ddc5bcf51285ebac411dd3188cce (patch)
tree9334fa81ebbd23463134c6e5673e089ebf222836 /store
parent1b141681ae6a169272003fa83fb83ba245dbafc7 (diff)
downloadchat-6da0ccd94447ddc5bcf51285ebac411dd3188cce.tar.gz
chat-6da0ccd94447ddc5bcf51285ebac411dd3188cce.tar.bz2
chat-6da0ccd94447ddc5bcf51285ebac411dd3188cce.zip
Update user search to match against username, full name, nickname and email (#4421)
Diffstat (limited to 'store')
-rw-r--r--store/sql_user_store.go14
-rw-r--r--store/sql_user_store_test.go36
2 files changed, 41 insertions, 9 deletions
diff --git a/store/sql_user_store.go b/store/sql_user_store.go
index 17fdcbc85..836a502fc 100644
--- a/store/sql_user_store.go
+++ b/store/sql_user_store.go
@@ -19,10 +19,10 @@ const (
MISSING_AUTH_ACCOUNT_ERROR = "store.sql_user.get_by_auth.missing_account.app_error"
PROFILES_IN_CHANNEL_CACHE_SIZE = 5000
PROFILES_IN_CHANNEL_CACHE_SEC = 900 // 15 mins
- USER_SEARCH_OPTION_USERNAME_ONLY = "username_only"
+ USER_SEARCH_OPTION_NAMES_ONLY = "names_only"
USER_SEARCH_OPTION_ALLOW_INACTIVE = "allow_inactive"
- USER_SEARCH_TYPE_ALL = "Username, FirstName, LastName, Nickname"
- USER_SEARCH_TYPE_USERNAME = "Username"
+ USER_SEARCH_TYPE_NAMES = "Username, FirstName, LastName, Nickname"
+ USER_SEARCH_TYPE_ALL = "Username, FirstName, LastName, Nickname, Email"
)
type SqlUserStore struct {
@@ -61,8 +61,8 @@ func (us SqlUserStore) CreateIndexesIfNotExists() {
us.CreateIndexIfNotExists("idx_users_create_at", "Users", "CreateAt")
us.CreateIndexIfNotExists("idx_users_delete_at", "Users", "DeleteAt")
- us.CreateFullTextIndexIfNotExists("idx_users_username_txt", "Users", USER_SEARCH_TYPE_USERNAME)
- us.CreateFullTextIndexIfNotExists("idx_users_all_names_txt", "Users", USER_SEARCH_TYPE_ALL)
+ us.CreateFullTextIndexIfNotExists("idx_users_all_txt", "Users", USER_SEARCH_TYPE_ALL)
+ us.CreateFullTextIndexIfNotExists("idx_users_names_txt", "Users", USER_SEARCH_TYPE_NAMES)
}
func (us SqlUserStore) Save(user *model.User) StoreChannel {
@@ -1212,8 +1212,8 @@ func (us SqlUserStore) performSearch(searchQuery string, term string, options ma
}
searchType := USER_SEARCH_TYPE_ALL
- if ok := options[USER_SEARCH_OPTION_USERNAME_ONLY]; ok {
- searchType = USER_SEARCH_TYPE_USERNAME
+ if ok := options[USER_SEARCH_OPTION_NAMES_ONLY]; ok {
+ searchType = USER_SEARCH_TYPE_NAMES
}
if ok := options[USER_SEARCH_OPTION_ALLOW_INACTIVE]; ok {
diff --git a/store/sql_user_store_test.go b/store/sql_user_store_test.go
index bc7cc69c5..e58e1fe40 100644
--- a/store/sql_user_store_test.go
+++ b/store/sql_user_store_test.go
@@ -934,7 +934,7 @@ func TestUserStoreSearch(t *testing.T) {
u1.FirstName = "Tim"
u1.LastName = "Bill"
u1.Nickname = "Rob"
- u1.Email = model.NewId()
+ u1.Email = "harold" + model.NewId()
Must(store.User().Save(u1))
u2 := &model.User{}
@@ -954,7 +954,7 @@ func TestUserStoreSearch(t *testing.T) {
Must(store.Team().SaveMember(&model.TeamMember{TeamId: tid, UserId: u3.Id}))
searchOptions := map[string]bool{}
- searchOptions[USER_SEARCH_OPTION_USERNAME_ONLY] = true
+ searchOptions[USER_SEARCH_OPTION_NAMES_ONLY] = true
if r1 := <-store.User().Search(tid, "jimb", searchOptions); r1.Err != nil {
t.Fatal(r1.Err)
@@ -981,6 +981,22 @@ func TestUserStoreSearch(t *testing.T) {
}
}
+ if r1 := <-store.User().Search(tid, "harol", searchOptions); r1.Err != nil {
+ t.Fatal(r1.Err)
+ } else {
+ profiles := r1.Data.([]*model.User)
+ found1 := false
+ for _, profile := range profiles {
+ if profile.Id == u1.Id {
+ found1 = true
+ }
+ }
+
+ if found1 {
+ t.Fatal("should not have found user")
+ }
+ }
+
searchOptions[USER_SEARCH_OPTION_ALLOW_INACTIVE] = true
if r1 := <-store.User().Search(tid, "jimb", searchOptions); r1.Err != nil {
@@ -1162,6 +1178,22 @@ func TestUserStoreSearch(t *testing.T) {
searchOptions = map[string]bool{}
+ if r1 := <-store.User().Search(tid, "harol", searchOptions); r1.Err != nil {
+ t.Fatal(r1.Err)
+ } else {
+ profiles := r1.Data.([]*model.User)
+ found1 := false
+ for _, profile := range profiles {
+ if profile.Id == u1.Id {
+ found1 = true
+ }
+ }
+
+ if !found1 {
+ t.Fatal("should have found user")
+ }
+ }
+
if r1 := <-store.User().Search(tid, "Tim", searchOptions); r1.Err != nil {
t.Fatal(r1.Err)
} else {