-
Notifications
You must be signed in to change notification settings - Fork 13k
test: Purge duplicated toastbar page objects
#37410
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Looks like this PR is ready to merge! 🎉 |
|
WalkthroughRefactors e2e tests and page-objects to use a unified ToastMessages API for toast detection and dismissal. Removes legacy ToastBar and direct toast locators, adds a base Account class, updates multiple page-objects to expose toastMessage, and adjusts tests to waitForDisplay/dismissToast via the new abstraction. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor Tester
participant Test as E2E Test
participant PO as Page Object
participant TM as ToastMessages
participant UI as App UI
Tester->>Test: Perform action (e.g., save/update)
Test->>PO: Trigger UI interaction
PO->>UI: Execute action
Note over UI: Action emits toast
Test->>TM: waitForDisplay({ type?, message? })
TM-->>Test: Toast detected
Test->>TM: dismissToast(type?)
TM->>UI: Close toast
UI-->>Test: Toast dismissed
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #37410 +/- ##
========================================
Coverage 68.12% 68.13%
========================================
Files 3364 3364
Lines 115749 115749
Branches 20909 20937 +28
========================================
+ Hits 78855 78862 +7
+ Misses 34204 34195 -9
- Partials 2690 2692 +2
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
3bce17f to
2c70aa3
Compare
There was a problem hiding this comment.
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 (26)
apps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.ts (1)
54-54: Good migration to toastMessage; consider asserting message and optional cleanupUsing waitForDisplay({ type: 'error' }) is correct. Optionally assert the error text and dismiss to keep the page stable for any follow-up steps.
Example:
- await poFederationChannelServer2.toastMessage.waitForDisplay({ type: 'error' }); + await poFederationChannelServer2.toastMessage.waitForDisplay({ type: 'error', message: 'User not found' }); + await poFederationChannelServer2.toastMessage.dismissToast('error');Based on learnings (proper wait strategies).
Also applies to: 69-69
apps/meteor/tests/e2e/retention-policy.spec.ts (1)
187-187: Prevent toast dismissal race — wait before dismissCall waitForDisplay() before dismissToast() to avoid intermittent failures when the toast hasn’t rendered yet.
- await poHomeChannel.toastMessage.dismissToast(); + await poHomeChannel.toastMessage.waitForDisplay(); // defaults to 'success' + await poHomeChannel.toastMessage.dismissToast();As per coding guidelines (implement proper wait strategies).
Also applies to: 204-204
apps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.ts (1)
186-186: Optional: dismiss toast after waitingNot required, but dismissing post-wait can reduce UI interference with subsequent clicks.
- await poOmnichannelDepartments.toastMessage.waitForDisplay(); + await poOmnichannelDepartments.toastMessage.waitForDisplay(); + await poOmnichannelDepartments.toastMessage.dismissToast();Based on learnings (clean state between steps).
apps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.ts (1)
49-49: Avoid flakiness: wait for toast before dismissEnsure the toast is visible prior to clicking its close button.
- await poHomeChannel.toastMessage.dismissToast(); + await poHomeChannel.toastMessage.waitForDisplay(); + await poHomeChannel.toastMessage.dismissToast();As per coding guidelines (web-first assertions and proper waits).
Also applies to: 59-59
apps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.ts (1)
80-80: Synchronize toast handling to reduce race conditions
- Line 80: don’t dismiss in Promise.all with other assertions. Wait, dismiss, then assert.
- Lines 100/114: add waitForDisplay before dismiss.
- Line 126: already using waitForDisplay — keep as is.
@@ - await Promise.all([ - poOmnichannelPriorities.toastMessage.dismissToast(), - expect(poOmnichannelPriorities.managePriority.inputName).not.toBeVisible(), - expect(poOmnichannelPriorities.findPriority(PRIORITY_NAME)).toBeVisible(), - expect(poOmnichannelPriorities.findPriority('Highest')).not.toBeVisible(), - ]); + await poOmnichannelPriorities.toastMessage.waitForDisplay(); + await poOmnichannelPriorities.toastMessage.dismissToast(); + await Promise.all([ + expect(poOmnichannelPriorities.managePriority.inputName).not.toBeVisible(), + expect(poOmnichannelPriorities.findPriority(PRIORITY_NAME)).toBeVisible(), + expect(poOmnichannelPriorities.findPriority('Highest')).not.toBeVisible(), + ]); @@ - await poOmnichannelPriorities.toastMessage.dismissToast(); + await poOmnichannelPriorities.toastMessage.waitForDisplay(); + await poOmnichannelPriorities.toastMessage.dismissToast(); @@ - await poOmnichannelPriorities.toastMessage.dismissToast(); + await poOmnichannelPriorities.toastMessage.waitForDisplay(); + await poOmnichannelPriorities.toastMessage.dismissToast();As per coding guidelines (proper wait strategies).
Also applies to: 100-100, 114-114, 126-126
apps/meteor/tests/e2e/admin-users-custom-fields.spec.ts (1)
81-81: Wait before dismissing success toastAdd an explicit wait to avoid brittle dismiss clicks right after save.
- await poHomeChannel.toastMessage.dismissToast(); + await poHomeChannel.toastMessage.waitForDisplay(); + await poHomeChannel.toastMessage.dismissToast();As per coding guidelines (web-first waits).
Also applies to: 118-118
apps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.ts (1)
79-79: Make toast wait explicit and dismiss to reduce flakinessSpecify type and dismiss after confirming display. Also consider replacing earlier hardcoded waits with web-first assertions.
Apply:
- await agent.poHomeChannel.toastMessage.waitForDisplay(); + await agent.poHomeChannel.toastMessage.waitForDisplay({ type: 'success' }); + await agent.poHomeChannel.toastMessage.dismissToast();For timeouts (e.g., Line 47, Line 63), prefer waiting on the expected chat/PDF elements to appear. As per coding guidelines.
apps/meteor/tests/e2e/enforce-2FA.spec.ts (1)
62-62: Be explicit about toast typePass type for clarity and stability.
- await poHomeChannel.toastMessage.waitForDisplay(); + await poHomeChannel.toastMessage.waitForDisplay({ type: 'success' });As per coding guidelines.
apps/meteor/tests/e2e/federation/tests/channel/private.spec.ts (1)
439-439: Harden toast waits across these steps
- Pass type for determinism.
- Dismiss after the toast when subsequent interactions follow.
Pattern to apply at each occurrence:
- await poFederationChannelServer1.toastMessage.waitForDisplay(); + await poFederationChannelServer1.toastMessage.waitForDisplay({ type: 'success' }); + await poFederationChannelServer1.toastMessage.dismissToast();Also consider replacing hardcoded timeouts (e.g., Line 1035) with web-first waits. As per coding guidelines.
Also applies to: 491-491, 553-553, 645-645, 708-708
apps/meteor/tests/e2e/settings-int.spec.ts (1)
24-24: LGTM; optional: assert message for specificityCurrent error-type wait is fine. If message is stable, include it to avoid false positives.
await poAdminSettings.toastMessage.waitForDisplay({ type: 'error', message: '...' });As per coding guidelines.
apps/meteor/tests/e2e/account-profile.spec.ts (1)
88-93: Make toast checks explicit; keep dismissalSpecify type to reduce ambiguity.
- await poHomeChannel.toastMessage.waitForDisplay(); + await poHomeChannel.toastMessage.waitForDisplay({ type: 'success' }); await poHomeChannel.toastMessage.dismissToast(); - await poHomeChannel.toastMessage.waitForDisplay(); + await poHomeChannel.toastMessage.waitForDisplay({ type: 'success' });As per coding guidelines.
apps/meteor/tests/e2e/delete-account.spec.ts (1)
67-67: Precise error assertion via toastMessageGood use of type+message. Optionally dismiss the toast afterwards to keep the UI unobstructed for later steps.
apps/meteor/tests/e2e/message-actions.spec.ts (1)
163-164: Guard toast dismissal with an explicit waitCall waitForDisplay before dismiss to avoid races; optionally scope by type.
- await poHomeChannel.toastMessage.dismissToast(); + await poHomeChannel.toastMessage.waitForDisplay({ type: 'success' }); + await poHomeChannel.toastMessage.dismissToast();apps/meteor/tests/e2e/admin-users-role-management.spec.ts (1)
41-42: Tighten toast asserts (add type; optionally dismiss)Be explicit about toast type (and dismiss to keep UI clean).
- await admin.toastMessage.waitForDisplay({ type: 'success', message: 'User is now an admin' }); + await admin.toastMessage.waitForDisplay({ type: 'success', message: 'User is now an admin' }); + await admin.toastMessage.dismissToast();- await admin.toastMessage.waitForDisplay({ type: 'success', message: 'User is no longer an admin' }); + await admin.toastMessage.waitForDisplay({ type: 'success', message: 'User is no longer an admin' }); + await admin.toastMessage.dismissToast();As per coding guidelines.
Also applies to: 60-61
apps/meteor/tests/e2e/messaging.spec.ts (1)
183-196: Reduce flakiness in “stress test” edit loopWaiting for a single /chat.update may not cover all edits. Consider awaiting the last edit deterministically (e.g., wait for N responses or final message text before assertion).
- const editPromise = page.waitForResponse( + const editsToAwait = 5; + const editPromises = Array.from({ length: editsToAwait }, () => + page.waitForResponse( (response) => /api\/v1\/chat.update/.test(response.url()) && response.status() === 200 && response.request().method() === 'POST', - ); + ), + ); ... - await editPromise; + await Promise.all(editPromises);As per coding guidelines (web-first synchronization).
apps/meteor/tests/e2e/federation/tests/channel/public.spec.ts (1)
441-442: Harden toast handling: specify type and dismissMake waits more specific and clear the toast to avoid UI overlap.
- await poFederationChannelServer1.toastMessage.waitForDisplay(); + await poFederationChannelServer1.toastMessage.waitForDisplay({ type: 'success' }); + await poFederationChannelServer1.toastMessage.dismissToast();Repeat for the other occurrences in this file. As per coding guidelines.
Also applies to: 493-494, 555-556, 647-648, 710-711
apps/meteor/tests/e2e/federation/tests/messaging/public.spec.ts (1)
811-812: Be explicit on toast type and clear itAdd { type: 'success' } and dismiss for consistency.
- await poFederationChannelServer1.toastMessage.waitForDisplay(); + await poFederationChannelServer1.toastMessage.waitForDisplay({ type: 'success' }); + await poFederationChannelServer1.toastMessage.dismissToast();Apply similarly at Line 833. Based on learnings.
Also applies to: 833-834
apps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.ts (2)
55-57: Wait explicitly for the toast; avoid static timeoutUse waitForDisplay before dismiss; replace timeout with a state wait.
- await poHomeChannel.toastMessage.dismissToast(); - await page.waitForTimeout(1000); + await poHomeChannel.toastMessage.waitForDisplay({ type: 'success' }); + await poHomeChannel.toastMessage.dismissToast(); + await expect(poHomeChannel.content.encryptedRoomHeaderIcon).not.toBeVisible();As per coding guidelines (web-first, no hardcoded timeouts).
69-71: Same here: explicit wait + no fixed sleepMirror the pattern for enabling encryption.
- await poHomeChannel.toastMessage.dismissToast(); - await page.waitForTimeout(1000); + await poHomeChannel.toastMessage.waitForDisplay({ type: 'success' }); + await poHomeChannel.toastMessage.dismissToast(); + await expect(poHomeChannel.content.encryptedRoomHeaderIcon).toBeVisible();apps/meteor/tests/e2e/federation/tests/messaging/dm.spec.ts (1)
1010-1010: Strengthen toast waits (add type; dismiss afterwards)Specify toast type and clear it to avoid UI interference.
- await poFederationChannelServer1.toastMessage.waitForDisplay(); + await poFederationChannelServer1.toastMessage.waitForDisplay({ type: 'success' }); + await poFederationChannelServer1.toastMessage.dismissToast();Apply similarly at Line 1052. As per coding guidelines.
Also applies to: 1052-1052
apps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.ts (1)
77-78: Precede dismiss with a wait; keep UI cleanWait for the toast to appear, then dismiss. This reduces races in CI.
- await agent.poHomeOmnichannel.triggers.toastMessage.dismissToast(); + await agent.poHomeOmnichannel.triggers.toastMessage.waitForDisplay({ type: 'success' }); + await agent.poHomeOmnichannel.triggers.toastMessage.dismissToast();Repeat for the other occurrences. As per coding guidelines.
Also applies to: 85-85, 125-126
apps/meteor/tests/e2e/page-objects/omnichannel-priorities.ts (1)
36-38: Remove the new TODO commentThe added
// TODOcomment contradicts our guidance to keep implementation free of comments in these page objects. Please track this follow-up externally or via a typed helper field instead. As per coding guidelines.apps/meteor/tests/e2e/page-objects/omnichannel-triggers.ts (1)
10-12: Stick to comment-free implementationsPlease drop the newly introduced
// TODOhere; our e2e coding guidelines ask us to avoid inline implementation comments. Consider moving this note to an issue or follow-up card instead. As per coding guidelines.apps/meteor/tests/e2e/page-objects/omnichannel-departments.ts (1)
3-3: Good step toward deduped toast handling; consider consolidating via a BasePage to remove repetition.
- Import and composition of
ToastMessageslook correct and align with the PR goal.- To avoid repeating
toastMessageacross page-objects, introduce aBasePagethat holdspageandtoastMessage, then extend it here. This removes the TODO and centralizes toast behavior.Example (for later application once BasePage exists):
export abstract class BasePage { constructor(protected readonly page: Page) { this.toastMessage = new ToastMessages(page); } readonly toastMessage: ToastMessages; } export class OmnichannelDepartments extends BasePage { readonly sidenav: OmnichannelSidenav; constructor(page: Page) { super(page); this.sidenav = new OmnichannelSidenav(page); } }
- Please also confirm
./fragments/index.tsre-exportsToastMessagesto keep imports stable.Also applies to: 10-12, 16-16
apps/meteor/tests/e2e/federation/tests/messaging/private.spec.ts (2)
816-816: Dismiss the toast after waiting to reduce flakiness.After
waitForDisplay(), dismissing the toast helps prevent overlay interference with later clicks.Apply near these lines:
- await poFederationChannelServer1.toastMessage.waitForDisplay(); + await poFederationChannelServer1.toastMessage.waitForDisplay(); + await poFederationChannelServer1.toastMessage.dismissToast(); - await poFederationChannelServer2.toastMessage.waitForDisplay(); + await poFederationChannelServer2.toastMessage.waitForDisplay(); + await poFederationChannelServer2.toastMessage.dismissToast();Based on learnings
Also applies to: 838-838
908-908: Avoid hard-coded toast copy; prefer stable signals.String-matching on UI text is brittle (i18n/wording changes). If the success text isn’t contractually stable, rely only on type, or add a test helper with a stable selector.
Option A (keep only type):
- await poFederationChannelServer1.toastMessage.waitForDisplay({ type: 'success', message: 'Message has been starred' }); + await poFederationChannelServer1.toastMessage.waitForDisplay({ type: 'success' }); + await poFederationChannelServer1.toastMessage.dismissToast(); - await poFederationChannelServer2.toastMessage.waitForDisplay({ type: 'success', message: 'Message has been starred' }); + await poFederationChannelServer2.toastMessage.waitForDisplay({ type: 'success' }); + await poFederationChannelServer2.toastMessage.dismissToast();Option B (if copy is stable in EN builds): keep message but still dismiss afterward.
Based on learnings
Also applies to: 929-929
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Jira integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (39)
apps/meteor/tests/e2e/account-profile.spec.ts(1 hunks)apps/meteor/tests/e2e/admin-users-custom-fields.spec.ts(2 hunks)apps/meteor/tests/e2e/admin-users-role-management.spec.ts(2 hunks)apps/meteor/tests/e2e/channel-management.spec.ts(3 hunks)apps/meteor/tests/e2e/delete-account.spec.ts(1 hunks)apps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.ts(5 hunks)apps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.ts(2 hunks)apps/meteor/tests/e2e/enforce-2FA.spec.ts(1 hunks)apps/meteor/tests/e2e/federation/page-objects/channel.ts(2 hunks)apps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.ts(2 hunks)apps/meteor/tests/e2e/federation/tests/channel/private.spec.ts(5 hunks)apps/meteor/tests/e2e/federation/tests/channel/public.spec.ts(5 hunks)apps/meteor/tests/e2e/federation/tests/messaging/dm.spec.ts(4 hunks)apps/meteor/tests/e2e/federation/tests/messaging/private.spec.ts(4 hunks)apps/meteor/tests/e2e/federation/tests/messaging/public.spec.ts(4 hunks)apps/meteor/tests/e2e/message-actions.spec.ts(1 hunks)apps/meteor/tests/e2e/messaging.spec.ts(2 hunks)apps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.ts(1 hunks)apps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.ts(1 hunks)apps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.ts(4 hunks)apps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.ts(1 hunks)apps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.ts(1 hunks)apps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.ts(1 hunks)apps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.ts(2 hunks)apps/meteor/tests/e2e/page-objects/account-profile.ts(1 hunks)apps/meteor/tests/e2e/page-objects/account.ts(1 hunks)apps/meteor/tests/e2e/page-objects/admin.ts(2 hunks)apps/meteor/tests/e2e/page-objects/fragments/index.ts(1 hunks)apps/meteor/tests/e2e/page-objects/fragments/toast-messages.ts(1 hunks)apps/meteor/tests/e2e/page-objects/home-channel.ts(3 hunks)apps/meteor/tests/e2e/page-objects/home-omnichannel.ts(3 hunks)apps/meteor/tests/e2e/page-objects/index.ts(0 hunks)apps/meteor/tests/e2e/page-objects/omnichannel-departments.ts(1 hunks)apps/meteor/tests/e2e/page-objects/omnichannel-priorities.ts(2 hunks)apps/meteor/tests/e2e/page-objects/omnichannel-triggers.ts(1 hunks)apps/meteor/tests/e2e/page-objects/toastBar.ts(0 hunks)apps/meteor/tests/e2e/prune-messages.spec.ts(5 hunks)apps/meteor/tests/e2e/retention-policy.spec.ts(2 hunks)apps/meteor/tests/e2e/settings-int.spec.ts(1 hunks)
💤 Files with no reviewable changes (2)
- apps/meteor/tests/e2e/page-objects/index.ts
- apps/meteor/tests/e2e/page-objects/toastBar.ts
🧰 Additional context used
📓 Path-based instructions (4)
apps/meteor/tests/e2e/**/*.spec.ts
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
apps/meteor/tests/e2e/**/*.spec.ts: All Playwright test files must be located under apps/meteor/tests/e2e/ and use the .spec.ts extension (e.g., login.spec.ts)
Use descriptive test names that clearly communicate expected behavior
Use test.beforeAll() and test.afterAll() for setup and teardown
Use test.step() to organize complex test scenarios
Group related tests in the same file
Utilize Playwright fixtures (test, page, expect) consistently
Prefer web-first assertions (e.g., toBeVisible, toHaveText)
Use expect matchers (toEqual, toContain, toBeTruthy, toHaveLength, etc.) instead of assert statements
Maintain test isolation between test cases
Ensure a clean state for each test execution
Ensure tests run reliably in parallel without shared state conflicts
Files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/message-actions.spec.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.ts
apps/meteor/tests/e2e/**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
apps/meteor/tests/e2e/**/*.{ts,tsx,js,jsx}: Write concise, technical TypeScript/JavaScript with accurate typing
Follow DRY by extracting reusable logic into helper functions or page objects
Avoid code comments in the implementation
Files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/message-actions.spec.tsapps/meteor/tests/e2e/page-objects/fragments/toast-messages.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/page-objects/admin.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/federation/page-objects/channel.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-triggers.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
apps/meteor/tests/e2e/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
apps/meteor/tests/e2e/**/*.{ts,tsx}: Avoid using page.locator(); prefer semantic locators like page.getByRole, page.getByLabel, page.getByText, and page.getByTitle
Store commonly used locators in variables/constants for reuse
Use page.waitFor() with specific conditions and avoid hardcoded timeouts
Implement proper wait strategies for dynamic content
Follow the Page Object Model pattern consistently
Files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/message-actions.spec.tsapps/meteor/tests/e2e/page-objects/fragments/toast-messages.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/page-objects/admin.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/federation/page-objects/channel.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-triggers.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
apps/meteor/tests/e2e/page-objects/**/*.ts
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
Utilize and place Page Object implementations under apps/meteor/tests/e2e/page-objects/
Files:
apps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/page-objects/fragments/toast-messages.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/page-objects/admin.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/page-objects/omnichannel-triggers.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
🧠 Learnings (24)
📓 Common learnings
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/page-objects/**/*.ts : Utilize and place Page Object implementations under apps/meteor/tests/e2e/page-objects/
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx} : Follow the Page Object Model pattern consistently
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Prefer web-first assertions (e.g., toBeVisible, toHaveText)
Applied to files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/message-actions.spec.tsapps/meteor/tests/e2e/page-objects/fragments/toast-messages.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/page-objects/admin.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/federation/page-objects/channel.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-triggers.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Use expect matchers (toEqual, toContain, toBeTruthy, toHaveLength, etc.) instead of assert statements
Applied to files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/message-actions.spec.tsapps/meteor/tests/e2e/page-objects/fragments/toast-messages.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Use descriptive test names that clearly communicate expected behavior
Applied to files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/message-actions.spec.tsapps/meteor/tests/e2e/page-objects/fragments/toast-messages.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/page-objects/admin.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/federation/page-objects/channel.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-triggers.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Ensure tests run reliably in parallel without shared state conflicts
Applied to files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx} : Implement proper wait strategies for dynamic content
Applied to files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/page-objects/fragments/toast-messages.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Maintain test isolation between test cases
Applied to files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Group related tests in the same file
Applied to files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Utilize Playwright fixtures (test, page, expect) consistently
Applied to files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/message-actions.spec.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/page-objects/admin.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-triggers.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx} : Use page.waitFor() with specific conditions and avoid hardcoded timeouts
Applied to files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/page-objects/fragments/toast-messages.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Ensure a clean state for each test execution
Applied to files:
apps/meteor/tests/e2e/federation/tests/channel/private.spec.tsapps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx,js,jsx} : Avoid code comments in the implementation
Applied to files:
apps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/message-actions.spec.tsapps/meteor/tests/e2e/page-objects/fragments/toast-messages.tsapps/meteor/tests/e2e/federation/tests/channel/public.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/federation/page-objects/channel.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Use test.step() to organize complex test scenarios
Applied to files:
apps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx} : Follow the Page Object Model pattern consistently
Applied to files:
apps/meteor/tests/e2e/channel-management.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/dm.spec.tsapps/meteor/tests/e2e/message-actions.spec.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.tsapps/meteor/tests/e2e/page-objects/admin.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/federation/page-objects/channel.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-triggers.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Use test.beforeAll() and test.afterAll() for setup and teardown
Applied to files:
apps/meteor/tests/e2e/omnichannel/omnichannel-priorities.spec.tsapps/meteor/tests/e2e/retention-policy.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/messaging.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx} : Avoid using page.locator(); prefer semantic locators like page.getByRole, page.getByLabel, page.getByText, and page.getByTitle
Applied to files:
apps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.tsapps/meteor/tests/e2e/admin-users-role-management.spec.tsapps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/page-objects/fragments/toast-messages.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/page-objects/admin.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/federation/page-objects/channel.tsapps/meteor/tests/e2e/page-objects/omnichannel-triggers.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/page-objects/**/*.ts : Utilize and place Page Object implementations under apps/meteor/tests/e2e/page-objects/
Applied to files:
apps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/omnichannel/omnichannel-transfer-to-another-agents.spec.tsapps/meteor/tests/e2e/message-actions.spec.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/page-objects/admin.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/federation/page-objects/channel.tsapps/meteor/tests/e2e/page-objects/omnichannel-triggers.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx} : Store commonly used locators in variables/constants for reuse
Applied to files:
apps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/page-objects/admin.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/federation/page-objects/channel.tsapps/meteor/tests/e2e/page-objects/omnichannel-triggers.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx,js,jsx} : Follow DRY by extracting reusable logic into helper functions or page objects
Applied to files:
apps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/page-objects/admin.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-departaments-ce.spec.tsapps/meteor/tests/e2e/prune-messages.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-priorities.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/page-objects/omnichannel-departments.tsapps/meteor/tests/e2e/page-objects/home-channel.ts
📚 Learning: 2025-09-23T19:22:59.217Z
Learnt from: dougfabris
Repo: RocketChat/Rocket.Chat PR: 36987
File: apps/meteor/tests/e2e/page-objects/fragments/room-toolbar.ts:10-20
Timestamp: 2025-09-23T19:22:59.217Z
Learning: In Playwright e2e tests, prefer stable selectors like data-qa-id attributes over localized text in getByRole() or getByText() calls to prevent test failures when UI language changes. Test translations separately by validating actual text content after ensuring UI interactions work with stable selectors.
Applied to files:
apps/meteor/tests/e2e/page-objects/home-omnichannel.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : All Playwright test files must be located under apps/meteor/tests/e2e/ and use the .spec.ts extension (e.g., login.spec.ts)
Applied to files:
apps/meteor/tests/e2e/page-objects/home-omnichannel.tsapps/meteor/tests/e2e/enforce-2FA.spec.tsapps/meteor/tests/e2e/account-profile.spec.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/delete-account.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/admin-users-custom-fields.spec.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.ts
📚 Learning: 2025-11-04T16:49:19.107Z
Learnt from: ricardogarim
Repo: RocketChat/Rocket.Chat PR: 37377
File: apps/meteor/ee/server/hooks/federation/index.ts:86-88
Timestamp: 2025-11-04T16:49:19.107Z
Learning: In Rocket.Chat's federation system (apps/meteor/ee/server/hooks/federation/), permission checks follow two distinct patterns: (1) User-initiated federation actions (creating rooms, adding users to federated rooms, joining from invites) should throw MeteorError to inform users they lack 'access-federation' permission. (2) Remote server-initiated federation events should silently skip/ignore when users lack permission. The beforeAddUserToRoom hook only executes for local user-initiated actions, so throwing an error there is correct. Remote federation events are handled separately by the federation Matrix package with silent skipping logic.
Applied to files:
apps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.ts
📚 Learning: 2025-10-28T16:53:42.761Z
Learnt from: ricardogarim
Repo: RocketChat/Rocket.Chat PR: 37205
File: ee/packages/federation-matrix/src/FederationMatrix.ts:296-301
Timestamp: 2025-10-28T16:53:42.761Z
Learning: In the Rocket.Chat federation-matrix integration (ee/packages/federation-matrix/), the createRoom method from rocket.chat/federation-sdk will support a 4-argument signature (userId, roomName, visibility, displayName) in newer versions. Code using this 4-argument call is forward-compatible with planned library updates and should not be flagged as an error.
Applied to files:
apps/meteor/tests/e2e/federation/tests/ce-version/ce.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx,js,jsx} : Write concise, technical TypeScript/JavaScript with accurate typing
Applied to files:
apps/meteor/tests/e2e/page-objects/fragments/toast-messages.tsapps/meteor/tests/e2e/page-objects/account.tsapps/meteor/tests/e2e/settings-int.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-otr.spec.tsapps/meteor/tests/e2e/page-objects/account-profile.tsapps/meteor/tests/e2e/page-objects/fragments/index.tsapps/meteor/tests/e2e/federation/tests/messaging/public.spec.tsapps/meteor/tests/e2e/omnichannel/omnichannel-send-transcript.spec.tsapps/meteor/tests/e2e/messaging.spec.tsapps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.tsapps/meteor/tests/e2e/federation/tests/messaging/private.spec.ts
🧬 Code graph analysis (9)
apps/meteor/tests/e2e/page-objects/home-omnichannel.ts (1)
apps/meteor/tests/e2e/page-objects/fragments/toast-messages.ts (1)
ToastMessages(5-29)
apps/meteor/tests/e2e/page-objects/account.ts (2)
packages/core-services/src/index.ts (1)
Account(161-161)apps/meteor/tests/e2e/page-objects/fragments/toast-messages.ts (1)
ToastMessages(5-29)
apps/meteor/tests/e2e/page-objects/admin.ts (1)
apps/meteor/tests/e2e/page-objects/fragments/toast-messages.ts (1)
ToastMessages(5-29)
apps/meteor/tests/e2e/page-objects/account-profile.ts (2)
packages/core-services/src/index.ts (1)
Account(161-161)apps/meteor/tests/e2e/page-objects/fragments/account-sidenav.ts (1)
AccountSidenav(3-13)
apps/meteor/tests/e2e/page-objects/omnichannel-priorities.ts (1)
apps/meteor/tests/e2e/page-objects/fragments/toast-messages.ts (1)
ToastMessages(5-29)
apps/meteor/tests/e2e/federation/page-objects/channel.ts (1)
apps/meteor/tests/e2e/page-objects/fragments/toast-messages.ts (1)
ToastMessages(5-29)
apps/meteor/tests/e2e/page-objects/omnichannel-triggers.ts (1)
apps/meteor/tests/e2e/page-objects/fragments/toast-messages.ts (1)
ToastMessages(5-29)
apps/meteor/tests/e2e/page-objects/omnichannel-departments.ts (1)
apps/meteor/tests/e2e/page-objects/fragments/toast-messages.ts (1)
ToastMessages(5-29)
apps/meteor/tests/e2e/page-objects/home-channel.ts (1)
apps/meteor/tests/e2e/page-objects/fragments/toast-messages.ts (1)
ToastMessages(5-29)
Proposed changes (including videos or screenshots)
Issue(s)
Steps to test or reproduce
Further comments
Summary by CodeRabbit