From 155ada09fb3b133364fa1ed52e13635e383ec802 Mon Sep 17 00:00:00 2001 From: Hossein Ahmadian-Yazdi Date: Thu, 19 Dec 2019 08:53:29 -0500 Subject: [PATCH] [MM-10858] Channel Member Update Websocket Event (#13305) * Channel Member update event * Address PR comments and extend tests * golang ci addressed * Update api4/channel_test.go Co-Authored-By: Ben Schumacher --- api4/channel_test.go | 19 +++++++++++++++++++ app/channel.go | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/api4/channel_test.go b/api4/channel_test.go index a367471460..4fb0348e31 100644 --- a/api4/channel_test.go +++ b/api4/channel_test.go @@ -1976,6 +1976,10 @@ func TestUpdateChannelMemberSchemeRoles(t *testing.T) { th := Setup().InitBasic() defer th.TearDown() SystemAdminClient := th.SystemAdminClient + WebSocketClient, err := th.CreateWebSocketClient() + WebSocketClient.Listen() + require.Nil(t, err) + th.LoginBasic() s1 := &model.SchemeRoles{ @@ -1986,6 +1990,21 @@ func TestUpdateChannelMemberSchemeRoles(t *testing.T) { _, r1 := SystemAdminClient.UpdateChannelMemberSchemeRoles(th.BasicChannel.Id, th.BasicUser.Id, s1) CheckNoError(t, r1) + timeout := time.After(600 * time.Millisecond) + waiting := true + for waiting { + select { + case event := <-WebSocketClient.EventChannel: + if event.Event == model.WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED { + require.Equal(t, model.WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED, event.Event) + waiting = false + } + case <-timeout: + require.Fail(t, "Should have received event channel member websocket event and not timedout") + waiting = false + } + } + tm1, rtm1 := SystemAdminClient.GetChannelMember(th.BasicChannel.Id, th.BasicUser.Id, "") CheckNoError(t, rtm1) assert.Equal(t, false, tm1.SchemeGuest) diff --git a/app/channel.go b/app/channel.go index 9fe6219283..963fc9b23a 100644 --- a/app/channel.go +++ b/app/channel.go @@ -755,6 +755,11 @@ func (a *App) UpdateChannelMemberSchemeRoles(channelId string, userId string, is return nil, err } + // Notify the clients that the member notify props changed + message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED, "", "", userId, nil) + message.Add("channelMember", member.ToJson()) + a.Publish(message) + a.InvalidateCacheForUser(userId) return member, nil }