Commit Graph
21904 Commits
Author SHA1 Message Date
Nick Misasi 0263262ef4 MM-66577 Preserve locale in rewrite prompt (#35013)
* Preserve rewrite locale in prompt

* Add license header to rewrite tests
2026-02-03 11:32:03 -05:00
Nick Misasi aa5d51131d Register product icon change (#34883)
* Adjust registerProduct to accept generic icon

* Undo unnecessary changes

* Anotha one

* Fix linting errors in product menu tests

- Fix jsx-quotes to use single quotes instead of double quotes
- Fix react/jsx-max-props-per-line by placing props on separate lines
- Fix react/jsx-no-literals by wrapping literal strings in JSX expression containers
- Fix react/jsx-wrap-multilines by wrapping multiline JSX in parentheses
- Fix react/jsx-closing-bracket-location for proper bracket alignment

* don't use snapshots or enzyme

* Fix pipelines?
2026-02-03 10:45:02 -05:00
f3c6602725 Allow building the server on FreeBSD (#25838)
* Allow building the server on FreeBSD

* Fix merge

---------

Co-authored-by: Erwan Martin <erwan@pepper.com>
Co-authored-by: Alejandro García Montoro <alejandro.garciamontoro@gmail.com>
2026-02-03 14:05:16 +00:00
Ben Cooke 36479bd721 Configurable workers and move sweeper job to job infra (#35007) 2026-02-02 15:52:42 -05:00
Matthew Birtchandyasserfaraazkhan 95ba2db4f0 [MM-66862] Channel Info RHS: add ability to rename and open channel settings (#34708)
* Channel Info RHS: add rename-from-info and settings access

Add channel name editable area with pencil hover and wire to a lightweight Rename Channel modal; add Channel Settings item to RHS menu with permission checks; ensure navigation after rename uses relative path to avoid 404.

* linter changes

* add padding so field labels don't get cut off

* fixes for keyboard accessibility and tooltips

* don't show channel settings for DMs and GMs

* chore(i18n): run extract to reorder new keys and fix CI

Re-extracted webapp i18n to place newly added keys (editable tooltips and rename modal) in canonical order expected by translation tooling.

* use generic_btn.cancel/save for rename modal buttons

* chore(i18n): remove unused rename_channel.cancel/save keys

* updated tests to account for new elements in the info rhs

* add cypress test for new rhs info function

* fix linting issues

* fixed tests

* linter fixes

* tweak position of edit button

* style tweaks, remove subtitle from info rhs head (redundant now), update archived state

* added 'unarchive' button to archived notice, updated translations

* fixed tests that I broke in channel info header

* add url name to channel info view

* update to 'channel handle' instead of url name'

* change order of channel handle

* add copy button

* Update about_area_channel.test.tsx

* fixed test and brought back channel subtitle in header for consistency

* fixed header test

* make channel info rhs scrollable

* fix merge issue

* Fix lint

---------

Co-authored-by: yasserfaraazkhan <attitude3cena.yf@gmail.com>
2026-02-02 17:34:32 +00:00
Harrison Healey 4049300129 Change moduleResolution to bundler for web app (#35081)
This tells the TypeScript compiler (only used for type checking in the web app)
to use the `imports` and `exports` field of a package's `package.json` to find
modules. Those fields are standard in newer versions of Node.js, and hopefully
supporting them means that we'll have to do less work to configure tooling in
the future.

We could also get similar behaviour by using the `nodenext` option, but that
adds some additional requirements to include file extensions which ES Modules
technically require, but I don't think we need to enforce because other tooling
doesn't require them.

I wanted to make that change in all of the subpackages as well, but we can't do
that without having TypeScript output ES Modules which, unless we change their
build processes to generate multiple formats (like the shared package in
client package, or the types package which is more than I want to do at the
moment.

The changes to other files are either because they incorrectly imported types
from a file that isn't intentionally exposed by the plugin or it's because we
had a typo in a file path.
2026-02-02 12:08:04 -05:00
6f9b6f3364 Translations update from Mattermost Weblate (#35159)
* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/

* Translated using Weblate (Polish)

Currently translated at 99.0% (2924 of 2951 strings)

Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/pl/

* Translated using Weblate (Norwegian Bokmål)

Currently translated at 78.3% (5457 of 6963 strings)

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/nb_NO/

* Translated using Weblate (Polish)

Currently translated at 95.2% (6630 of 6963 strings)

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/pl/

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/

---------

Co-authored-by: master7 <marcin.karkosz@rajska.info>
Co-authored-by: Frank Paul Silye <frankps@gmail.com>
2026-02-02 14:04:07 +00:00
Jesse HallamandMattermost Build 70a50edcf2 [MM-67021] Fix 500 errors on check-cws-connection in non-Cloud environments (#34786)
* Fix 500 errors on check-cws-connection in non-Cloud environments

The check-cws-connection endpoint was returning 500 errors in
self-hosted enterprise environments because:

1. The client only checked BuildEnterpriseReady before making the
   request, which is true for all enterprise builds
2. The server handler didn't check for a Cloud license before
   attempting to connect to CWS
3. The CWS URL is not configured in non-Cloud environments, causing
   the connection check to fail

This fix:
- Server: Add IsCloud() license check to match other cloud endpoints,
  returning 403 instead of 500 for non-Cloud licenses
- Client: Add Cloud license check to skip the request entirely in
  non-Cloud environments

* Add unit tests for check-cws-connection license check

* Return JSON status from check-cws-connection endpoint

Change the check-cws-connection endpoint to return 200 with a JSON body
containing status (available/unavailable) instead of using HTTP error
codes. This allows the endpoint to be used for air-gap detection on
self-hosted instances, not just Cloud deployments.

* i18n

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
2026-02-02 13:41:14 +00:00
unified-ci-app[bot] b74b5fe83f chore: Update NOTICE.txt file with updated dependencies (#35158)
Automatic Merge
2026-02-02 13:23:28 +02:00
Harshil SharmaandMattermost Build 990e9b34bf Removed initial BOR post reveal WS event for post author (#34939)
* Removed initial BOR post reveal WS event for post author

* restored package lock

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
2026-02-02 16:16:50 +05:30
Harshil SharmaandMattermost Build dc69319c67 Moved flag post option before delete post (#35019)
Co-authored-by: Mattermost Build <build@mattermost.com>
2026-02-02 16:16:21 +05:30
sabrilandMattermost Build 981ff0bc46 MM-66362 feat: run e2e full tests after successful smoke tests both in cypress and playwright (#34868)
* feat: run e2e full tests after successful smoke tests both in cypress and playwright

* fix lint check on jsdoc req in playwright test

* update smoke test filter

* update test filter for cypress tests

* update docker services, fix branch convention and rearrange secrets

* update e2e-test workflow docs

* reorganized

* fix lint

* fix playwright template

* fix results assertion

* add retest, e2e-test-verified, gh comments of failed tests, path filters, run e2e-tests check first and demote unstable tests

* run using master image for e2e-only changes, add ts/js actions for cypress and playwright calculations, add verified by label

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
2026-02-02 08:37:55 +08:00
Pablo Vélez 8db2ef6b9f MM-67365 - adjust bor icons and priority labels in compact mode (#35121)
* MM-67365 - adjust bor icons and priority labels in compact mode

* fix linter issue
2026-01-31 15:09:25 -05:00
Julien Tant 288816834d Bump playbooks to v2.7.0 (#35150) 2026-01-30 11:42:41 -07:00
Andre Vasconcelos 3321db82c3 Bumping prepackaged version of MS Teams Meetings plugin to 2.4.0 (#35146) server/public/v0.1.22 2026-01-30 18:03:20 +02:00
Jesse HallamandMattermost Build 5bb5261c72 MM-67279: Fix private channel enumeration via /mute slash command (#35099)
* MM-67279: Fix private channel enumeration via /mute slash command

Return the same error message when a user tries to mute a channel
they are not a member of as when the channel doesn't exist. This
prevents authenticated users from discovering private channels
by observing different error responses.

* update i18n

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-30 14:43:23 +00:00
Nick MisasiandMattermost Build 90bdd6ae54 MM-67141 Update AI rewrite prompt guidance (#35011)
* Improve rewrite menu guidance

Keep AI rewrite prompts visible on focus and clarify the empty-state instruction.

* Apply suggestions from code review

* Apply suggestion from @nickmisasi

* Fix rewrite menu test assertions

Update test expectations to match component string values after defaultMessage changes. Fix syntax error with unterminated string and correct placeholder text expectation.

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-30 14:14:29 +00:00
Nick Misasi fe4100956c [MM-66581] Include some thread context in AI Rewrites prompt (#34931)
* Include last root, and most recent 10 posts in a thread with the rewrite system prompt

* Include user's names in the thread context for better reference

* Revert package-lock to master

* Fix tests
2026-01-30 09:14:06 -05:00
Alejandro García MontoroandMattermost Build 1c1a445a3e MM-67380: COALESCE Drafts.Type to the empty string if NULL (#35109)
When the Type column was added to the Drafts table, it did not add a
DEFAULT value, so we need to handle the NULL values for the pre-existing
rows.

Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-29 21:14:56 +01:00
7f6a98fd7a MM-66789 Restrict log downloads to a root path for support packets (#35014)
* [MM-66789] Fix arbitrary file read vulnerability in advanced logging

  Add path validation to prevent reading files outside the logging root
  directory via GetAdvancedLogs (used in support packet generation).

  Security controls:
  - Validate file paths are within logging root before reading
  - Support MM_LOG_PATH environment variable to allow system admins
    to configure a custom logging root directory
  - Resolve symlinks to prevent bypass attacks
  - Detect and block path traversal attempts

  Also adds:
  - Audit logging for support packet generation
  - Config-time validation that logs errors for paths outside logging
    root (will become blocking in future version)
  - Comprehensive test coverage for path validation

* Update server/channels/app/platform/log_test.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix linter errors

* Update server/channels/api4/system.go

Co-authored-by: Ben Schumacher <ben.schumacher@mattermost.com>

* Simplify unit tests for platform/log_test.go by moving some test logic to config/logger_test.go

* Fix unit tests requiring logging root to be set

* enforce LogSettings.FileLocation path validation; simplify path checking

* fix linter errors

* use dir in logging root for all unit test logging

* MM_LOG_PATH is set once, centrally, for all tests

* fix flaky test

* fix flaky test

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
Co-authored-by: Ben Schumacher <ben.schumacher@mattermost.com>
2026-01-29 13:29:55 -05:00
Jesse Hallam 1346cf529a MM-67274: Fix panic in getBrowserVersion with empty User-Agent version (#35098)
* MM-67274: Fix panic in getBrowserVersion with empty User-Agent version

Refactor getBrowserVersion to use a table-driven approach that
centralizes bounds checking, preventing panic when User-Agent strings
contain identifiers like "Mattermost Mobile/" with no version token.

* Refactor user agent tests to use structured test cases

Move expected values into the testUserAgent struct for clarity,
making it easier to see what each test case expects at a glance.
2026-01-29 13:12:35 -05:00
Alejandro García Montoro 7201f42d95 MM-67277: Add check to legacy hasher (#35092)
* Add check to legacy hasher

* Make the linter happy
2026-01-29 17:47:48 +01:00
Christopher Poile 168fb51666 [MM-67202] Validate auth method in account switch (#34981)
* fix account authorization type switch

* improve test clarity

* refactor tests for clarity
2026-01-29 16:14:19 +00:00
Ben Cooke 36173a4948 Use one timeout config for requests to translation providers (#34957) 2026-01-29 10:00:22 -05:00
2b075c9b74 MM-65970: New way to build routes in Client4 (#34499)
* Add Client4 route building functions

* Make DoAPIRequestWithHeaders add the API URL

This makes it consistent with the other DoAPIXYZ functions, which all
prepend the provided URL with the client's API URL.

* Use the new route building logic in Client4

* Address review comments

- clean renamed to cleanSegment
- JoinRoutes and JoinSegments joined in Join
- newClientRoute uses Join

* Fix new routes from merge

* Remove unused import

* Simplify error handling around clientRoute (#34870)

---------

Co-authored-by: Jesse Hallam <jesse@mattermost.com>
Co-authored-by: Jesse Hallam <jesse.hallam@gmail.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-29 14:26:47 +00:00
Jesse Hallam 5d787969c2 MM-67268: Fix SSRF bypass via IPv4-mapped IPv6 literals (#35097)
Canonicalize IPv4-mapped IPv6 addresses (e.g., ::ffff:127.0.0.1) to
their native IPv4 form in IsReservedIP before checking against reserved
IP ranges. This prevents attackers from bypassing SSRF protections by
using IPv4-mapped IPv6 literals to access internal services.
2026-01-29 14:36:47 +01:00
Ben Cooke 4195b8bc5c Metrics for Autotranslations (#34900) 2026-01-29 05:46:45 -05:00
Alejandro García Montoro 62df0b0417 Update the FIPS flavour of Playbooks to v2.6.2 (#35096)
Automatic Merge
2026-01-29 08:53:28 +02:00
sabril 7417d07733 Test/RTL: Use userEvent as much as possible and remove unneeded jest.clearAllMocks() (#35070)
* use userEvent as much as possible then fireEvent only if needed

* remove unnecessary jest.clearAllMocks

* update comments
2026-01-29 00:52:24 +08:00
Christopher Poile 67b8c89508 MM-67130: Fix permalink preview permissions (#34909)
* remove permalink embeds when user loses access to orginating channel

* remove posts & embeds on team_leave event; simplify preview index.ts

* cleanup

* remove dead code

* more dead code elimination
2026-01-28 15:01:40 +00:00
Doug LauderandMattermost Build b2eb45e615 Add missing auditRec.Success calls; fix missing return on error. (#34954)
Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-27 23:07:53 +00:00
Julien Tant 73d7e66e97 Bump playbooks to v2.6.2 (#35077)
Automatic Merge
2026-01-27 23:53:27 +02:00
Carlos Garcia 320b3b411f adds detailed error message to ES test connection (#35009)
* adds detailed error message to ES test connection

* changed to semicolon for consistency

* updated snapshots for elasticsearch settings test
2026-01-27 22:46:53 +01:00
fb22f56635 MM-67269 - Fix popout windows for subpath deployments (#35027)
* MM-67269 - Fix popout windows for subpath deployments

Popout windows were failing with 404 errors when Mattermost is served
from a subpath (e.g., https://company.com/mattermost). The popout
functions were constructing URLs without including the subpath prefix.

Changes:
- Updated popoutThread() and popoutRhsPlugin() to use getBasePath()
  helper function which includes window.basename
- Added unit tests to verify popout URLs include subpath when configured
- Follows established pattern used throughout codebase (getSiteURL,
  cookie paths, React Router)

This ensures popout windows open at the correct URL:
  /subpath/_popout/... instead of /_popout/...

Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>

* Clear mocks and set default base path in tests

---------

Co-authored-by: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-27 14:25:15 -07:00
Christopher Poile eeaf9c8e3e Fix bad merge (#35079) 2026-01-27 15:50:38 -05:00
ea9333b2e8 Translations update from Mattermost Weblate (#35055)
* Translated using Weblate (Korean)

Currently translated at 92.0% (6275 of 6816 strings)

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/ko/

* Translated using Weblate (Polish)

Currently translated at 97.2% (6629 of 6816 strings)

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/pl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (2933 of 2933 strings)

Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/pl/

* Translated using Weblate (Polish)

Currently translated at 97.3% (6636 of 6816 strings)

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/pl/

* Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 96.2% (6563 of 6816 strings)

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/zh_Hans/

* Translated using Weblate (Dutch)

Currently translated at 99.8% (2929 of 2933 strings)

Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/nl/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (6816 of 6816 strings)

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/nl/

* Translated using Weblate (Korean)

Currently translated at 92.1% (6278 of 6816 strings)

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/ko/

* Translated using Weblate (Norwegian Bokmål)

Currently translated at 5.0% (147 of 2933 strings)

Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/nb_NO/

* Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 96.7% (6597 of 6816 strings)

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/zh_Hans/

* Translated using Weblate (Swedish)

Currently translated at 95.8% (2812 of 2933 strings)

Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/sv/

* Translated using Weblate (Swedish)

Currently translated at 95.8% (2812 of 2933 strings)

Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/sv/

* Translated using Weblate (Swedish)

Currently translated at 94.7% (6460 of 6816 strings)

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/sv/

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/

---------

Co-authored-by: wooki-00 <wookismile@naver.com>
Co-authored-by: master7 <marcin.karkosz@rajska.info>
Co-authored-by: ThrRip <coding@thrrip.space>
Co-authored-by: Tom De Moor <tom@controlaltdieliet.be>
Co-authored-by: avasconcelos114 <andre.onogoro@gmail.com>
Co-authored-by: Frank Paul Silye <frankps@gmail.com>
Co-authored-by: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Co-authored-by: MArtin Johnson <martinjohnson@bahnhof.se>
Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-27 19:05:43 +00:00
Christopher Poile fe3052073d [MM-67074] Integration Action memory use fix (#34896) 2026-01-27 11:54:11 -05:00
Nick MisasiandMattermost Build fbe5ad0ea2 [MM-66591] Channel Summarization - header icon pluggable + citation support (#34687)
* Add pluggable ChannelHeaderIcon

* Add orchestration for post/channel/team citations in post render

* Updates to suit new format cor citations

* Fix linter

* Fix stylelint property order errors in _markdown.scss

* Fix TypeScript type errors

- Add missing ChannelHeaderIcon to initialComponents in plugins reducer
- Fix SelectProps generic to use 'false' instead of 'boolean' for isMulti in dropdown_input_hybrid

* Update channel_header snapshots to include ChannelHeaderIcon Pluggable

* PR feedback changes

* Add snapshots

* Add export for DatePicker

* PR Feedback

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-27 11:46:12 -05:00
Carlos Garcia 3388093c00 updates opensearch library dependency and adds tests for caused_by error reason returned (#34826) 2026-01-27 16:01:22 +01:00
Ibrahim Serdar Acikgoz ced9a56e39 [MM-67126] Deprecate UpdateAccessControlPolicyActiveStatus API in favor of new one (#34940) 2026-01-27 15:49:08 +01:00
Carlos Garcia 89a29ce3c2 MM-66167 fix (#35061)
* use BUILD_ENTERPRISE_READY instead of hardcoded value in Makefile

* fixes MM-66167
2026-01-27 15:29:22 +01:00
Dylan HaussermannandMattermost Build 8e7b3da702 Fixtures that allow install of a plugin from a target repo (#34520)
* Fixtures that allow install of a plugin from a target repo

* Fixed linting error and applied `prettier` formating.

* Implemeted feedback from code review

* Remove unused AdminConfig import

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-27 21:41:49 +08:00
Ibrahim Serdar Acikgoz dfbe788732 [MM-64365] omit group constrained channels from the ch. selector for ABAC (#35010) 2026-01-27 13:31:58 +01:00
Alejandro García Montoro 4cd9a266f8 Update the FIPS flavour of Boards to v9.2.2 (#35064)
Automatic Merge
2026-01-27 08:53:33 +02:00
Harshil SharmaandMattermost Build c6b205f0d7 Fixed WS payload for post burn event (#34936)
* Handled WS payload

* increased WS faliure timeout to elliminate flakiness

* lint fix

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-27 11:57:06 +05:30
unified-ci-app[bot] 8ff88242a9 chore: Update NOTICE.txt file with updated dependencies (#35053)
Automatic Merge
2026-01-27 08:23:28 +02:00
lindalumitchellandMattermost Build ace5810d65 Update file_preview.js (#35028)
Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-27 05:50:08 +00:00
sabril 3db7477e45 MM-67281: (test) Migrate Enzyme to RTL (#35029)
* test: migrate enzyme to rtl

* replace renderWithIntl with renderWithContext

* remove jest.clearAllMocks

* use userEvent

* fix unrelated lint error
2026-01-27 12:22:13 +08:00
c537b88f93 MM-65023 Add tooltip to actions buttons, display error (#33773)
* Add tooltip support and error handling for action buttons

- Add tooltip field to PostAction type definition
- Display tooltips on hover for action buttons
- Add comprehensive error handling for button actions
- Show error messages when actions fail
- Clear previous errors on subsequent actions
- Add tests for error handling functionality

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add E2E tests for action button error handling and tooltips

- Test error message display when action buttons fail
- Test error clearing when successful actions are performed
- Test tooltip display on action button hover
- Use scoped selectors to avoid test interference
- Cover complete error lifecycle and tooltip functionality

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Use WithTooltip component for action button tooltips

Replace native HTML title attribute with WithTooltip component to provide
consistent tooltip styling and behavior across the application.

Changes:
- Import and wrap ActionBtn with WithTooltip component
- Remove title attribute from ActionBtn
- Update E2E test to check for .tooltipContainer instead of title attribute

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix TypeScript errors and test patterns in message attachment tests

- Fix TypeScript type errors in mock event objects by using arrow functions instead of jest.fn()
- Update async test pattern to use process.nextTick() with done callback instead of await
- Update test snapshots to reflect error handling wrapper div
- Fix whitespace formatting in E2E test file

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>

* updated actionError to accept react node, replace hardcoded error with FormattedMessage components

* Fix test to handle FormattedMessage in actionError state

Update test expectation to check for FormattedMessage React element
instead of plain string when no error message is provided. This aligns
with the recent change to support internationalization in error messages.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>

* Disable tooltip interactions when no tooltip text is present

Adds disabled prop to WithTooltip component when action.tooltip is empty or undefined, preventing unnecessary tooltip event handlers from being attached to action buttons that don't have tooltips.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>

* Add tests for action button tooltip behavior

Adds three test cases to verify tooltip functionality:
- Tooltip is disabled when action.tooltip is undefined
- Tooltip is disabled when action.tooltip is empty string
- Tooltip is enabled and displays correctly when action.tooltip has a value

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>

* fix e2e test

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-26 20:07:09 -07:00
sabril 7b1c32e34c MM-67725: (test) Migrate enzyme to RTL (#34966) 2026-01-27 09:52:46 +08:00