Skip to content

E2E: Channel menu helper and Mattermost UI specs - #3858

Merged
yasserfaraazkhan merged 4 commits into
e2e/03-mattermost-shellfrom
e2e/04-mattermost-ui
Jul 1, 2026
Merged

E2E: Channel menu helper and Mattermost UI specs#3858
yasserfaraazkhan merged 4 commits into
e2e/03-mattermost-shellfrom
e2e/04-mattermost-ui

Conversation

@yasserfaraazkhan

@yasserfaraazkhan yasserfaraazkhan commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Summary

Stacked PR 4/10 — channelMenu helper + context menu, copy link, alt+enter, etc.

Test plan

  • e2e/specs/mattermost/context_menu.test.ts
  • e2e/specs/mattermost/copy_link.test.ts
  • e2e/specs/mattermost/alt_enter.test.ts

Change Impact: Medium 🟠

Regression Risk: The changes are mostly isolated to E2E test coverage and a new shared test helper, but the helper is imported across multiple Mattermost specs and uses UI/Electron interaction patterns that can be brittle across platforms. Existing application logic is not directly changed, so production regression risk is limited.

QA Recommendation: Run the affected Mattermost E2E specs across supported desktop platforms, with extra attention to context menu, copy link, and Alt+Enter flows. Manual QA can be limited if these automated tests are stable, but a focused spot check is recommended because the helper centralizes UI interaction behavior.

@mm-cloud-bot

Copy link
Copy Markdown

@yasserfaraazkhan: Adding the "do-not-merge/release-note-label-needed" label because no release-note block was detected, please follow our release note process to remove it.

Details

I understand the commands that are listed here

@coderabbitai

coderabbitai Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 41 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 42bbcc4b-b787-4a32-8759-b7b0d1d4b713

📥 Commits

Reviewing files that changed from the base of the PR and between 3fe6a6d and 8a3df27.

📒 Files selected for processing (2)
  • e2e/helpers/channelMenu.ts
  • e2e/specs/mattermost/copy_link.test.ts
📝 Walkthrough

Walkthrough

This PR adds a new channelMenu.ts E2E helper module for channel/team menu and bookmark interactions, adds new Playwright test specs for ALT+ENTER behavior, native context menus, and window-close handling, refactors copy_link.test.ts to use the new helpers, and narrows platform tags in external_links.test.ts.

Changes

Channel menu helpers and consumers

Layer / File(s) Summary
Channel header and sidebar menu helpers
e2e/helpers/channelMenu.ts
Adds selectors and functions to open the channel header menu, toggle the bookmarks bar, open per-channel sidebar menus, and detect/click the “Copy Link” item.
Team sidebar native context menu helpers
e2e/helpers/channelMenu.ts
Adds functions to open the team sidebar context menu via native right-click input events and poll for native or webapp-rendered context menus.
Bookmark bar helpers
e2e/helpers/channelMenu.ts
Adds functions to wait for, click, hover, and delete bookmarks in the bookmarks bar, and to submit the bookmark modal.
Context menu test suite
e2e/specs/mattermost/context_menu.test.ts
New test suite (MM-T1307) verifying “Copy Link” appears in the channel sidebar menu and that a native context menu opens for the team sidebar.
Copy Link test refactor
e2e/specs/mattermost/copy_link.test.ts
Refactors the test to use prepareMattermostServerView, openSidebarChannelMenu, and clickCopyLinkInMenu; updates platform tags; switches to polling clipboard assertion.

New standalone E2E test suites

Layer / File(s) Summary
ALT+ENTER textbox behavior test
e2e/specs/mattermost/alt_enter.test.ts
New test verifying ALT+ENTER inserts a newline without posting, and the send button posts the combined two-line message.
Window close handling tests
e2e/specs/mattermost/window_close.test.ts
New tests (MM-67909) verifying the main window and server view remain functional after window.close(), including after blur/refocus.
External links test tag narrowing
e2e/specs/mattermost/external_links.test.ts
Narrows test tags from @all to @darwin/@win32 and removes Linux-specific skip blocks.

Sequence Diagram(s)

sequenceDiagram
  participant Test
  participant openTeamSidebarContextMenu
  participant webContents
  participant Chromium

  Test->>openTeamSidebarContextMenu: open(win, app, webContentsId)
  openTeamSidebarContextMenu->>webContents: sendInputEvent(right mouse down/up)
  webContents->>Chromium: trigger context-menu event
  Chromium-->>Test: waitForNativeContextMenu observed
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~30 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately summarizes the main additions: a channel menu helper and Mattermost UI E2E specs.
Docstring Coverage ✅ Passed Docstring coverage is 86.67% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch e2e/04-mattermost-ui

Comment @coderabbitai help to get the list of available commands.

@yasserfaraazkhan yasserfaraazkhan changed the title E2E: Channel menu helper and Mattermost UI specs (4/10) E2E: Channel menu helper and Mattermost UI specs Jun 19, 2026
Base automatically changed from e2e/02-main-hooks to e2e/01-harness-ci June 19, 2026 11:21
Base automatically changed from e2e/01-harness-ci to master June 30, 2026 23:13
yasserfaraazkhan and others added 2 commits July 1, 2026 04:51
Resolve harness/hook conflicts by keeping merged #3855 changes.

Co-authored-by: Cursor <cursoragent@cursor.com>
tray_menu.test.ts belongs in the tray/deeplink PR; split-e2e-prs.sh
is a local helper script, not part of the migration stack.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions github-actions Bot added the E2E/Run Run Desktop E2E Tests label Jun 30, 2026
@mm-cloud-bot

Copy link
Copy Markdown

❌ E2E Test Setup Failed

Failed to create E2E test instances: installation wait cancelled: context canceled

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (6)
e2e/specs/mattermost/alt_enter.test.ts (3)

66-76: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Programmatic DOM click bypasses real interaction simulation for the Send button.

sendButton.click() invoked via evaluate() calls the native DOM click() method directly, skipping Playwright's actionability checks (visibility, enabled state, not obscured, in viewport). Since this test's purpose is to verify the Send button still posts the composed message, a real interaction (firstServer!.click(selector)) would better reflect actual user behavior and catch UI bugs (e.g., a disabled or hidden button) that a programmatic click would silently bypass.

♻️ Suggested change
-            const sendButtonClicked = await firstServer!.evaluate(() => {
-                const sendButton = document.querySelector(
-                    '`#channelHeaderSubmitButton`, button[aria-label*="Send" i], [data-testid="SendMessageButton"]',
-                ) as HTMLButtonElement | null;
-                if (!sendButton) {
-                    return false;
-                }
-                sendButton.click();
-                return true;
-            });
-            expect(sendButtonClicked, 'Send button must be present before posting').toBe(true);
+            const sendButtonSelector = '`#channelHeaderSubmitButton`, button[aria-label*="Send" i], [data-testid="SendMessageButton"]';
+            await firstServer!.waitForSelector(sendButtonSelector, {timeout: 5_000});
+            await firstServer!.click(sendButtonSelector);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/specs/mattermost/alt_enter.test.ts` around lines 66 - 76, The Send button
interaction is using a programmatic DOM click inside the evaluate block, which
bypasses Playwright’s real user action checks. Update the alt_enter test to use
the existing firstServer! click flow against the same Send button selector
instead of sendButton.click(), so the test exercises visibility, enabled state,
and other actionability conditions while still asserting the button exists
before posting.

36-47: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoff

Repeated document.querySelector/evaluate patterns instead of Playwright locators.

Throughout the test, DOM queries are done via evaluate() rather than Playwright's locator() API (e.g. firstServer.locator('.post-message__text').count()), which provides built-in auto-waiting/retry and is the more idiomatic Playwright pattern. The current approach works because of the explicit expect.poll calls already wrapping the async checks, but consolidating onto locators would reduce boilerplate and improve consistency with the codebase's polling-first guideline.

Also applies to: 53-65, 85-91

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/specs/mattermost/alt_enter.test.ts` around lines 36 - 47, The test is
using repeated
firstServer.evaluate(document.querySelector/document.querySelectorAll) checks
instead of Playwright locators. Update the affected assertions and polling logic
in alt_enter.test.ts to use firstServer.locator(...) and locator.count()/other
locator-based waits where appropriate, especially around the loading check and
post/message counts, so the test follows Playwright’s idiomatic auto-waiting
pattern and matches the polling-first style used elsewhere.

19-23: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Expensive fixtures are resolved before the env-var skip check runs.

Destructuring serverMap in the test signature forces the full Electron launch + app-ready + server-discovery fixture chain to execute before the body checks MM_TEST_SERVER_URL. If the env var is unset, this wastes the cost of launching Electron just to skip immediately afterward. Consider a describe-level conditional skip (e.g. test.skip(() => !process.env.MM_TEST_SERVER_URL, 'MM_TEST_SERVER_URL required')) placed inside test.describe, which is evaluated before fixtures are resolved.

Also, test.skip(true, ...) aborts the test immediately by throwing, so the return on line 22 is unreachable/dead code.

♻️ Suggested change
 test.describe('mattermost/alt_enter', () => {
     test.use({appConfig: demoMattermostConfig});
     test.setTimeout(120_000);
+    test.skip(() => !process.env.MM_TEST_SERVER_URL, 'MM_TEST_SERVER_URL required');

     test('MM-T2023 ALT+ENTER inserts a newline without sending the message',
         {tag: ['`@P2`', '`@all`']},
         async ({serverMap}) => {
-            if (!process.env.MM_TEST_SERVER_URL) {
-                test.skip(true, 'MM_TEST_SERVER_URL required');
-                return;
-            }
-
             const firstServer = serverMap[demoMattermostConfig.servers[0].name]?.[0]?.win;

Please confirm whether test.skip() accepts a callback form scoped to test.describe in the Playwright version pinned for this repo (1.61.0), to ensure this refactor is valid.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/specs/mattermost/alt_enter.test.ts` around lines 19 - 23, Move the
MM_TEST_SERVER_URL guard out of the test body in alt_enter.test.ts so the
expensive serverMap fixture chain is not resolved before skipping; place a
describe-level conditional skip using test.describe with a predicate that checks
process.env.MM_TEST_SERVER_URL before any fixtures are requested. Update the
existing test.skip(true, 'MM_TEST_SERVER_URL required') usage so it no longer
relies on an immediate-throw skip inside the test body, and remove the
unreachable return. Verify the refactor against the pinned Playwright 1.61.0 API
on the relevant test.describe/test.skip symbols before applying it.
e2e/specs/mattermost/window_close.test.ts (1)

8-58: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract shared close/verify logic to reduce duplication.

Both tests repeat the same get-serverView → close → poll mainWindow → rebuild serverMap sequence; only the blur/focus step differs. Extracting a shared helper would reduce duplication and make future variants easier to add.

♻️ Suggested refactor
+async function closeServerViewAndVerifyRecovery(
+    electronApp: ElectronApplication,
+    mainWindow: Page,
+    serverMap: ServerMap,
+    serverName: string,
+) {
+    const serverView = serverMap[serverName]?.[0]?.win;
+    expect(serverView).toBeDefined();
+
+    await serverView!.evaluate(() => {
+        window.close();
+    });
+
+    await expect.poll(
+        () => mainWindow.evaluate(() => document.readyState === 'complete'),
+        {timeout: 10_000},
+    ).toBe(true);
+
+    const refreshedMap = await buildServerMap(electronApp);
+    expect(refreshedMap[serverName]?.length ?? 0).toBeGreaterThan(0);
+}
+
 test.describe('mattermost/window_close', () => {
     test(
         'MM-67909 window.close() in a server view does not crash the app',
         {tag: ['`@P1`', '`@all`']},
         async ({electronApp, mainWindow, serverMap}) => {
-            const serverName = demoConfig.servers[0].name;
-            const serverView = serverMap[serverName]?.[0]?.win;
-            expect(serverView).toBeDefined();
-
-            await serverView!.evaluate(() => {
-                window.close();
-            });
-
-            expect(mainWindow).toBeDefined();
-            await expect.poll(
-                () => mainWindow.evaluate(() => document.readyState === 'complete'),
-                {timeout: 10_000},
-            ).toBe(true);
-
-            const refreshedMap = await buildServerMap(electronApp);
-            expect(refreshedMap[serverName]?.length ?? 0).toBeGreaterThan(0);
+            const serverName = demoConfig.servers[0].name;
+            await closeServerViewAndVerifyRecovery(electronApp, mainWindow, serverMap, serverName);
         },
     );
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/specs/mattermost/window_close.test.ts` around lines 8 - 58, Both tests in
mattermost/window_close repeat the same serverView close and verification flow,
so extract that shared sequence into a helper to reduce duplication. Move the
common get serverView from serverMap, call window.close(), wait for mainWindow
to be ready, and rebuild/validate the server map into a reusable function, then
keep only the blur/focus variation inside the second test. Use the existing test
block and symbols like serverMap, mainWindow, buildServerMap, and electronApp to
locate the shared logic.
e2e/specs/mattermost/context_menu.test.ts (1)

23-26: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicated MM_TEST_SERVER_URL skip guard across both tests.

Both tests repeat the same inline skip check. copy_link.test.ts in this same PR uses a single describe-level test.skip(!process.env.MM_TEST_SERVER_URL, 'MM_TEST_SERVER_URL required');. Consider applying the same pattern here for consistency and to avoid duplication.

♻️ Suggested refactor
 test.describe('mattermost/context_menu', () => {
     test.use({appConfig: demoMattermostConfig});
     test.setTimeout(120_000);
+    test.skip(!process.env.MM_TEST_SERVER_URL, 'MM_TEST_SERVER_URL required');

     test('MM-T1307 Right-click a channel name in LHS shows context menu',
         {tag: ['`@P2`', '`@all`']},
         async ({electronApp, serverMap}) => {
-            if (!process.env.MM_TEST_SERVER_URL) {
-                test.skip(true, 'MM_TEST_SERVER_URL required');
-                return;
-            }
-
             const serverEntry = serverMap[demoMattermostConfig.servers[0].name]?.[0];

Also applies to: 54-57

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/specs/mattermost/context_menu.test.ts` around lines 23 - 26, The two
tests in context_menu.test.ts duplicate the MM_TEST_SERVER_URL availability
check inline, so refactor them to use a single describe-level test.skip guard
like copy_link.test.ts. Update the relevant describe block(s) to skip when
process.env.MM_TEST_SERVER_URL is missing, and remove the repeated per-test
conditional checks from the individual test cases to keep the suite consistent
and avoid duplication.
e2e/helpers/channelMenu.ts (1)

84-110: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Copy-link menu lookup doesn't verify element visibility, and duplicates polling logic already available via expect.poll.

waitForCopyLinkInMenu only checks DOM presence (win.$(selector)), not visibility, unlike the bounding-rect checks used elsewhere in this file (e.g. waitForBookmarkInBar, waitForWebappContextMenu). A stale/hidden menu node matching one of the COPY_LINK_SELECTORS could cause clickCopyLinkInMenu to click an invisible element and fail or click the wrong target. The hand-rolled Date.now()/setTimeout loop also duplicates the expect.poll pattern already used at lines 239, 247, 277, 400 in this same file.

♻️ Suggested refactor using `expect.poll` + visibility check
 export async function waitForCopyLinkInMenu(win: ServerView): Promise<void> {
-    const deadline = Date.now() + 15_000;
-    while (Date.now() < deadline) {
-        for (const selector of COPY_LINK_SELECTORS) {
-            const candidate = await win.$(selector);
-            if (candidate) {
-                return;
-            }
-        }
-        await new Promise((resolve) => setTimeout(resolve, 200));
-    }
-    throw new Error('"Copy Link" item not found in the channel menu');
+    await expect.poll(async () => {
+        for (const selector of COPY_LINK_SELECTORS) {
+            const candidate = await win.$(selector);
+            if (candidate && await candidate.isVisible()) {
+                return true;
+            }
+        }
+        return false;
+    }, {timeout: 15_000, message: '"Copy Link" item must appear in the channel menu'}).toBe(true);
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/helpers/channelMenu.ts` around lines 84 - 110, The Copy Link menu helpers
are only checking DOM presence and using a custom polling loop. Update
waitForCopyLinkInMenu and clickCopyLinkInMenu to use the same expect.poll
pattern already used elsewhere in channelMenu.ts, and verify the matched
COPY_LINK_SELECTORS element is actually visible (similar to the bounding-rect
checks in waitForBookmarkInBar and waitForWebappContextMenu) before returning or
clicking. Keep the retry logic centralized in waitForCopyLinkInMenu so
clickCopyLinkInMenu only waits and then clicks the confirmed visible selector.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@e2e/helpers/channelMenu.ts`:
- Around line 318-373: The deleteAllBookmarksInBar retry loop can finish without
actually removing all bookmarks, because it exits silently after 10 attempts
even if hasBookmark stays true. Update deleteAllBookmarksInBar to keep the
current retry/recheck behavior, but after the loop completes with bookmarks
still present, throw a failure so callers know cleanup did not succeed. Keep the
transient-failure handling around the click/delete flow, but make sure
persistent failures in the bookmark-bar deletion path are surfaced instead of
being treated as success.

In `@e2e/specs/mattermost/copy_link.test.ts`:
- Around line 15-29: The Mattermost copy-link test still uses
serverEntry.webContentsId after only checking firstServer, so serverEntry
remains possibly undefined. Update the guard in the test setup around
serverMap/demoMattermostConfig usage to narrow serverEntry itself before calling
prepareMattermostServerView, either by explicitly checking serverEntry or using
a non-null assertion where appropriate. Keep the fix localized to the setup that
fetches serverEntry and firstServer in copy_link.test.ts.

---

Nitpick comments:
In `@e2e/helpers/channelMenu.ts`:
- Around line 84-110: The Copy Link menu helpers are only checking DOM presence
and using a custom polling loop. Update waitForCopyLinkInMenu and
clickCopyLinkInMenu to use the same expect.poll pattern already used elsewhere
in channelMenu.ts, and verify the matched COPY_LINK_SELECTORS element is
actually visible (similar to the bounding-rect checks in waitForBookmarkInBar
and waitForWebappContextMenu) before returning or clicking. Keep the retry logic
centralized in waitForCopyLinkInMenu so clickCopyLinkInMenu only waits and then
clicks the confirmed visible selector.

In `@e2e/specs/mattermost/alt_enter.test.ts`:
- Around line 66-76: The Send button interaction is using a programmatic DOM
click inside the evaluate block, which bypasses Playwright’s real user action
checks. Update the alt_enter test to use the existing firstServer! click flow
against the same Send button selector instead of sendButton.click(), so the test
exercises visibility, enabled state, and other actionability conditions while
still asserting the button exists before posting.
- Around line 36-47: The test is using repeated
firstServer.evaluate(document.querySelector/document.querySelectorAll) checks
instead of Playwright locators. Update the affected assertions and polling logic
in alt_enter.test.ts to use firstServer.locator(...) and locator.count()/other
locator-based waits where appropriate, especially around the loading check and
post/message counts, so the test follows Playwright’s idiomatic auto-waiting
pattern and matches the polling-first style used elsewhere.
- Around line 19-23: Move the MM_TEST_SERVER_URL guard out of the test body in
alt_enter.test.ts so the expensive serverMap fixture chain is not resolved
before skipping; place a describe-level conditional skip using test.describe
with a predicate that checks process.env.MM_TEST_SERVER_URL before any fixtures
are requested. Update the existing test.skip(true, 'MM_TEST_SERVER_URL
required') usage so it no longer relies on an immediate-throw skip inside the
test body, and remove the unreachable return. Verify the refactor against the
pinned Playwright 1.61.0 API on the relevant test.describe/test.skip symbols
before applying it.

In `@e2e/specs/mattermost/context_menu.test.ts`:
- Around line 23-26: The two tests in context_menu.test.ts duplicate the
MM_TEST_SERVER_URL availability check inline, so refactor them to use a single
describe-level test.skip guard like copy_link.test.ts. Update the relevant
describe block(s) to skip when process.env.MM_TEST_SERVER_URL is missing, and
remove the repeated per-test conditional checks from the individual test cases
to keep the suite consistent and avoid duplication.

In `@e2e/specs/mattermost/window_close.test.ts`:
- Around line 8-58: Both tests in mattermost/window_close repeat the same
serverView close and verification flow, so extract that shared sequence into a
helper to reduce duplication. Move the common get serverView from serverMap,
call window.close(), wait for mainWindow to be ready, and rebuild/validate the
server map into a reusable function, then keep only the blur/focus variation
inside the second test. Use the existing test block and symbols like serverMap,
mainWindow, buildServerMap, and electronApp to locate the shared logic.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: fd6e4bb6-d824-44ad-9b2d-6c5bb4ef9fb8

📥 Commits

Reviewing files that changed from the base of the PR and between 08129c4 and 3fe6a6d.

📒 Files selected for processing (6)
  • e2e/helpers/channelMenu.ts
  • e2e/specs/mattermost/alt_enter.test.ts
  • e2e/specs/mattermost/context_menu.test.ts
  • e2e/specs/mattermost/copy_link.test.ts
  • e2e/specs/mattermost/external_links.test.ts
  • e2e/specs/mattermost/window_close.test.ts

Comment thread e2e/helpers/channelMenu.ts
Comment thread e2e/specs/mattermost/copy_link.test.ts
Fail bookmark cleanup after retry exhaustion and guard serverEntry
before prepareMattermostServerView in copy_link.test.ts.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions github-actions Bot added E2E/Run Run Desktop E2E Tests and removed E2E/Run Run Desktop E2E Tests labels Jun 30, 2026
@mm-cloud-bot

Copy link
Copy Markdown

❌ E2E Test Setup Failed

Failed to create E2E test instances: installation wait cancelled: context canceled

@yasserfaraazkhan

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@yasserfaraazkhan yasserfaraazkhan added E2E/Reset-Servers Destroy E2E server for a fresh Run. Add E2E/Run label to kick off an e2e run. and removed E2E/Run Run Desktop E2E Tests labels Jul 1, 2026
@yasserfaraazkhan
yasserfaraazkhan changed the base branch from master to e2e/03-mattermost-shell July 1, 2026 00:20
@yasserfaraazkhan yasserfaraazkhan removed the E2E/Reset-Servers Destroy E2E server for a fresh Run. Add E2E/Run label to kick off an e2e run. label Jul 1, 2026
@yasserfaraazkhan
yasserfaraazkhan merged commit fd75868 into e2e/03-mattermost-shell Jul 1, 2026
21 of 22 checks passed
@yasserfaraazkhan
yasserfaraazkhan deleted the e2e/04-mattermost-ui branch July 1, 2026 00:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants