ABC-79: Optimize channel autocomplete query (#8163)
* optimize channel autocomplete query * move to new autocomplete endpoint
Этот коммит содержится в:
коммит произвёл
Joram Wilander
родитель
0c8968fb8d
Коммит
e0ee73ef99
@@ -1940,116 +1940,109 @@ func testChannelStoreSearchInTeam(t *testing.T, ss store.Store) {
|
||||
o11.Type = model.CHANNEL_OPEN
|
||||
store.Must(ss.Channel().Save(&o11, -1))
|
||||
|
||||
if result := <-ss.Channel().SearchInTeam(o1.TeamId, "ChannelA"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) != 2 {
|
||||
t.Fatal("wrong length")
|
||||
}
|
||||
}
|
||||
|
||||
if result := <-ss.Channel().SearchInTeam(o1.TeamId, ""); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) == 0 {
|
||||
t.Fatal("should not be empty")
|
||||
}
|
||||
}
|
||||
|
||||
if result := <-ss.Channel().SearchInTeam(o1.TeamId, "blargh"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) != 0 {
|
||||
t.Fatal("should be empty")
|
||||
}
|
||||
}
|
||||
|
||||
if result := <-ss.Channel().SearchInTeam(o1.TeamId, "off-"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) != 2 {
|
||||
t.Fatal("should return 2 channels, not including private channel")
|
||||
}
|
||||
|
||||
if (*channels)[0].Name != o7.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
|
||||
if (*channels)[1].Name != o6.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
}
|
||||
|
||||
if result := <-ss.Channel().SearchInTeam(o1.TeamId, "off-topic"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) != 1 {
|
||||
t.Fatal("should return 1 channel")
|
||||
}
|
||||
|
||||
if (*channels)[0].Name != o6.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
// Disabling this check as it will fail on PostgreSQL as we have "liberalised" channel matching to deal with
|
||||
// Full-Text Stemming Limitations.
|
||||
if result := <-ss.Channel().SearchMore(m1.
|
||||
if result := <-ss.Channel().SearchInTeam(o1.TeamId, "off-topics"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) != 0 {
|
||||
t.Fatal("should be empty")
|
||||
for name, search := range map[string]func(teamId string, term string) store.StoreChannel{
|
||||
"AutocompleteInTeam": ss.Channel().AutocompleteInTeam,
|
||||
"SearchInTeam": ss.Channel().SearchInTeam,
|
||||
} {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
if result := <-search(o1.TeamId, "ChannelA"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) != 2 {
|
||||
t.Fatal("wrong length")
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
if result := <-ss.Channel().SearchInTeam(o1.TeamId, "town square"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) != 1 {
|
||||
t.Fatal("should return 1 channel")
|
||||
}
|
||||
if result := <-search(o1.TeamId, ""); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) == 0 {
|
||||
t.Fatal("should not be empty")
|
||||
}
|
||||
}
|
||||
|
||||
if (*channels)[0].Name != o9.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
}
|
||||
if result := <-search(o1.TeamId, "blargh"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) != 0 {
|
||||
t.Fatal("should be empty")
|
||||
}
|
||||
}
|
||||
|
||||
if result := <-ss.Channel().SearchInTeam(o1.TeamId, "the"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
t.Log(channels.ToJson())
|
||||
if len(*channels) != 1 {
|
||||
t.Fatal("should return 1 channel")
|
||||
}
|
||||
if result := <-search(o1.TeamId, "off-"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) != 2 {
|
||||
t.Fatal("should return 2 channels, not including private channel")
|
||||
}
|
||||
|
||||
if (*channels)[0].Name != o10.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
}
|
||||
if (*channels)[0].Name != o7.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
|
||||
if result := <-ss.Channel().SearchInTeam(o1.TeamId, "Mobile"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
t.Log(channels.ToJson())
|
||||
if len(*channels) != 1 {
|
||||
t.Fatal("should return 1 channel")
|
||||
}
|
||||
if (*channels)[1].Name != o6.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
}
|
||||
|
||||
if (*channels)[0].Name != o11.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
if result := <-search(o1.TeamId, "off-topic"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) != 1 {
|
||||
t.Fatal("should return 1 channel")
|
||||
}
|
||||
|
||||
if (*channels)[0].Name != o6.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
}
|
||||
|
||||
if result := <-search(o1.TeamId, "town square"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
if len(*channels) != 1 {
|
||||
t.Fatal("should return 1 channel")
|
||||
}
|
||||
|
||||
if (*channels)[0].Name != o9.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
}
|
||||
|
||||
if result := <-search(o1.TeamId, "the"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
t.Log(channels.ToJson())
|
||||
if len(*channels) != 1 {
|
||||
t.Fatal("should return 1 channel")
|
||||
}
|
||||
|
||||
if (*channels)[0].Name != o10.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
}
|
||||
|
||||
if result := <-search(o1.TeamId, "Mobile"); result.Err != nil {
|
||||
t.Fatal(result.Err)
|
||||
} else {
|
||||
channels := result.Data.(*model.ChannelList)
|
||||
t.Log(channels.ToJson())
|
||||
if len(*channels) != 1 {
|
||||
t.Fatal("should return 1 channel")
|
||||
}
|
||||
|
||||
if (*channels)[0].Name != o11.Name {
|
||||
t.Fatal("wrong channel returned")
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,22 @@ func (_m *ChannelStore) AnalyticsTypeCount(teamId string, channelType string) st
|
||||
return r0
|
||||
}
|
||||
|
||||
// AutocompleteInTeam provides a mock function with given fields: teamId, term
|
||||
func (_m *ChannelStore) AutocompleteInTeam(teamId string, term string) store.StoreChannel {
|
||||
ret := _m.Called(teamId, term)
|
||||
|
||||
var r0 store.StoreChannel
|
||||
if rf, ok := ret.Get(0).(func(string, string) store.StoreChannel); ok {
|
||||
r0 = rf(teamId, term)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(store.StoreChannel)
|
||||
}
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// CreateDirectChannel provides a mock function with given fields: userId, otherUserId
|
||||
func (_m *ChannelStore) CreateDirectChannel(userId string, otherUserId string) store.StoreChannel {
|
||||
ret := _m.Called(userId, otherUserId)
|
||||
|
||||
@@ -61,13 +61,13 @@ func (_m *UserAccessTokenStore) Get(tokenId string) store.StoreChannel {
|
||||
return r0
|
||||
}
|
||||
|
||||
// GetAll provides a mock function with given fields:
|
||||
func (_m *UserAccessTokenStore) GetAll(page int, perPage int) store.StoreChannel {
|
||||
ret := _m.Called(page, perPage)
|
||||
// GetAll provides a mock function with given fields: offset, limit
|
||||
func (_m *UserAccessTokenStore) GetAll(offset int, limit int) store.StoreChannel {
|
||||
ret := _m.Called(offset, limit)
|
||||
|
||||
var r0 store.StoreChannel
|
||||
if rf, ok := ret.Get(0).(func(int, int) store.StoreChannel); ok {
|
||||
r0 = rf(page, perPage)
|
||||
r0 = rf(offset, limit)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(store.StoreChannel)
|
||||
@@ -109,13 +109,13 @@ func (_m *UserAccessTokenStore) GetByUser(userId string, page int, perPage int)
|
||||
return r0
|
||||
}
|
||||
|
||||
// Search provides a mock function with given fields:
|
||||
func (_m *UserAccessTokenStore) Search(term string) store.StoreChannel {
|
||||
ret := _m.Called(term)
|
||||
// Save provides a mock function with given fields: token
|
||||
func (_m *UserAccessTokenStore) Save(token *model.UserAccessToken) store.StoreChannel {
|
||||
ret := _m.Called(token)
|
||||
|
||||
var r0 store.StoreChannel
|
||||
if rf, ok := ret.Get(0).(func(string) store.StoreChannel); ok {
|
||||
r0 = rf(term)
|
||||
if rf, ok := ret.Get(0).(func(*model.UserAccessToken) store.StoreChannel); ok {
|
||||
r0 = rf(token)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(store.StoreChannel)
|
||||
@@ -125,13 +125,13 @@ func (_m *UserAccessTokenStore) Search(term string) store.StoreChannel {
|
||||
return r0
|
||||
}
|
||||
|
||||
// Save provides a mock function with given fields: token
|
||||
func (_m *UserAccessTokenStore) Save(token *model.UserAccessToken) store.StoreChannel {
|
||||
ret := _m.Called(token)
|
||||
// Search provides a mock function with given fields: term
|
||||
func (_m *UserAccessTokenStore) Search(term string) store.StoreChannel {
|
||||
ret := _m.Called(term)
|
||||
|
||||
var r0 store.StoreChannel
|
||||
if rf, ok := ret.Get(0).(func(*model.UserAccessToken) store.StoreChannel); ok {
|
||||
r0 = rf(token)
|
||||
if rf, ok := ret.Get(0).(func(string) store.StoreChannel); ok {
|
||||
r0 = rf(term)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(store.StoreChannel)
|
||||
|
||||
Ссылка в новой задаче
Block a user