MM-46911: P1 - Fix MySQL query to filter bots out of TopDM (#20965)
Automatic Merge
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
78251a3ff1
Коммит
8b328386c5
@@ -897,7 +897,6 @@ func TestGetTopInactiveChannelsForTeamSince(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetTopDMsForUserSince(t *testing.T) {
|
||||
t.Skip("MM-46911")
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
@@ -933,6 +932,7 @@ func TestGetTopDMsForUserSince(t *testing.T) {
|
||||
Username: GenerateTestUsername(),
|
||||
DisplayName: "a bot",
|
||||
Description: "bot",
|
||||
UserId: model.NewId(),
|
||||
}
|
||||
|
||||
createdBot, resp, err := th.Client.CreateBot(bot)
|
||||
|
||||
@@ -2999,21 +2999,21 @@ func (s *SqlPostStore) updateThreadsFromPosts(transaction *sqlxTxWrapper, posts
|
||||
}
|
||||
|
||||
func (s *SqlPostStore) GetTopDMsForUserSince(userID string, since int64, offset int, limit int) (*model.TopDMList, error) {
|
||||
var botsFilterExpr, stringSplitKeyword string
|
||||
if s.DriverName() == model.DatabaseDriverPostgres {
|
||||
stringSplitKeyword = "split_part"
|
||||
} else if s.DriverName() == model.DatabaseDriverMysql {
|
||||
stringSplitKeyword = "SUBSTRING_INDEX"
|
||||
}
|
||||
|
||||
var botsFilterExpr string
|
||||
/*
|
||||
Channel.Name is of the format userId1__userId2.
|
||||
Using this, self dms, and bot dms can be filtered.
|
||||
*/
|
||||
botsFilterExpr = fmt.Sprintf(`
|
||||
%s(Channels.Name, '__', 1) NOT IN (SELECT UserId FROM Bots)
|
||||
AND %s(Channels.Name, '__', 2) NOT IN (SELECT UserId FROM Bots)
|
||||
`, stringSplitKeyword, stringSplitKeyword)
|
||||
if s.DriverName() == model.DatabaseDriverPostgres {
|
||||
botsFilterExpr = `SPLIT_PART(Channels.Name, '__', 1) NOT IN (SELECT UserId FROM Bots)
|
||||
AND SPLIT_PART(Channels.Name, '__', 2) NOT IN (SELECT UserId FROM Bots)
|
||||
`
|
||||
} else if s.DriverName() == model.DatabaseDriverMysql {
|
||||
botsFilterExpr = `SUBSTRING_INDEX(Channels.Name, '__', 1) NOT IN (SELECT UserId FROM Bots)
|
||||
AND SUBSTRING_INDEX(Channels.Name, '__', -1) NOT IN (SELECT UserId FROM Bots)
|
||||
`
|
||||
}
|
||||
|
||||
channelSelector := s.getQueryBuilder().Select("Id", "TotalMsgCount").From("Channels").Join("ChannelMembers as cm on cm.ChannelId = Channels.Id").
|
||||
Where(sq.And{
|
||||
sq.Expr("Channels.Type = 'D'"),
|
||||
|
||||
@@ -4067,6 +4067,8 @@ func testGetTopDMsForUserSince(t *testing.T, ss store.Store, s SqlStore) {
|
||||
u2 := model.User{Email: MakeEmail(), Username: model.NewId()}
|
||||
u3 := model.User{Email: MakeEmail(), Username: model.NewId()}
|
||||
u4 := model.User{Email: MakeEmail(), Username: model.NewId()}
|
||||
u5 := model.User{Email: MakeEmail(), Username: model.NewId()}
|
||||
|
||||
_, err := ss.User().Save(&user)
|
||||
require.NoError(t, err)
|
||||
_, err = ss.User().Save(&u1)
|
||||
@@ -4077,6 +4079,17 @@ func testGetTopDMsForUserSince(t *testing.T, ss store.Store, s SqlStore) {
|
||||
require.NoError(t, err)
|
||||
_, err = ss.User().Save(&u4)
|
||||
require.NoError(t, err)
|
||||
_, err = ss.User().Save(&u5)
|
||||
require.NoError(t, err)
|
||||
bot := &model.Bot{
|
||||
Username: "bot_user",
|
||||
Description: "bot",
|
||||
OwnerId: model.NewId(),
|
||||
UserId: u5.Id,
|
||||
}
|
||||
|
||||
savedBot, nErr := ss.Bot().Save(bot)
|
||||
require.NoError(t, nErr)
|
||||
// user direct messages
|
||||
chUser1, nErr := ss.Channel().CreateDirectChannel(&u1, &user)
|
||||
require.NoError(t, nErr)
|
||||
@@ -4088,6 +4101,17 @@ func testGetTopDMsForUserSince(t *testing.T, ss store.Store, s SqlStore) {
|
||||
chUser3User4, nErr := ss.Channel().CreateDirectChannel(&u3, &u4)
|
||||
require.NoError(t, nErr)
|
||||
|
||||
// bot direct message - should be ignored by top DMs
|
||||
botUser, err := ss.User().Get(context.Background(), savedBot.UserId)
|
||||
require.NoError(t, err)
|
||||
chBot, nErr := ss.Channel().CreateDirectChannel(&user, botUser)
|
||||
require.NoError(t, nErr)
|
||||
_, err = ss.Post().Save(&model.Post{
|
||||
ChannelId: chBot.Id,
|
||||
UserId: botUser.Id,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
// sample post data
|
||||
// for u1
|
||||
_, err = ss.Post().Save(&model.Post{
|
||||
|
||||
Ссылка в новой задаче
Block a user