Skip to content

test: Reorg flextabs locators#38533

Open
dougfabris wants to merge 22 commits intodevelopfrom
test/reorg-flextabs
Open

test: Reorg flextabs locators#38533
dougfabris wants to merge 22 commits intodevelopfrom
test/reorg-flextabs

Conversation

@dougfabris
Copy link
Copy Markdown
Member

@dougfabris dougfabris commented Feb 6, 2026

Proposed changes (including videos or screenshots)

Issue(s)

Steps to test or reproduce

Further comments

CORE-1989

Summary by CodeRabbit

  • Accessibility

    • Improved semantic structure and label associations in user info display for screen readers.
    • Added accessible labels to channel add modal for better assistive technology support.
  • Refactor

    • Restructured end-to-end test page-object architecture for more reliable and maintainable tests.
    • Broadened a UI component to accept additional layout props for more flexible styling in the app.

@dionisio-bot
Copy link
Copy Markdown
Contributor

dionisio-bot bot commented Feb 6, 2026

Looks like this PR is not ready to merge, because of the following issues:

  • This PR is missing the 'stat: QA assured' label

Please fix the issues and try again

If you have any trouble, please check the PR guidelines

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Feb 6, 2026

⚠️ No Changeset found

Latest commit: 0d17a52

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@dougfabris dougfabris added this to the 8.2.0 milestone Feb 6, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Feb 6, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0b72b4c0-e8c7-43d5-acbf-d5d1b508c5ee

📥 Commits

Reviewing files that changed from the base of the PR and between fad7b5a and 0d17a52.

📒 Files selected for processing (2)
  • apps/meteor/tests/e2e/avatar-settings.ts
  • apps/meteor/tests/e2e/page-objects/fragments/modals/confirm-remove-modal.ts
✅ Files skipped from review due to trivial changes (1)
  • apps/meteor/tests/e2e/page-objects/fragments/modals/confirm-remove-modal.ts
📜 Recent review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: 📦 Build Packages
  • GitHub Check: cubic · AI code reviewer
  • GitHub Check: CodeQL-Build
  • GitHub Check: CodeQL-Build
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx,js}

📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)

**/*.{ts,tsx,js}: Write concise, technical TypeScript/JavaScript with accurate typing in Playwright tests
Avoid code comments in the implementation

Files:

  • apps/meteor/tests/e2e/avatar-settings.ts
apps/meteor/tests/e2e/**/*.{ts,spec.ts}

📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)

apps/meteor/tests/e2e/**/*.{ts,spec.ts}: Store commonly used locators in variables/constants for reuse
Follow Page Object Model pattern consistently in Playwright tests

Files:

  • apps/meteor/tests/e2e/avatar-settings.ts
🧠 Learnings (17)
📓 Common learnings
Learnt from: juliajforesti
Repo: RocketChat/Rocket.Chat PR: 38493
File: apps/meteor/tests/e2e/page-objects/fragments/home-content.ts:60-82
Timestamp: 2026-02-24T19:36:55.089Z
Learning: In RocketChat/Rocket.Chat e2e tests (apps/meteor/tests/e2e/page-objects/fragments/home-content.ts), thread message preview listitems do not have aria-roledescription="message", so lastThreadMessagePreview locator cannot be scoped to messageListItems (which filters for aria-roledescription="message"). It should remain scoped to page.getByRole('listitem') or mainMessageList.getByRole('listitem').
Learnt from: ggazzo
Repo: RocketChat/Rocket.Chat PR: 35995
File: apps/meteor/app/api/server/v1/rooms.ts:1107-1112
Timestamp: 2026-02-23T17:53:18.785Z
Learning: In Rocket.Chat PR reviews, maintain strict scope boundaries—when a PR is focused on a specific endpoint (e.g., rooms.favorite), avoid reviewing or suggesting changes to other endpoints that were incidentally refactored (e.g., rooms.invite) unless explicitly requested by maintainers.
Learnt from: juliajforesti
Repo: RocketChat/Rocket.Chat PR: 38493
File: apps/meteor/tests/e2e/omnichannel/omnichannel-send-pdf-transcript.spec.ts:66-67
Timestamp: 2026-02-24T19:22:52.984Z
Learning: In RocketChat/Rocket.Chat Playwright e2e tests, prefer using translated text and ARIA roles (getByRole, getByText, etc.) over data-qa locators. If translation values change, update the corresponding test locators accordingly. Never prefer data-qa locators.
Learnt from: smirk-dev
Repo: RocketChat/Rocket.Chat PR: 39625
File: apps/meteor/app/api/server/v1/push.ts:85-97
Timestamp: 2026-03-14T14:58:58.834Z
Learning: In RocketChat/Rocket.Chat, the `push.token` POST/DELETE endpoints in `apps/meteor/app/api/server/v1/push.ts` were already migrated to the chained router API pattern on `develop` prior to PR `#39625`. `cleanTokenResult` (which strips `authToken` and returns `PushTokenResult`) and `isPushTokenPOSTProps`/`isPushTokenDELETEProps` validators already exist on `develop`. PR `#39625` only migrates `push.get` and `push.info` to the chained pattern. Do not flag `cleanTokenResult` or `PushTokenResult` as newly introduced behavior-breaking changes when reviewing this PR.
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/page-objects/**/*.ts : Utilize existing page objects pattern from `apps/meteor/tests/e2e/page-objects/`
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,spec.ts} : Follow Page Object Model pattern consistently in Playwright tests
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Utilize Playwright fixtures (`test`, `page`, `expect`) for consistency in test files
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,spec.ts} : Store commonly used locators in variables/constants for reuse
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Use `expect` matchers for assertions (`toEqual`, `toContain`, `toBeTruthy`, `toHaveLength`, etc.) instead of `assert` statements in Playwright tests

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Prefer web-first assertions (`toBeVisible`, `toHaveText`, etc.) in Playwright tests

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Utilize Playwright fixtures (`test`, `page`, `expect`) for consistency in test files

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,spec.ts} : Follow Page Object Model pattern consistently in Playwright tests

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2026-02-24T19:36:55.089Z
Learnt from: juliajforesti
Repo: RocketChat/Rocket.Chat PR: 38493
File: apps/meteor/tests/e2e/page-objects/fragments/home-content.ts:60-82
Timestamp: 2026-02-24T19:36:55.089Z
Learning: In RocketChat/Rocket.Chat e2e tests (apps/meteor/tests/e2e/page-objects/fragments/home-content.ts), thread message preview listitems do not have aria-roledescription="message", so lastThreadMessagePreview locator cannot be scoped to messageListItems (which filters for aria-roledescription="message"). It should remain scoped to page.getByRole('listitem') or mainMessageList.getByRole('listitem').

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2025-12-16T17:29:45.163Z
Learnt from: gabriellsh
Repo: RocketChat/Rocket.Chat PR: 37834
File: apps/meteor/tests/e2e/page-objects/fragments/admin-flextab-emoji.ts:12-22
Timestamp: 2025-12-16T17:29:45.163Z
Learning: In page object files under `apps/meteor/tests/e2e/page-objects/`, always import `expect` from `../../utils/test` (Playwright's async expect), not from Jest. Jest's `expect` has a synchronous signature and will cause TypeScript errors when used with web-first assertions like `toBeVisible()`.

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2026-03-20T13:51:23.302Z
Learnt from: ggazzo
Repo: RocketChat/Rocket.Chat PR: 39553
File: apps/meteor/app/integrations/server/methods/incoming/updateIncomingIntegration.ts:179-181
Timestamp: 2026-03-20T13:51:23.302Z
Learning: In `apps/meteor/app/integrations/server/methods/incoming/updateIncomingIntegration.ts`, the truthiness guards `...(integration.avatar && { avatar })`, `...(integration.emoji && { emoji })`, `...(integration.alias && { alias })`, and `...(integration.script && { script })` in the `$set` payload of `updateIncomingIntegration` are intentional. Empty-string values for these fields should NOT overwrite the stored value — only truthy values are persisted. Do not flag these as bugs preventing explicit clears.

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/page-objects/**/*.ts : Utilize existing page objects pattern from `apps/meteor/tests/e2e/page-objects/`

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Maintain test isolation between test cases in Playwright tests

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Avoid using `page.locator()` in Playwright tests - always prefer semantic locators such as `page.getByRole()`, `page.getByLabel()`, `page.getByText()`, or `page.getByTitle()`

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Implement proper wait strategies for dynamic content in Playwright tests

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Use `page.waitFor()` with specific conditions instead of hardcoded timeouts in Playwright tests

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.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/avatar-settings.ts
📚 Learning: 2026-02-24T19:39:42.247Z
Learnt from: juliajforesti
Repo: RocketChat/Rocket.Chat PR: 38493
File: apps/meteor/tests/e2e/page-objects/fragments/message.ts:7-7
Timestamp: 2026-02-24T19:39:42.247Z
Learning: In RocketChat e2e tests, avoid using data-qa attributes to locate elements. Prefer semantic locators such as getByRole, getByLabel, getByText, getByTitle and ARIA-based selectors. Apply this rule to all TypeScript files under apps/meteor/tests/e2e to improve test reliability, accessibility, and maintainability.

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2026-02-26T19:25:44.063Z
Learnt from: gabriellsh
Repo: RocketChat/Rocket.Chat PR: 38778
File: packages/ui-voip/src/providers/useMediaSession.ts:192-192
Timestamp: 2026-02-26T19:25:44.063Z
Learning: In the Rocket.Chat repository, do not reference Biome lint rules in code review feedback. Biome is not used even if biome.json exists; only reference Biome rules if there is explicit, project-wide usage documented. For TypeScript files, review lint implications without Biome guidance unless the project enables Biome rules.

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
📚 Learning: 2026-02-26T19:25:44.063Z
Learnt from: gabriellsh
Repo: RocketChat/Rocket.Chat PR: 38778
File: packages/ui-voip/src/providers/useMediaSession.ts:192-192
Timestamp: 2026-02-26T19:25:44.063Z
Learning: In this repository (RocketChat/Rocket.Chat), Biome lint rules are not used even if a biome.json exists. When reviewing TypeScript files (e.g., packages/ui-voip/src/providers/useMediaSession.ts), ensure lint suggestions do not reference Biome-specific rules. Rely on general ESLint/TypeScript lint rules and project conventions instead.

Applied to files:

  • apps/meteor/tests/e2e/avatar-settings.ts
🔇 Additional comments (2)
apps/meteor/tests/e2e/avatar-settings.ts (2)

89-89: Good move to a web-first attribute assertion.

Line 89 now uses an awaited toHaveAttribute, which is retryable and more stable for dynamic UI checks.

As per coding guidelines: “Prefer web-first assertions (toBeVisible, toHaveText, etc.) in Playwright tests”.


94-94: Nice alignment with the updated UserCard page object.

Line 94 correctly asserts on poHomeChannel.userCard.imgUserCard, keeping the test consistent with the new page-object structure and improving maintainability.


Walkthrough

Reorganized e2e page-object flextabs into a new flextabs/ namespace with many new fragments and modal helpers, updated Home* page objects to consume them, adjusted numerous tests to the new APIs, refactored RoomToolbar/menu flows, added UserCard and modal classes, and small accessibility/component tweaks in the app UI.

Changes

Cohort / File(s) Summary
Flextabs — New fragments
apps/meteor/tests/e2e/page-objects/fragments/flextabs/* (e.g. admin-edit-room-flextab.ts, channels-flextab.ts, edit-room-flextab.ts, members-flextab.ts, notification-preferences-flextab.ts, prune-messages-flextab.ts, room-info-flextab.ts, threads-flextab.ts, user-info-flextab.ts, export-messages-flextab.ts, files-flextab.ts)
Added many specialized FlexTab fragments (channels, members, edit room/team, room/team info, threads, prune, notification preferences, export/files) and renamed/standardized ExportMessages → ExportMessagesFlexTab.
Flextabs — infrastructure & re-exports
apps/meteor/tests/e2e/page-objects/fragments/flextabs/index.ts, .../flextab.ts
Introduced a flextabs barrel export and adjusted base FlexTab imports/documentation and relative import paths for consistency.
New modal & helper fragments
apps/meteor/tests/e2e/page-objects/fragments/modals/*, apps/meteor/tests/e2e/page-objects/fragments/confirm-remove-modal.ts, apps/meteor/tests/e2e/page-objects/fragments/modals/index.ts, apps/meteor/tests/e2e/page-objects/fragments/user-card.ts
Added ConfirmDeleteRoom/Team, ConfirmRemoveModal, ConfirmPrune modal helpers and a new UserCard fragment with openUserInfo() and avatar locator.
Removed legacy HomeFlextab fragments
apps/meteor/tests/e2e/page-objects/fragments/home-flextab.ts, home-flextab-*.ts, edit-room-flextab.ts, room-info-flextab.ts
Deleted older HomeFlextab/home-* fragment implementations; functionality migrated into new flextabs modules.
Home page objects & composition
apps/meteor/tests/e2e/page-objects/home-channel.ts, home-discussion.ts, home-team.ts, home-omnichannel.ts, encrypted-room.ts
HomeChannel now exposes tabs getter composed of new FlexTab fragments and userCard; HomeDiscussion extends HomeChannel; HomeTeam adds headerToolbar; EncryptedRoomPage uses EncryptedRoomToolbar.
Toolbar refactor
apps/meteor/tests/e2e/page-objects/fragments/toolbar.ts
Refactored RoomToolbar to use menu.getMenuItem(...), added menu item getters for export/notifications/E2EE, added openMoreOptions(), and introduced TeamToolbar and EncryptedRoomToolbar subclasses.
Page-object import updates
apps/meteor/tests/e2e/page-objects/*, apps/meteor/tests/e2e/page-objects/omnichannel/*, admin-*.ts
Updated many imports to point to fragments/flextabs and adjusted Admin/Omnichannel page objects to new fragment names (e.g., EditAdminRoomFlexTab).
E2E tests — API migrations
apps/meteor/tests/e2e/*.spec.ts and subfolders (e.g., channel-management.spec.ts, e2ee-*, export-messages.spec.ts, feature-preview.spec.ts, prune-messages.spec.ts, retention-policy.spec.ts, team-management.spec.ts, etc.)
Updated ~50 e2e specs to use new page-object APIs: poHomeChannel.roomToolbar.openMoreOptions() and menu items, poHomeChannel.tabs.* flextabs, poHomeTeam flows, UserCard.openUserInfo(), swap to ExportMessagesFlexTab or poHomeChannel.tabs.exportMessages, and label-based checkbox interactions.
Page-object deletions & consolidations
apps/meteor/tests/e2e/page-objects/fragments/index.ts
Consolidated fragment exports to re-export flextabs and removed older direct flextab re-exports.
App accessibility / UI component tweaks
apps/meteor/client/components/UserInfo/UserInfo.tsx, apps/meteor/client/views/teams/.../AddExistingModal/AddExistingModal.tsx, packages/ui-client/src/components/InfoPanel/InfoPanelField.tsx
Added stable useId() for username label/aria, changed username rendering to dt/dd structure and removed a data-qa attribute; added aria-label to AddExistingModal's Modal; expanded InfoPanelField props to forward Box props.
Misc small page-object path fixes
assorted files under apps/meteor/tests/e2e/page-objects/...
Adjusted many relative import paths to the new flextabs layout and updated a few type/constructor signatures (e.g., EncryptedRoomPage constructor, AdminRooms.editRoom typing).

Sequence Diagram(s)

sequenceDiagram
    participant Test as E2E Test
    participant Home as HomeChannel/HomeTeam
    participant RoomToolbar as RoomToolbar
    participant MenuMore as MenuMore
    participant Dialog as UI Dialog

    Test->>Home: open room/team UI
    Home->>RoomToolbar: get toolbar
    Test->>RoomToolbar: openMoreOptions()
    RoomToolbar->>MenuMore: click btnMoreOptions
    MenuMore->>Dialog: show menu
    Test->>MenuMore: getMenuItem(itemName)
    MenuMore->>Dialog: find menu item by label
    Test->>Dialog: click menu item (e.g., Export / Enable E2EE / Notifications)
    Dialog->>Dialog: perform action / open FlexTab dialog
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 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 PR title 'test: Reorg flextabs locators' accurately reflects the main purpose of the changeset, which is reorganizing and refactoring e2e test flextab page objects and locators.
Linked Issues check ✅ Passed All code changes align with CORE-1989 objectives: flextab page objects restructured with centralized locator organization, RoomInfoFlexTab refactored to use MenuMore, RoomToolbar updated with MenuOptions, EditRoomFlexTab simplified with EditTeamFlexTab added, and E2EE tests fixed to use menu items.
Out of Scope Changes check ✅ Passed All changes are within scope of CORE-1989 flextab reorganization. The single production change (InfoPanelField.tsx) is a necessary refactor to support definition-list-style username rendering in UserInfo component, which enables the accessibility improvements tested by the reorganized e2e tests.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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.

❤️ Share

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 6, 2026

📦 Docker Image Size Report

➡️ Changes

Service Current Baseline Change Percent
sum of all images 0B 0B 0B
account-service 0B 0B 0B
authorization-service 0B 0B 0B
ddp-streamer-service 0B 0B 0B
omnichannel-transcript-service 0B 0B 0B
presence-service 0B 0B 0B
queue-worker-service 0B 0B 0B
rocketchat 0B 0B 0B

📊 Historical Trend

---
config:
  theme: "dark"
  xyChart:
    width: 900
    height: 400
---
xychart
  title "Image Size Evolution by Service (Last 30 Days + This PR)"
  x-axis ["11/18 22:53", "11/19 23:02", "11/21 16:49", "11/24 17:34", "11/27 22:32", "11/28 19:05", "12/01 23:01", "12/02 21:57", "12/03 21:00", "12/04 18:17", "12/05 21:56", "12/08 20:15", "12/09 22:17", "12/10 23:26", "12/11 21:56", "12/12 22:45", "12/13 01:34", "12/15 22:31", "12/16 22:18", "12/17 21:04", "12/18 23:12", "12/19 23:27", "12/20 21:03", "12/22 18:54", "12/23 16:16", "12/24 19:38", "12/25 17:51", "12/26 13:18", "12/29 19:01", "12/30 20:52", "02/10 00:04 (PR)"]
  y-axis "Size (GB)" 0 --> 0.5
  line "account-service" [0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.00]
  line "authorization-service" [0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.00]
  line "ddp-streamer-service" [0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.00]
  line "omnichannel-transcript-service" [0.14, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.00]
  line "presence-service" [0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.00]
  line "queue-worker-service" [0.14, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.00]
  line "rocketchat" [0.35, 0.35, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.00]
Loading

Statistics (last 30 days):

  • 📊 Average: 1.5GiB
  • ⬇️ Minimum: 1.4GiB
  • ⬆️ Maximum: 1.6GiB
  • 🎯 Current PR: 0B
ℹ️ About this report

This report compares Docker image sizes from this build against the develop baseline.

  • Tag: pr-38533
  • Baseline: develop
  • Timestamp: 2026-02-10 00:04:03 UTC
  • Historical data points: 30

Updated: Tue, 10 Feb 2026 00:04:04 GMT

@alfredodelfabro alfredodelfabro removed this from the 8.2.0 milestone Feb 20, 2026
@codecov
Copy link
Copy Markdown

codecov bot commented Feb 20, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 70.53%. Comparing base (8ebf44b) to head (0d17a52).

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##           develop   #38533      +/-   ##
===========================================
- Coverage    70.57%   70.53%   -0.04%     
===========================================
  Files         3270     3270              
  Lines       116766   116788      +22     
  Branches     21091    21128      +37     
===========================================
- Hits         82409    82381      -28     
- Misses       32304    32355      +51     
+ Partials      2053     2052       -1     
Flag Coverage Δ
e2e 60.43% <100.00%> (-0.05%) ⬇️
e2e-api 48.12% <ø> (-0.95%) ⬇️
unit 71.01% <100.00%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@dougfabris dougfabris added this to the 8.3.0 milestone Feb 23, 2026
@dougfabris dougfabris added the stat: QA assured Means it has been tested and approved by a company insider label Feb 24, 2026
@alfredodelfabro alfredodelfabro removed this from the 8.3.0 milestone Mar 17, 2026
@dougfabris dougfabris added this to the 8.4.0 milestone Mar 19, 2026
@dougfabris dougfabris removed the stat: QA assured Means it has been tested and approved by a company insider label Apr 2, 2026
@dougfabris dougfabris marked this pull request as ready for review April 5, 2026 21:49
@dougfabris dougfabris requested a review from a team as a code owner April 5, 2026 21:49
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

No issues found across 65 files

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 9

🧹 Nitpick comments (5)
apps/meteor/client/views/teams/contextualBar/channels/AddExistingModal/AddExistingModal.tsx (1)

32-32: Consider removing or addressing the TODO comment.

The TODO comment violates the coding guideline to avoid code comments in the implementation. Either address this by using GenericModal now, or track it in an issue and remove the comment.

As per coding guidelines: "Avoid code comments in the implementation".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@apps/meteor/client/views/teams/contextualBar/channels/AddExistingModal/AddExistingModal.tsx`
at line 32, Remove or resolve the TODO comment in AddExistingModal: either
refactor the component to use GenericModal instead of Modal (update imports and
replace Modal usage within the AddExistingModal component) or create a tracked
issue and remove the inline TODO; if choosing the issue route, add the issue ID
in a short comment and delete the TODO. Ensure the change references the
AddExistingModal component and the Modal/GenericModal symbols so reviewers can
verify the replacement or the created issue.
apps/meteor/tests/e2e/page-objects/fragments/flextabs/flextab.ts (1)

6-8: Consider removing the JSDoc comment.

While this documents a design decision, it could be seen as violating the guideline to avoid code comments. An alternative is to track this refactoring task in an issue.

As per coding guidelines: "Avoid code comments in the implementation".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/meteor/tests/e2e/page-objects/fragments/flextabs/flextab.ts` around
lines 6 - 8, Remove the JSDoc comment above the public property "root" in
flextab.ts (the comment that explains why root is public) and replace that
in-repo explanation with a tracked issue instead; simply delete the comment
block so the code no longer contains the implementation-level justification, and
create/link an issue to track the refactor of making root protected in the
future.
apps/meteor/tests/e2e/page-objects/fragments/modals/confirm-remove-modal.ts (1)

5-8: Constructor can be simplified.

The constructor only passes root to the parent class without additional logic, making it redundant in TypeScript.

♻️ Proposed simplification
 export class ConfirmRemoveModal extends Modal {
-	constructor(root: Locator) {
-		super(root);
-	}
-
 	get btnRemove() {

Note: This requires the parent Modal class to have a public constructor that accepts Locator.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/meteor/tests/e2e/page-objects/fragments/modals/confirm-remove-modal.ts`
around lines 5 - 8, The ConfirmRemoveModal constructor is redundant because it
only forwards `root` to the parent; remove the constructor from the
`ConfirmRemoveModal` class so it inherits `Modal`'s constructor directly. Ensure
the parent `Modal` class has a public constructor signature that accepts a
`Locator` (update `Modal` to export a public constructor if needed) so instances
of `ConfirmRemoveModal` continue to be constructible with a `Locator`.
apps/meteor/tests/e2e/page-objects/fragments/flextabs/admin-edit-room-flextab.ts (1)

10-47: Prefer semantic role/label locators in this flextab page object.

Line 10-Line 47 currently rely on CSS/text-engine selectors (locator('input[...]'), label >> text=...); migrating to getByRole/getByLabel would make these locators more resilient to markup refactors.

Based on learnings: "In RocketChat e2e tests, avoid using data-qa attributes to locate elements. Prefer semantic locators such as getByRole, getByLabel, getByText, getByTitle and ARIA-based selectors. Apply this rule to all TypeScript files under apps/meteor/tests/e2e to improve test reliability, accessibility, and maintainability."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@apps/meteor/tests/e2e/page-objects/fragments/flextabs/admin-edit-room-flextab.ts`
around lines 10 - 47, The current getters (roomNameInput, privateLabel,
privateInput, roomOwnerInput, archivedLabel, archivedInput, favoriteLabel,
favoriteInput, defaultLabel, defaultInput) use CSS/text selectors; replace them
with semantic Playwright locators like getByLabel/getByRole/getByText/getByTitle
or ARIA-based selectors (e.g., use getByLabel for inputs by their visible label,
getByRole('checkbox'/'textbox'/'switch') with name for inputs, and getByText for
labels) to make selectors resilient—update each getter to use the corresponding
semantic locator instead of locator('input[...]') or 'label >> text=...'; ensure
you do not switch to data-qa attributes.
apps/meteor/tests/e2e/page-objects/home-team.ts (1)

14-20: Consider caching tabs instances.

The tabs getter creates new TeamInfoFlexTab and EditTeamFlexTab instances on every access. While this follows the existing pattern in the codebase and works correctly, caching these instances (similar to other properties like headerToolbar) would be slightly more efficient.

♻️ Optional: Cache tabs instances
 export class HomeTeam extends HomeChannel {
 	readonly headerToolbar: TeamToolbar;
+	private readonly _room: TeamInfoFlexTab;
+	private readonly _editRoom: EditTeamFlexTab;

 	constructor(page: Page) {
 		super(page);
 		this.headerToolbar = new TeamToolbar(page);
+		this._room = new TeamInfoFlexTab(page);
+		this._editRoom = new EditTeamFlexTab(page);
 	}

 	override get tabs() {
 		return {
 			...super.tabs,
-			room: new TeamInfoFlexTab(this.page),
-			editRoom: new EditTeamFlexTab(this.page),
+			room: this._room,
+			editRoom: this._editRoom,
 		};
 	}
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/meteor/tests/e2e/page-objects/home-team.ts` around lines 14 - 20, The
tabs getter currently instantiates new TeamInfoFlexTab and EditTeamFlexTab
objects on every access (override get tabs), which is inefficient; change it to
cache those instances on the class (similar to headerToolbar) by creating
private properties (e.g., _tabs or _teamInfoTab/_editTeamTab) and return the
cached objects from the tabs getter, instantiating them only if the cache is
empty; ensure you still spread super.tabs when building the returned object.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/meteor/tests/e2e/avatar-settings.ts`:
- Line 94: The test is calling the async DOM method getAttribute('src') without
awaiting and asserting its return directly; replace that with a Playwright
web-first assertion by awaiting expect on the image locator
(poHomeChannel.userCard.imgUserCard) and using toHaveAttribute('src', avatarUrl)
so the assertion is retried and stable; update the assertion from
expect(poHomeChannel.userCard.imgUserCard.getAttribute('src')).toBe(avatarUrl)
to an awaited web-first form (await
expect(poHomeChannel.userCard.imgUserCard).toHaveAttribute('src', avatarUrl)).

In `@apps/meteor/tests/e2e/page-objects/fragments/flextabs/members-flextab.ts`:
- Around line 123-125: The showAllUsers() helper is not idempotent because it
always queries the trigger by its current label ('Online') and fails once 'All'
is selected; update showAllUsers() to short-circuit when 'All' is already
selected or to target the filter control independent of its displayed value:
first inspect the listbox/current selection (e.g., read the selected option text
or an aria-selected attribute on the listbox) and return immediately if it
equals 'All', otherwise open the filter control (locate the toggle by a stable
selector instead of name, or locate the listbox container and click its toggle)
and then call listbox.selectOption('All'); ensure you update references to
root.getByRole('button', { name: 'Online' }) and listbox.selectOption('All')
accordingly so the helper works whether the current value is 'Online' or 'All'.

In
`@apps/meteor/tests/e2e/page-objects/fragments/flextabs/notification-preferences-flextab.ts`:
- Around line 15-20: The XPath locators in the methods are bypassing this.root
because they start with '//' (absolute); change them to relative XPath by using
'.//' so they stay scoped to the notification-preferences dialog—update the
locator in the method that returns
this.root.locator(`//div[`@id`="${device}Alert"]`) and in async
selectDropdownById(text: string) which uses
this.root.locator(`//div[`@id`="${text}"]`) to use './/div[`@id`="..."]' instead.

In `@apps/meteor/tests/e2e/page-objects/fragments/flextabs/threads-flextab.ts`:
- Around line 6-8: The constructor for ThreadsFlexTab currently binds to a
generic dialog via super(page.getByRole('dialog')), which can attach to the
wrong dialog; update the locator to scope by name by calling
page.getByRole('dialog', { name: 'Threads' }) (i.e., change the super(...) call
in the ThreadsFlexTab constructor) so it follows the established pattern used by
FilesFlexTab, SearchMessagesFlexTab, and UserInfoFlexTab and prevents flakiness
when multiple dialogs are present.
- Around line 14-16: Update the lastThreadMessage getter to avoid data-qa-type
selectors: within the existing lastThreadMessage accessor (which uses
listThreadMessages), replace the chain that locates '[data-qa-type="message"]'
with listThreadMessages.getByRole('listitem').last() and then access the message
body using .locator('.rcx-message-body') so it follows the semantic locator
pattern used in home-content.ts.

In `@apps/meteor/tests/e2e/page-objects/fragments/modals/confirm-delete-modal.ts`:
- Around line 21-23: The dialog locator in the ConfirmDeleteRoomModal
constructor (super(page.getByRole('dialog', { name: 'Delete' }))) is performing
substring matching and can collide with other dialogs; update the locator to use
exact matching by adding exact: true to the options object so the constructor
targets only the dialog with the exact name "Delete".

In `@apps/meteor/tests/e2e/page-objects/fragments/modals/confirm-remove-modal.ts`:
- Line 1: Change the Locator import in this fragment to use the project's common
Playwright package: replace the current import of Locator from 'playwright-core'
with an import from '@playwright/test' so the file's top-level import (the
Locator type used in this module) matches other modal page-object files.

In `@apps/meteor/tests/e2e/page-objects/fragments/toolbar.ts`:
- Around line 127-138: The openTeamMembers method clicks menuItemTeamMembers
without opening the overflow menu first; update openTeamMembers in TeamToolbar
to open the menu (e.g., await this.menu.open()) before awaiting
this.menuItemTeamMembers.click() so the menu item is visible and clickable —
ensure you use the existing menu accessor and keep the method async/await flow
intact.

In `@apps/meteor/tests/e2e/prune-messages.spec.ts`:
- Around line 64-65: The test is asserting checkboxes via label element locators
(pruneMessages.labelFilesOnly and pruneMessages.labelDoNotPrunePinned), but
Playwright's .toBeChecked() only works on input elements; change those locators
to semantic label-to-input resolvers using getByLabel with the exact label text
(e.g., getByLabel('Only remove the attached files, keep messages') and
getByLabel('Do not prune pinned messages')) so the assertions target the actual
checkbox inputs and not the label elements, then update the assertions to use
those new locators.

---

Nitpick comments:
In
`@apps/meteor/client/views/teams/contextualBar/channels/AddExistingModal/AddExistingModal.tsx`:
- Line 32: Remove or resolve the TODO comment in AddExistingModal: either
refactor the component to use GenericModal instead of Modal (update imports and
replace Modal usage within the AddExistingModal component) or create a tracked
issue and remove the inline TODO; if choosing the issue route, add the issue ID
in a short comment and delete the TODO. Ensure the change references the
AddExistingModal component and the Modal/GenericModal symbols so reviewers can
verify the replacement or the created issue.

In
`@apps/meteor/tests/e2e/page-objects/fragments/flextabs/admin-edit-room-flextab.ts`:
- Around line 10-47: The current getters (roomNameInput, privateLabel,
privateInput, roomOwnerInput, archivedLabel, archivedInput, favoriteLabel,
favoriteInput, defaultLabel, defaultInput) use CSS/text selectors; replace them
with semantic Playwright locators like getByLabel/getByRole/getByText/getByTitle
or ARIA-based selectors (e.g., use getByLabel for inputs by their visible label,
getByRole('checkbox'/'textbox'/'switch') with name for inputs, and getByText for
labels) to make selectors resilient—update each getter to use the corresponding
semantic locator instead of locator('input[...]') or 'label >> text=...'; ensure
you do not switch to data-qa attributes.

In `@apps/meteor/tests/e2e/page-objects/fragments/flextabs/flextab.ts`:
- Around line 6-8: Remove the JSDoc comment above the public property "root" in
flextab.ts (the comment that explains why root is public) and replace that
in-repo explanation with a tracked issue instead; simply delete the comment
block so the code no longer contains the implementation-level justification, and
create/link an issue to track the refactor of making root protected in the
future.

In `@apps/meteor/tests/e2e/page-objects/fragments/modals/confirm-remove-modal.ts`:
- Around line 5-8: The ConfirmRemoveModal constructor is redundant because it
only forwards `root` to the parent; remove the constructor from the
`ConfirmRemoveModal` class so it inherits `Modal`'s constructor directly. Ensure
the parent `Modal` class has a public constructor signature that accepts a
`Locator` (update `Modal` to export a public constructor if needed) so instances
of `ConfirmRemoveModal` continue to be constructible with a `Locator`.

In `@apps/meteor/tests/e2e/page-objects/home-team.ts`:
- Around line 14-20: The tabs getter currently instantiates new TeamInfoFlexTab
and EditTeamFlexTab objects on every access (override get tabs), which is
inefficient; change it to cache those instances on the class (similar to
headerToolbar) by creating private properties (e.g., _tabs or
_teamInfoTab/_editTeamTab) and return the cached objects from the tabs getter,
instantiating them only if the cache is empty; ensure you still spread
super.tabs when building the returned object.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3bd3b19b-d644-496b-a04b-d182066ee96f

📥 Commits

Reviewing files that changed from the base of the PR and between 8ebf44b and fad7b5a.

⛔ Files ignored due to path filters (1)
  • apps/meteor/client/components/UserInfo/__snapshots__/UserInfo.spec.tsx.snap is excluded by !**/*.snap
📒 Files selected for processing (64)
  • apps/meteor/client/components/UserInfo/UserInfo.tsx
  • apps/meteor/client/views/teams/contextualBar/channels/AddExistingModal/AddExistingModal.tsx
  • apps/meteor/tests/e2e/account-profile.spec.ts
  • apps/meteor/tests/e2e/avatar-settings.ts
  • apps/meteor/tests/e2e/channel-management.spec.ts
  • apps/meteor/tests/e2e/e2e-encryption/e2ee-encrypted-channels.spec.ts
  • apps/meteor/tests/e2e/e2e-encryption/e2ee-pdf-export.spec.ts
  • apps/meteor/tests/e2e/export-messages.spec.ts
  • apps/meteor/tests/e2e/feature-preview.spec.ts
  • apps/meteor/tests/e2e/message-actions.spec.ts
  • apps/meteor/tests/e2e/page-objects/admin-device-management.ts
  • apps/meteor/tests/e2e/page-objects/admin-emojis.ts
  • apps/meteor/tests/e2e/page-objects/admin-rooms.ts
  • apps/meteor/tests/e2e/page-objects/encrypted-room.ts
  • apps/meteor/tests/e2e/page-objects/fragments/edit-room-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/admin-edit-room-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/admin-flextab-emoji.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/channels-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/device-info-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/edit-contact-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/edit-room-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/edit-user-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/export-messages-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/files-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/index.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/members-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/notification-preferences-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/prune-messages-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/room-info-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/search-messages-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/threads-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/flextabs/user-info-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/home-content.ts
  • apps/meteor/tests/e2e/page-objects/fragments/home-flextab-channels.ts
  • apps/meteor/tests/e2e/page-objects/fragments/home-flextab-members.ts
  • apps/meteor/tests/e2e/page-objects/fragments/home-flextab-pruneMessages.ts
  • apps/meteor/tests/e2e/page-objects/fragments/home-flextab-room.ts
  • apps/meteor/tests/e2e/page-objects/fragments/home-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/index.ts
  • apps/meteor/tests/e2e/page-objects/fragments/modals/confirm-delete-modal.ts
  • apps/meteor/tests/e2e/page-objects/fragments/modals/confirm-remove-modal.ts
  • apps/meteor/tests/e2e/page-objects/fragments/modals/index.ts
  • apps/meteor/tests/e2e/page-objects/fragments/room-info-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/toolbar.ts
  • apps/meteor/tests/e2e/page-objects/fragments/user-card.ts
  • apps/meteor/tests/e2e/page-objects/home-channel.ts
  • apps/meteor/tests/e2e/page-objects/home-discussion.ts
  • apps/meteor/tests/e2e/page-objects/home-omnichannel.ts
  • apps/meteor/tests/e2e/page-objects/home-team.ts
  • apps/meteor/tests/e2e/page-objects/omnichannel/omnichannel-agents.ts
  • apps/meteor/tests/e2e/page-objects/omnichannel/omnichannel-contact-center/omnichannel-contact-center-chats.ts
  • apps/meteor/tests/e2e/page-objects/omnichannel/omnichannel-contact-center/omnichannel-contact-center-contacts.ts
  • apps/meteor/tests/e2e/page-objects/omnichannel/omnichannel-custom-fields.ts
  • apps/meteor/tests/e2e/page-objects/omnichannel/omnichannel-info.ts
  • apps/meteor/tests/e2e/page-objects/omnichannel/omnichannel-priorities.ts
  • apps/meteor/tests/e2e/page-objects/omnichannel/omnichannel-sla-policies.ts
  • apps/meteor/tests/e2e/page-objects/omnichannel/omnichannel-tags.ts
  • apps/meteor/tests/e2e/page-objects/omnichannel/omnichannel-triggers.ts
  • apps/meteor/tests/e2e/page-objects/omnichannel/omnichannel-units.ts
  • apps/meteor/tests/e2e/prune-messages.spec.ts
  • apps/meteor/tests/e2e/retention-policy.spec.ts
  • apps/meteor/tests/e2e/team-management.spec.ts
  • packages/ui-client/src/components/InfoPanel/InfoPanelField.tsx
💤 Files with no reviewable changes (8)
  • apps/meteor/tests/e2e/page-objects/fragments/home-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/home-content.ts
  • apps/meteor/tests/e2e/page-objects/fragments/home-flextab-pruneMessages.ts
  • apps/meteor/tests/e2e/page-objects/fragments/home-flextab-channels.ts
  • apps/meteor/tests/e2e/page-objects/fragments/home-flextab-room.ts
  • apps/meteor/tests/e2e/page-objects/fragments/edit-room-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/room-info-flextab.ts
  • apps/meteor/tests/e2e/page-objects/fragments/home-flextab-members.ts

Copy link
Copy Markdown
Contributor

@aleksandernsilva aleksandernsilva left a comment

Choose a reason for hiding this comment

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

Just a few nitpicks and questions.

get btnCreate(): Locator {
return this.page.locator('role=dialog >> role=group >> role=button[name="Create"]');
super(page);
this.tabs.room = new RoomInfoFlexTab(page.getByRole('dialog', { name: 'Discussion Info' }), page);
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.

Creating an override tabs getter seems like a better way of doing this. You are already following the pattern in the HomeTeam class.

this.contacts = new OmnichannelContactCenterContacts(page);
this.chats = new OmnichannelContactCenterChats(page);
this.roomInfo = new OmnichannelRoomInfoFlexTab(page);
this.roomInfo = new OmnichannelRoomInfoFlexTab(page.getByRole('dialog', { name: 'Room Information' }), page);
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.

Could we movepage.getByRole('dialog', { name: 'Room Information' }) to the OmnichannelRoomInfoFlexTab class constructor, like I see in similar flextab classes?

return this.menu.root.getByRole('menuitem', { name: 'Delete' });
}

get userName(): Locator {
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.

Suggested change
get userName(): Locator {
get username(): Locator {

this.threadComposer = new ThreadComposer(page);
}

get tabs() {
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.

is the private _tabs + getter future-proofing? Wouldn't readonly tabs achieve the same goal?


export class ThreadsFlexTab extends FlexTab {
constructor(page: Page) {
super(page.getByRole('dialog'));
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.

Why not name it?

this.confirmRemoveModal = new ConfirmRemoveModal(page.getByRole('dialog', { name: 'Are you sure?' }));
this.confirmDeleteModal = new ConfirmDeleteRoomModal(page);
this.addExistingChannelModal = new AddExistingChannelModal(page);
this.listbox = new Listbox(page);
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.

Does it make sense to restrict the listbox scope to the dialog at least? since the listbox doesn't have label for now

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.

3 participants