MM-15261: Do not remove bot accounts from teams or channels. (#10810)
* MM-15261: Do not remove bot accounts from teams. * MM-15261: Do not remove bot accounts from channels.
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
27566f6a06
Коммит
818e0470df
@@ -775,10 +775,12 @@ func (s *SqlSupplier) TeamMembersToRemove(ctx context.Context, hints ...store.La
|
|||||||
FROM
|
FROM
|
||||||
TeamMembers
|
TeamMembers
|
||||||
JOIN Teams ON Teams.Id = TeamMembers.TeamId
|
JOIN Teams ON Teams.Id = TeamMembers.TeamId
|
||||||
|
LEFT JOIN Bots ON Bots.UserId = TeamMembers.UserId
|
||||||
WHERE
|
WHERE
|
||||||
TeamMembers.DeleteAt = 0
|
TeamMembers.DeleteAt = 0
|
||||||
AND Teams.DeleteAt = 0
|
AND Teams.DeleteAt = 0
|
||||||
AND Teams.GroupConstrained = TRUE
|
AND Teams.GroupConstrained = TRUE
|
||||||
|
AND Bots.UserId IS NULL
|
||||||
AND (TeamMembers.TeamId, TeamMembers.UserId)
|
AND (TeamMembers.TeamId, TeamMembers.UserId)
|
||||||
NOT IN (
|
NOT IN (
|
||||||
SELECT
|
SELECT
|
||||||
@@ -854,9 +856,11 @@ func (s *SqlSupplier) ChannelMembersToRemove(ctx context.Context, hints ...store
|
|||||||
FROM
|
FROM
|
||||||
ChannelMembers
|
ChannelMembers
|
||||||
JOIN Channels ON Channels.Id = ChannelMembers.ChannelId
|
JOIN Channels ON Channels.Id = ChannelMembers.ChannelId
|
||||||
|
LEFT JOIN Bots ON Bots.UserId = ChannelMembers.UserId
|
||||||
WHERE
|
WHERE
|
||||||
Channels.DeleteAt = 0
|
Channels.DeleteAt = 0
|
||||||
AND Channels.GroupConstrained = TRUE
|
AND Channels.GroupConstrained = TRUE
|
||||||
|
AND Bots.UserId IS NULL
|
||||||
AND (ChannelMembers.ChannelId, ChannelMembers.UserId)
|
AND (ChannelMembers.ChannelId, ChannelMembers.UserId)
|
||||||
NOT IN (
|
NOT IN (
|
||||||
SELECT
|
SELECT
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ func TestGroupStore(t *testing.T, ss store.Store) {
|
|||||||
t.Run("TeamMembersToAdd", func(t *testing.T) { testPendingAutoAddTeamMembers(t, ss) })
|
t.Run("TeamMembersToAdd", func(t *testing.T) { testPendingAutoAddTeamMembers(t, ss) })
|
||||||
t.Run("ChannelMembersToAdd", func(t *testing.T) { testPendingAutoAddChannelMembers(t, ss) })
|
t.Run("ChannelMembersToAdd", func(t *testing.T) { testPendingAutoAddChannelMembers(t, ss) })
|
||||||
|
|
||||||
t.Run("TeamMembersToRemove", func(t *testing.T) { testPendingTeamMemberRemovals(t, ss) })
|
t.Run("TeamMembersToRemove", func(t *testing.T) { testTeamMemberRemovals(t, ss) })
|
||||||
t.Run("ChannelMembersToRemove", func(t *testing.T) { testPendingChannelMemberRemovals(t, ss) })
|
t.Run("ChannelMembersToRemove", func(t *testing.T) { testChannelMemberRemovals(t, ss) })
|
||||||
|
|
||||||
t.Run("GetGroupsByChannel", func(t *testing.T) { testGetGroupsByChannel(t, ss) })
|
t.Run("GetGroupsByChannel", func(t *testing.T) { testGetGroupsByChannel(t, ss) })
|
||||||
t.Run("GetGroupsByTeam", func(t *testing.T) { testGetGroupsByTeam(t, ss) })
|
t.Run("GetGroupsByTeam", func(t *testing.T) { testGetGroupsByTeam(t, ss) })
|
||||||
@@ -1231,7 +1231,7 @@ func testPendingAutoAddChannelMembers(t *testing.T, ss store.Store) {
|
|||||||
require.Len(t, res.Data, 1)
|
require.Len(t, res.Data, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testPendingTeamMemberRemovals(t *testing.T, ss store.Store) {
|
func testTeamMemberRemovals(t *testing.T, ss store.Store) {
|
||||||
data := pendingMemberRemovalsDataSetup(t, ss)
|
data := pendingMemberRemovalsDataSetup(t, ss)
|
||||||
|
|
||||||
// one result when both users are in the group (for user C)
|
// one result when both users are in the group (for user C)
|
||||||
@@ -1267,6 +1267,34 @@ func testPendingTeamMemberRemovals(t *testing.T, ss store.Store) {
|
|||||||
require.Nil(t, res.Err)
|
require.Nil(t, res.Err)
|
||||||
require.Len(t, res.Data, 3)
|
require.Len(t, res.Data, 3)
|
||||||
|
|
||||||
|
// Make one of them a bot
|
||||||
|
res = <-ss.Group().TeamMembersToRemove()
|
||||||
|
teamMembers = res.Data.([]*model.TeamMember)
|
||||||
|
teamMember := teamMembers[0]
|
||||||
|
bot := &model.Bot{
|
||||||
|
UserId: teamMember.UserId,
|
||||||
|
Username: "un_" + model.NewId(),
|
||||||
|
DisplayName: "dn_" + model.NewId(),
|
||||||
|
OwnerId: teamMember.UserId,
|
||||||
|
}
|
||||||
|
res = <-ss.Bot().Save(bot)
|
||||||
|
require.Nil(t, res.Err)
|
||||||
|
bot = res.Data.(*model.Bot)
|
||||||
|
|
||||||
|
// verify that bot is not returned in results
|
||||||
|
res = <-ss.Group().TeamMembersToRemove()
|
||||||
|
require.Nil(t, res.Err)
|
||||||
|
require.Len(t, res.Data, 2)
|
||||||
|
|
||||||
|
// delete the bot
|
||||||
|
res = <-ss.Bot().PermanentDelete(bot.UserId)
|
||||||
|
require.Nil(t, res.Err)
|
||||||
|
|
||||||
|
// Should be back to 3 users
|
||||||
|
res = <-ss.Group().TeamMembersToRemove()
|
||||||
|
require.Nil(t, res.Err)
|
||||||
|
require.Len(t, res.Data, 3)
|
||||||
|
|
||||||
// add users back to groups
|
// add users back to groups
|
||||||
res = <-ss.Team().RemoveMember(data.ConstrainedTeam.Id, data.UserA.Id)
|
res = <-ss.Team().RemoveMember(data.ConstrainedTeam.Id, data.UserA.Id)
|
||||||
require.Nil(t, res.Err)
|
require.Nil(t, res.Err)
|
||||||
@@ -1282,7 +1310,7 @@ func testPendingTeamMemberRemovals(t *testing.T, ss store.Store) {
|
|||||||
require.Nil(t, res.Err)
|
require.Nil(t, res.Err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testPendingChannelMemberRemovals(t *testing.T, ss store.Store) {
|
func testChannelMemberRemovals(t *testing.T, ss store.Store) {
|
||||||
data := pendingMemberRemovalsDataSetup(t, ss)
|
data := pendingMemberRemovalsDataSetup(t, ss)
|
||||||
|
|
||||||
// one result when both users are in the group (for user C)
|
// one result when both users are in the group (for user C)
|
||||||
@@ -1318,6 +1346,34 @@ func testPendingChannelMemberRemovals(t *testing.T, ss store.Store) {
|
|||||||
require.Nil(t, res.Err)
|
require.Nil(t, res.Err)
|
||||||
require.Len(t, res.Data, 3)
|
require.Len(t, res.Data, 3)
|
||||||
|
|
||||||
|
// Make one of them a bot
|
||||||
|
res = <-ss.Group().ChannelMembersToRemove()
|
||||||
|
channelMembers = res.Data.([]*model.ChannelMember)
|
||||||
|
channelMember := channelMembers[0]
|
||||||
|
bot := &model.Bot{
|
||||||
|
UserId: channelMember.UserId,
|
||||||
|
Username: "un_" + model.NewId(),
|
||||||
|
DisplayName: "dn_" + model.NewId(),
|
||||||
|
OwnerId: channelMember.UserId,
|
||||||
|
}
|
||||||
|
res = <-ss.Bot().Save(bot)
|
||||||
|
require.Nil(t, res.Err)
|
||||||
|
bot = res.Data.(*model.Bot)
|
||||||
|
|
||||||
|
// verify that bot is not returned in results
|
||||||
|
res = <-ss.Group().ChannelMembersToRemove()
|
||||||
|
require.Nil(t, res.Err)
|
||||||
|
require.Len(t, res.Data, 2)
|
||||||
|
|
||||||
|
// delete the bot
|
||||||
|
res = <-ss.Bot().PermanentDelete(bot.UserId)
|
||||||
|
require.Nil(t, res.Err)
|
||||||
|
|
||||||
|
// Should be back to 3 users
|
||||||
|
res = <-ss.Group().ChannelMembersToRemove()
|
||||||
|
require.Nil(t, res.Err)
|
||||||
|
require.Len(t, res.Data, 3)
|
||||||
|
|
||||||
// add users back to groups
|
// add users back to groups
|
||||||
res = <-ss.Team().RemoveMember(data.ConstrainedTeam.Id, data.UserA.Id)
|
res = <-ss.Team().RemoveMember(data.ConstrainedTeam.Id, data.UserA.Id)
|
||||||
require.Nil(t, res.Err)
|
require.Nil(t, res.Err)
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user