From 062f758e47cda90a9ae783cbaee6bf3bec571178 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Mon, 21 Nov 2016 12:17:53 -0500 Subject: Fix user search when using an asterisk (#4586) --- store/sql_user_store.go | 15 ++++++++++++++- store/sql_user_store_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/store/sql_user_store.go b/store/sql_user_store.go index aa3bb4380..1a38e89e8 100644 --- a/store/sql_user_store.go +++ b/store/sql_user_store.go @@ -1217,11 +1217,24 @@ func (us SqlUserStore) SearchInChannel(channelId string, term string, options ma return storeChannel } +var specialUserSearchChar = []string{ + "<", + ">", + "+", + "-", + "(", + ")", + "~", + "@", + ":", + "*", +} + func (us SqlUserStore) performSearch(searchQuery string, term string, options map[string]bool, parameters map[string]interface{}) StoreResult { result := StoreResult{} // these chars have special meaning and can be treated as spaces - for _, c := range specialSearchChar { + for _, c := range specialUserSearchChar { term = strings.Replace(term, c, " ", -1) } diff --git a/store/sql_user_store_test.go b/store/sql_user_store_test.go index e58e1fe40..acd87a036 100644 --- a/store/sql_user_store_test.go +++ b/store/sql_user_store_test.go @@ -981,6 +981,32 @@ func TestUserStoreSearch(t *testing.T) { } } + // * should be treated as a space + if r1 := <-store.User().Search(tid, "jimb*", searchOptions); r1.Err != nil { + t.Fatal(r1.Err) + } else { + profiles := r1.Data.([]*model.User) + found1 := false + found2 := false + for _, profile := range profiles { + if profile.Id == u1.Id { + found1 = true + } + + if profile.Id == u3.Id { + found2 = true + } + } + + if !found1 { + t.Fatal("should have found user") + } + + if found2 { + t.Fatal("should not have found inactive user") + } + } + if r1 := <-store.User().Search(tid, "harol", searchOptions); r1.Err != nil { t.Fatal(r1.Err) } else { -- cgit v1.2.3-1-g7c22