[MM-54757] Stop broadcasting channel_deleted/channel_restored messages from private channels to non-members (#27001)

* [MM-54757] Stop broadcasting channel_deleted/channel_restored messages from private channels to non-members

* Remove unnecessary return

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
Devin Binnie
2024-05-15 17:18:05 -04:00
коммит произвёл GitHub
родитель 30e3f8cdd7
Коммит 7e797cea3b
2 изменённых файлов: 116 добавлений и 3 удалений

Просмотреть файл

@@ -764,7 +764,12 @@ func (a *App) RestoreChannel(c request.CTX, channel *model.Channel, userID strin
channel.DeleteAt = 0
a.Srv().Platform().InvalidateCacheForChannel(channel)
message := model.NewWebSocketEvent(model.WebsocketEventChannelRestored, channel.TeamId, "", "", nil, "")
var message *model.WebSocketEvent
if channel.Type == model.ChannelTypeOpen {
message = model.NewWebSocketEvent(model.WebsocketEventChannelRestored, channel.TeamId, "", "", nil, "")
} else {
message = model.NewWebSocketEvent(model.WebsocketEventChannelRestored, "", channel.Id, "", nil, "")
}
message.Add("channel_id", channel.Id)
a.Publish(message)
@@ -1497,7 +1502,12 @@ func (a *App) DeleteChannel(c request.CTX, channel *model.Channel, userID string
a.Srv().Platform().InvalidateCacheForChannel(channel)
message := model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, channel.TeamId, "", "", nil, "")
var message *model.WebSocketEvent
if channel.Type == model.ChannelTypeOpen {
message = model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, channel.TeamId, "", "", nil, "")
} else {
message = model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, "", channel.Id, "", nil, "")
}
message.Add("channel_id", channel.Id)
message.Add("delete_at", deleteAt)
a.Publish(message)
@@ -3078,8 +3088,13 @@ func (a *App) PermanentDeleteChannel(c request.CTX, channel *model.Channel) *mod
}
a.Srv().Platform().InvalidateCacheForChannel(channel)
message := model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, channel.TeamId, "", "", nil, "")
var message *model.WebSocketEvent
if channel.Type == model.ChannelTypeOpen {
message = model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, channel.TeamId, "", "", nil, "")
} else {
message = model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, "", channel.Id, "", nil, "")
}
message.Add("channel_id", channel.Id)
message.Add("delete_at", deleteAt)
a.Publish(message)

Просмотреть файл

@@ -2854,3 +2854,101 @@ func TestPatchChannelMembersNotifyProps(t *testing.T) {
assert.NotNil(t, appErr)
})
}
func TestDeleteChannel(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
t.Run("should send the correct websocket events", func(t *testing.T) {
user1 := th.CreateUser()
user2 := th.CreateUser()
channel1 := th.CreateChannel(th.Context, th.BasicTeam)
channel2 := th.CreatePrivateChannel(th.Context, th.BasicTeam)
th.LinkUserToTeam(user1, th.BasicTeam)
th.LinkUserToTeam(user2, th.BasicTeam)
th.AddUserToChannel(user1, channel1)
th.AddUserToChannel(user1, channel2)
eventTypesFilter := []model.WebsocketEventType{model.WebsocketEventChannelDeleted}
messages1, closeWS1 := connectFakeWebSocket(t, th, user1.Id, "", eventTypesFilter)
defer closeWS1()
messages2, closeWS2 := connectFakeWebSocket(t, th, user2.Id, "", eventTypesFilter)
defer closeWS2()
err := th.App.DeleteChannel(th.Context, channel1, "")
require.Nil(t, err)
received := <-messages1
assert.Equal(t, model.WebsocketEventChannelDeleted, received.EventType())
received = <-messages2
assert.Equal(t, model.WebsocketEventChannelDeleted, received.EventType())
err = th.App.DeleteChannel(th.Context, channel2, "")
require.Nil(t, err)
select {
case shouldNotReceive := <-messages2:
assert.NotEqual(t, model.WebsocketEventChannelDeleted, shouldNotReceive.EventType())
case <-time.After(2 * time.Second):
}
received = <-messages1
assert.Equal(t, model.WebsocketEventChannelDeleted, received.EventType())
})
}
func TestRestoreChannel(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
t.Run("should send the correct websocket events", func(t *testing.T) {
user1 := th.CreateUser()
user2 := th.CreateUser()
channel1 := th.CreateChannel(th.Context, th.BasicTeam)
channel2 := th.CreatePrivateChannel(th.Context, th.BasicTeam)
th.LinkUserToTeam(user1, th.BasicTeam)
th.LinkUserToTeam(user2, th.BasicTeam)
th.AddUserToChannel(user1, channel1)
th.AddUserToChannel(user1, channel2)
err := th.App.DeleteChannel(th.Context, channel1, "")
require.Nil(t, err)
err = th.App.DeleteChannel(th.Context, channel2, "")
require.Nil(t, err)
channel1.DeleteAt = time.Now().UnixMilli()
channel2.DeleteAt = time.Now().UnixMilli()
eventTypesFilter := []model.WebsocketEventType{model.WebsocketEventChannelRestored}
messages1, closeWS1 := connectFakeWebSocket(t, th, user1.Id, "", eventTypesFilter)
defer closeWS1()
messages2, closeWS2 := connectFakeWebSocket(t, th, user2.Id, "", eventTypesFilter)
defer closeWS2()
_, err = th.App.RestoreChannel(th.Context, channel1, "")
require.Nil(t, err)
received := <-messages1
assert.Equal(t, model.WebsocketEventChannelRestored, received.EventType())
received = <-messages2
assert.Equal(t, model.WebsocketEventChannelRestored, received.EventType())
_, err = th.App.RestoreChannel(th.Context, channel2, "")
require.Nil(t, err)
select {
case shouldNotReceive := <-messages2:
assert.NotEqual(t, model.WebsocketEventChannelRestored, shouldNotReceive.EventType())
case <-time.After(2 * time.Second):
}
received = <-messages1
assert.Equal(t, model.WebsocketEventChannelRestored, received.EventType())
})
}