summaryrefslogtreecommitdiffstats
path: root/store
diff options
context:
space:
mode:
authorJoramWilander <jwawilander@gmail.com>2015-10-06 12:38:42 -0400
committerJoramWilander <jwawilander@gmail.com>2015-10-06 12:38:42 -0400
commit8a0d0bfa257afaa84a50620f9c85b35df753d569 (patch)
tree23e5bfd62712584c9a75baf0a6b58203053ec437 /store
parent4c297d05f7cfbcfc4011fa25b8badfc6883c2c22 (diff)
downloadchat-8a0d0bfa257afaa84a50620f9c85b35df753d569.tar.gz
chat-8a0d0bfa257afaa84a50620f9c85b35df753d569.tar.bz2
chat-8a0d0bfa257afaa84a50620f9c85b35df753d569.zip
Parse special characters out of search strings and replace with spaces.
Diffstat (limited to 'store')
-rw-r--r--store/sql_post_store.go19
-rw-r--r--store/sql_post_store_test.go26
2 files changed, 33 insertions, 12 deletions
diff --git a/store/sql_post_store.go b/store/sql_post_store.go
index 668f45fbb..8d62eaad0 100644
--- a/store/sql_post_store.go
+++ b/store/sql_post_store.go
@@ -396,6 +396,17 @@ func (s SqlPostStore) getParentsPosts(channelId string, offset int, limit int) S
return storeChannel
}
+var specialSearchChar = []string{
+ "<",
+ ">",
+ "+",
+ "-",
+ "(",
+ ")",
+ "~",
+ "@",
+}
+
func (s SqlPostStore) Search(teamId string, userId string, terms string, isHashtagSearch bool) StoreChannel {
storeChannel := make(StoreChannel)
@@ -411,10 +422,10 @@ func (s SqlPostStore) Search(teamId string, userId string, terms string, isHasht
}
}
- // @ has a speical meaning in INNODB FULLTEXT indexes and
- // is reserved for calc'ing distances so you
- // cannot escape it so we replace it.
- terms = strings.Replace(terms, "@", " ", -1)
+ // these chars have speical meaning and can be treated as spaces
+ for _, c := range specialSearchChar {
+ terms = strings.Replace(terms, c, " ", -1)
+ }
var posts []*model.Post
diff --git a/store/sql_post_store_test.go b/store/sql_post_store_test.go
index 6a6364dc8..62d7b0100 100644
--- a/store/sql_post_store_test.go
+++ b/store/sql_post_store_test.go
@@ -516,7 +516,7 @@ func TestPostStoreSearch(t *testing.T) {
o4.ChannelId = c1.Id
o4.UserId = model.NewId()
o4.Hashtags = "#hashtag"
- o4.Message = "message"
+ o4.Message = "(message)blargh"
o4 = (<-store.Post().Save(o4)).Data.(*model.Post)
o5 := &model.Post{}
@@ -527,37 +527,37 @@ func TestPostStoreSearch(t *testing.T) {
r1 := (<-store.Post().Search(teamId, userId, "corey", false)).Data.(*model.PostList)
if len(r1.Order) != 1 && r1.Order[0] != o1.Id {
- t.Fatal("returned wrong serach result")
+ t.Fatal("returned wrong search result")
}
r3 := (<-store.Post().Search(teamId, userId, "new", false)).Data.(*model.PostList)
if len(r3.Order) != 2 && r3.Order[0] != o1.Id {
- t.Fatal("returned wrong serach result")
+ t.Fatal("returned wrong search result")
}
r4 := (<-store.Post().Search(teamId, userId, "john", false)).Data.(*model.PostList)
if len(r4.Order) != 1 && r4.Order[0] != o2.Id {
- t.Fatal("returned wrong serach result")
+ t.Fatal("returned wrong search result")
}
r5 := (<-store.Post().Search(teamId, userId, "matter*", false)).Data.(*model.PostList)
if len(r5.Order) != 1 && r5.Order[0] != o1.Id {
- t.Fatal("returned wrong serach result")
+ t.Fatal("returned wrong search result")
}
r6 := (<-store.Post().Search(teamId, userId, "#hashtag", true)).Data.(*model.PostList)
if len(r6.Order) != 1 && r6.Order[0] != o4.Id {
- t.Fatal("returned wrong serach result")
+ t.Fatal("returned wrong search result")
}
r7 := (<-store.Post().Search(teamId, userId, "#secret", true)).Data.(*model.PostList)
if len(r7.Order) != 1 && r7.Order[0] != o5.Id {
- t.Fatal("returned wrong serach result")
+ t.Fatal("returned wrong search result")
}
r8 := (<-store.Post().Search(teamId, userId, "@thisshouldmatchnothing", true)).Data.(*model.PostList)
if len(r8.Order) != 0 {
- t.Fatal("returned wrong serach result")
+ t.Fatal("returned wrong search result")
}
r9 := (<-store.Post().Search(teamId, userId, "mattermost jersey", false)).Data.(*model.PostList)
@@ -569,4 +569,14 @@ func TestPostStoreSearch(t *testing.T) {
if len(r10.Order) != 2 {
t.Fatal("returned wrong search result")
}
+
+ r11 := (<-store.Post().Search(teamId, userId, "message blargh", false)).Data.(*model.PostList)
+ if len(r11.Order) != 1 {
+ t.Fatal("returned wrong search result")
+ }
+
+ r12 := (<-store.Post().Search(teamId, userId, "blargh>", false)).Data.(*model.PostList)
+ if len(r12.Order) != 1 {
+ t.Fatal("returned wrong search result")
+ }
}