From d2a5b2e56cf83d43d8eb27096bd2259f52339211 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Fri, 30 Aug 2024 07:33:24 +0800 Subject: [PATCH] Fix Channel Bookmarks flaky tests (#28016) --- server/channels/api4/channel_bookmark_test.go | 84 +++++++++++-------- 1 file changed, 49 insertions(+), 35 deletions(-) diff --git a/server/channels/api4/channel_bookmark_test.go b/server/channels/api4/channel_bookmark_test.go index 7ae6c06d0a..02f0603e14 100644 --- a/server/channels/api4/channel_bookmark_test.go +++ b/server/channels/api4/channel_bookmark_test.go @@ -16,7 +16,6 @@ import ( ) func TestCreateChannelBookmark(t *testing.T) { - t.Skip("MM-57312") os.Setenv("MM_FEATUREFLAGS_ChannelBookmarks", "true") defer os.Unsetenv("MM_FEATUREFLAGS_ChannelBookmarks") @@ -221,7 +220,6 @@ func TestCreateChannelBookmark(t *testing.T) { }) t.Run("a websockets event should be fired as part of creating a bookmark", func(t *testing.T) { - t.Skip("https://mattermost.atlassian.net/browse/MM-57393") webSocketClient, err := th.CreateWebSocketClient() require.NoError(t, err) webSocketClient.Listen() @@ -244,15 +242,20 @@ func TestCreateChannelBookmark(t *testing.T) { require.Nil(t, appErr) var b model.ChannelBookmarkWithFileInfo - require.Eventuallyf(t, func() bool { - event := <-webSocketClient.EventChannel - if event.EventType() == model.WebsocketEventChannelBookmarkCreated { - err := json.Unmarshal([]byte(event.GetData()["bookmark"].(string)), &b) - require.NoError(t, err) - return true + timeout := time.After(5 * time.Second) + waiting := true + for waiting { + select { + case event := <-webSocketClient.EventChannel: + if event.EventType() == model.WebsocketEventChannelBookmarkCreated { + err := json.Unmarshal([]byte(event.GetData()["bookmark"].(string)), &b) + require.NoError(t, err) + } + case <-timeout: + waiting = false } - return false - }, 2*time.Second, 250*time.Millisecond, "Websocket event for bookmark created not received", nil) + } + require.NotNil(t, b) require.NotEmpty(t, b.Id) }) @@ -588,7 +591,6 @@ func TestEditChannelBookmark(t *testing.T) { }) t.Run("a websockets event should be fired as part of editing a bookmark", func(t *testing.T) { - t.Skip("https://mattermost.atlassian.net/browse/MM-57392") webSocketClient, err := th.CreateWebSocketClient() require.NoError(t, err) webSocketClient.Listen() @@ -617,15 +619,19 @@ func TestEditChannelBookmark(t *testing.T) { CheckOKStatus(t, resp) var ucb model.UpdateChannelBookmarkResponse - require.Eventuallyf(t, func() bool { - event := <-webSocketClient.EventChannel - if event.EventType() == model.WebsocketEventChannelBookmarkUpdated { - err := json.Unmarshal([]byte(event.GetData()["bookmarks"].(string)), &ucb) - require.NoError(t, err) - return true + timeout := time.After(5 * time.Second) + waiting := true + for waiting { + select { + case event := <-webSocketClient.EventChannel: + if event.EventType() == model.WebsocketEventChannelBookmarkUpdated { + err := json.Unmarshal([]byte(event.GetData()["bookmarks"].(string)), &ucb) + require.NoError(t, err) + } + case <-timeout: + waiting = false } - return false - }, 2*time.Second, 250*time.Millisecond, "Websocket event for bookmark edited not received", nil) + } require.NotNil(t, ucb) require.NotEmpty(t, ucb.Updated) @@ -980,15 +986,19 @@ func TestUpdateChannelBookmarkSortOrder(t *testing.T) { require.NotEmpty(t, bookmarks) var bl []*model.ChannelBookmarkWithFileInfo - require.Eventuallyf(t, func() bool { - event := <-webSocketClient.EventChannel - if event.EventType() == model.WebsocketEventChannelBookmarkSorted { - err := json.Unmarshal([]byte(event.GetData()["bookmarks"].(string)), &bl) - require.NoError(t, err) - return true + timeout := time.After(5 * time.Second) + waiting := true + for waiting { + select { + case event := <-webSocketClient.EventChannel: + if event.EventType() == model.WebsocketEventChannelBookmarkSorted { + err := json.Unmarshal([]byte(event.GetData()["bookmarks"].(string)), &bl) + require.NoError(t, err) + } + case <-timeout: + waiting = false } - return false - }, 2*time.Second, 250*time.Millisecond, "Websocket event for bookmark sorted not received", nil) + } require.NotEmpty(t, bl) require.Equal(t, cb.Id, bl[0].Id) @@ -1309,15 +1319,19 @@ func TestDeleteChannelBookmark(t *testing.T) { require.NotEmpty(t, dbm) var b *model.ChannelBookmarkWithFileInfo - require.Eventuallyf(t, func() bool { - if event, ok := <-webSocketClient.EventChannel; ok && event.EventType() == model.WebsocketEventChannelBookmarkDeleted { - err := json.Unmarshal([]byte(event.GetData()["bookmark"].(string)), &b) - require.NoError(t, err) - return true + timeout := time.After(5 * time.Second) + waiting := true + for waiting { + select { + case event := <-webSocketClient.EventChannel: + if event.EventType() == model.WebsocketEventChannelBookmarkDeleted { + err := json.Unmarshal([]byte(event.GetData()["bookmark"].(string)), &b) + require.NoError(t, err) + } + case <-timeout: + waiting = false } - return false - }, 2*time.Second, 250*time.Millisecond, "Websocket event for bookmark deleted not received", nil) - + } require.NotEmpty(t, b) require.Equal(t, cb.Id, b.Id) require.NotEmpty(t, b.DeleteAt)