[pull] main from MetaMask:main#381
Merged
Merged
Conversation
…on checks complete (#23361) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This PR fixes an issue where the insufficient gas critical alert briefly appears and then disappears once gas-station checks determine that the transaction can be paid with a token. Previously, the UI would render the alert immediately and replace it a moment later, causing a flicker. With this update, the insufficient balance alert is held back until gas-station checks fully complete. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Fixed a flicker where the insufficient balance alert appeared before gas-station checks completed ## **Related issues** Fixes: MetaMask/MetaMask-planning#6211 ## **Manual testing steps** ```gherkin Feature: Gas UI stability during confirmation Scenario: user observes flickering on the gas UI when ETH balance is zero Given the user has no ETH on Base And the user has a positive balance in stablecoins When the user starts a send transaction And the user proceeds to the confirmation screen Then the gas section of the UI should not flicker ``` ## **Screenshots/Recordings** [mm-mobile-insuficient.webm](https://github.com/user-attachments/assets/c8795448-a364-4d69-9877-30e8c9e79125) [mm-not-enough-funds.webm](https://github.com/user-attachments/assets/c69943ba-d3b5-498d-9c9c-af02b9274844) <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Prevents insufficient balance alert flicker by waiting for gasless support and simulation readiness, adds a new balance-check hook, exposes pending state in gasless support, and updates related UI/tests. > > - **Alerts/UX**: > - Refine `useInsufficientBalanceAlert` to wait for gasless support check (`pending`) and simulation readiness before showing alerts; respect sponsored gas and selected pay/gas tokens to avoid flicker. > - **Hooks**: > - New `useHasInsufficientBalance` centralizes native-balance vs total-fee calculation and exposes `nativeCurrency`. > - Extend `useIsGaslessSupported` to return `pending`; include relay check pending state; update consumers. > - Update `useAutomaticGasFeeTokenSelect` and `SelectedGasFeeToken` to use new balance hook. > - Require `transactionMetadata` in `GasFeeTokenToast` effect deps to gate toast. > - **Tests**: > - Add tests for `useHasInsufficientBalance` and adjust existing tests across gas, alerts, rows, and confirm flows to account for `pending` and new logic. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 99a3df2. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Bumping Solana to 2.5.1 which fixed snap confirmation UI bug https://github.com/MetaMask/snap-solana-wallet/releases/tag/v2.5.1 <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Update `@metamask/solana-wallet-snap` dependency from `^2.5.0` to `^2.5.1` in `package.json` and `yarn.lock`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit c5efd1f. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Adds "Inaccurate fee" alert in Confirmations. ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Adds "Inaccurate fee" alert in Confirmations ## **Related issues** Fixes: MetaMask/MetaMask-planning#5597 Related PR in the extension: https://github.com/MetaMask/metamask-extension/pull/25174/files ## **Manual testing steps** 1. Go to test dapp 2. Deploy failing contract 3. Trigger failing transaction 4. Notice the "Inaccurate fee" alert on mobile in the Network fee row ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <img width="386" height="739" alt="image" src="https://github.com/user-attachments/assets/551d77b8-3f89-4799-9ee4-a76940b3eb0d" /> <img width="400" height="744" alt="image" src="https://github.com/user-attachments/assets/4371df77-89d7-41f9-989c-80a57a7596cc" /> ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds a non-blocking "Inaccurate fee" alert on confirmations when gas simulation fails, and wires up metrics, i18n, and tests. > > - **Alerts**: > - Add `useGasEstimateFailedAlert` to surface `Severity.Warning` "Inaccurate fee" (`AlertKeys.GasEstimateFailed`) on `RowAlertKey.EstimatedFee` when `simulationFails` is truthy. > - Include this alert in transaction alerts aggregation in `useConfirmationAlerts`. > - **Constants & Metrics**: > - Extend `AlertKeys` with `gas_estimate_failed`. > - Map to metrics in `useConfirmationAlertMetrics`. > - **i18n**: > - Add `alert_system.gas_estimate_failed.{title,message}` strings; normalize apostrophe in `domain_mismatch` message. > - **Tests**: > - New `useGasEstimateFailedAlert.test.ts` covering trigger and content. > - Update `useConfirmationAlerts.test.ts` to mock new hook. > - Adjust `useDomainMismatchAlerts.test.ts` expected copy. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ece41c6. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Signed-off-by: dan437 <80175477+dan437@users.noreply.github.com>
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->
## **Description**
I have changed the configuration in LD to have these two flags:
`[Progressive Rollout] 0% of users - Minimum Version 7.61.0`
```json
[
{
"name": "feature is ON",
"scope": {
"type": "threshold",
"value": 0
},
"value": {
"enabled": true,
"minimumVersion": "7.61.0"
}
},
{
"name": "feature is OFF",
"scope": {
"type": "threshold",
"value": 1
},
"value": {
"enabled": false,
"minimumVersion": "7.61.0"
}
}
]
```
`[Progressive Rollout] 100% of users - Minimum Version 7.61.0`
```json
[
{
"name": "feature is ON",
"scope": {
"type": "threshold",
"value": 1
},
"value": {
"enabled": true,
"minimumVersion": "7.61.0"
}
},
{
"name": "feature is OFF",
"scope": {
"type": "threshold",
"value": 1
},
"value": {
"enabled": false,
"minimumVersion": "7.61.0"
}
}
]
```
This PR focuses on enbling the use of those FFs on the mobile app
<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry: add support for progressive rollout FF
## **Related issues**
Fixes: https://consensyssoftware.atlassian.net/browse/ASSETS-1838
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
## **Pre-merge author checklist**
- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Adds support for progressive-rollout flags that wrap `trendingTokens`
in a `value` field and updates tests accordingly.
>
> - **Feature Flags**:
> - `selectAssetsTrendingTokensEnabled` now handles progressive rollout
format by unwrapping `trendingTokens.value` when present before
evaluation.
> - **Tests**:
> - Extend cases to cover `{ value: { enabled, minimumVersion } }` and
`{ value: boolean }` inputs.
> - Consolidate env override non-boolean string cases using `it.each`
and remove redundant tests.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
0242e11. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description** Adds missing properties for transaction events. Similar thing was implemented in the extension before, so we are just bringing it to mobile as well: MetaMask/metamask-extension#35196 ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Adds 2 missing properties for transaction events ## **Related issues** Fixes: MetaMask/MetaMask-planning#4138 ## **Manual testing steps** ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds metrics for simulation sending/receiving fiat values and integrates them into transaction event tracking with unit tests. > > - **Transaction metrics**: > - Add `getSimulationValuesProperties` to emit `simulation_sending_assets_total_value` and `simulation_receiving_assets_total_value` from `TransactionMeta.assetsFiatValues`. > - Integrate builder into `METRICS_BUILDERS` in `event-handlers/metrics.ts` for all transaction events. > - **Tests**: > - Add unit tests in `event_properties/simulation-values.test.ts` covering presence/absence of sending/receiving values. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 34b8040. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Signed-off-by: dan437 <80175477+dan437@users.noreply.github.com>
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Adds the mUSD conversion CTA to the asset details page for supported conversion tokens. In the event that the asset is supported in the mUSD conversion flow **and** stablecoin lending we favor the mUSD conversion CTA. Read Cursor summary below for detailed changes. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: added mUSD CTA to asset overview screen ## **Related issues** Fixes: [MUSD-126: Add a convert to mUSD CTA card to the asset details page for supported conversion stablecoins](https://consensyssoftware.atlassian.net/browse/MUSD-126) ## **Manual testing steps** ```gherkin Feature: mUSD Conversion CTA on Asset Overview Scenario: user views mUSD conversion CTA for eligible stablecoins Given user has mainnet USDC, USDT, or DAI in their wallet And mUSD conversion feature flag is enabled When user navigates to the token details page for the eligible stablecoin Then user sees "Earn rewards when you convert to mUSD" CTA And the CTA displays the mUSD icon Scenario: user initiates mUSD conversion from asset overview Given user is on the asset overview page for USDC And user has not seen the mUSD education screen When user taps "mUSD" link in the CTA Then user is navigated to the mUSD education screen Scenario: returning user initiates mUSD conversion Given user has previously seen the mUSD education screen And user is on the asset overview page for USDC When user taps "mUSD" link in the CTA Then user is navigated directly to the mUSD conversion confirmation screen ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> N/A - CTA didn't exist ### **After** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/9318e291-d8df-47d9-8df7-c2d53c35bf82 ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds mUSD conversion CTAs on asset overview and token list, gated by feature flag and integrated with conversion/education flow; updates styles, tests, and i18n. > > - **Earn (mUSD Conversion)**: > - Add `MusdConversionAssetOverviewCta` (+ styles/tests) and render it in `EarnLendingBalance` via `renderCta`, favoring it over the lending empty state when enabled and token is convertible. > - Add `MusdConversionAssetListCta` (+ styles/tests) and display it in `UI/Tokens` when the feature flag is on. > - Wire up `useMusdConversionTokens`, `useMusdConversion`, and `selectIsMusdConversionFlowEnabledFlag`; add new test IDs in `EARN_TEST_IDS`. > - Update `StakeButton` to handle convertible stablecoins (initiate conversion/education flow) and refactor button label logic. > - **Styles/UI tweaks**: > - `TokenDetails.styles.tsx`: reduce `tokenDetailsContainer` `marginTop` to `16`. > - `EarnLendingBalance`: layout adjustments (button container, `paddingTop`, larger `AvatarToken`), add spacing for CTAs. > - `StakingCta`: center layout/text. > - **Tests**: > - Comprehensive new/updated tests and snapshots across Earn, Tokens, Asset Overview, and confirmation views to cover new CTAs, feature flag behavior, and navigation. > - **i18n**: > - Add strings: `earn.musd_conversion.earn_rewards_when`, `earn.musd_conversion.you_convert_to`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit afc5018. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->
## **Description**
bump assets controllers to v93
<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry: bump assets controllers to v93
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
## **Pre-merge author checklist**
- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Updates `@metamask/assets-controllers` to v93 (with patched
spot-prices support) and has `TokenBalancesController` listen for
`AccountsController:selectedEvmAccountChange`.
>
> - **Engine**
> - `TokenBalancesController` messenger now listens to
`AccountsController:selectedEvmAccountChange` in
`app/core/Engine/messengers/token-balances-controller-messenger.ts`.
> - **Dependencies**
> - Bump `@metamask/assets-controllers` to `v93` via patch; updates
lockfile (includes indirect bumps like `network-controller` and
`transaction-controller`).
> - Patch content adjusts `SPOT_PRICES_SUPPORT_INFO` in
`@metamask/assets-controllers` (many chains set to `null`) at
`.yarn/patches/@metamask-assets-controllers-npm-93.0.0-*.patch`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ef1d683. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---------
Co-authored-by: Jorge Carrasco <jorge.carrasco@consensys.net>
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> This PR removes the legacy Cucumber/WebDriverIO/Appium test infrastructure from the codebase, completing the migration to Detox for E2E functional testing and Appwright for performance testing. ### Changes Test Infrastructure Removal: - Deleted all WebDriverIO step definitions (wdio/step-definitions/*.js) - Deleted all Cucumber feature files (wdio/features/**/*.feature) - Deleted wdio config files (wdio.conf.js, wdio/config/*.js) - Retained wdio/screen-objects/ and wdio/helpers/ as they may still be referenced Dependencies Cleanup: - Removed wdio/Cucumber packages: @wdio/cli, @wdio/cucumber-framework, @wdio/appium-service, @wdio/browserstack-service, @wdio/junit-reporter, @wdio/local-runner, @wdio/spec-reporter - Removed Cucumber packages: @cucumber/message-streams, @cucumber/messages - Removed related tooling: @rpii/wdio-html-reporter, prettier-plugin-gherkin, wdio-cucumberjs-json-reporter - Added xml2js to devDependencies (used by .github/scripts/ for E2E report processing) CI/CD Updates: - Bitrise: Removed wdio_android_e2e_test, run_android_app_launch_times_appium_test, run_tag_upgrade_android, app_upgrade_pipeline workflows - GitHub Actions: Removed wdio/** and wdio.conf.js from path filters in needs-e2e-build.yml - depcheck: Updated .depcheckrc.yml to remove obsolete ignores and add xml2js Documentation: - docs/readme/e2e-testing.md: Marked Appium section as deprecated, documented Appwright as the current performance testing solution, wrapped legacy content in collapsible <details> block - app/features/SampleFeature/README.md: Removed "with Cucumber/Gherkin" reference ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MMQA-1119?atlOrigin=eyJpIjoiOTlmMjI5YzkzYmI5NDI3OWIzODZkMWFmYjQ5OWFkOGUiLCJwIjoiaiJ9 ## **Manual testing steps** ```gherkin Feature: Remove cucumber test framework from mobile project Scenario: Mobile app behaves as expected after removing cucumber Given cucumber has been removed from repository When user uses mobile app Then mobile app behaves as expected ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Remove legacy Cucumber/WebdriverIO/Appium stack, deleting all related tests/config/deps and updating docs/CI to rely on Detox/Appwright only. > > - **Testing/E2E**: > - Remove `wdio/**`, `wdio.conf.js`, Cucumber feature files, step definitions, mocks, and report tooling (e.g., `generateTestReports.js`). > - Drop wdio/Appium/Cucumber scripts from `package.json` and purge related dependencies. > - **Docs**: > - Mark Appium as deprecated; document Appwright for performance tests and simplify SampleFeature E2E bullet. > - **CI/CD**: > - Prune Bitrise workflows/steps tied to Appium/WebdriverIO (upgrade/performance/wdio jobs) and references in pipelines. > - Update GH workflow path filters (remove `wdio/*`), keep Appwright paths. > - **Tooling**: > - Update `.depcheckrc.yml` (add `xml2js` ignore) and lint-staged (remove `*.feature`). > - Yarn lock cleanup reflecting dependency removals. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit c9bf93b. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…3659) ## **Description** This PR fixes a test that would fail after the expo-font changes in #23517. The `BridgeStepDescription.test.tsx` file had hardcoded font family assertions (e.g., `'Geist Medium'`, `'Geist Regular'`) that will break when font file names change to hyphenated format (e.g., `'Geist-Medium'`, `'Geist-Regular'`). Instead of updating to new hardcoded values, this PR references the centralized `fontStyles` definitions from `app/styles/common.ts`, making the test more maintainable and ensuring a single source of truth for font families. **Changes:** - Import `fontStyles` from `app/styles/common.ts` - Replace `'Geist Medium'` assertions with `fontStyles.medium.fontFamily` - Replace `'Geist Regular'` assertions with `fontStyles.normal.fontFamily` ## **Changelog** CHANGELOG entry: null ## **Related issues** Related to #23517 (main expo-font PR) Related to #23650 (brand font fixes PR) ## **Manual testing steps** ```gherkin Feature: BridgeStepDescription test suite Scenario: developer runs test suite Given the font family definitions have been updated to use hyphens When developer runs yarn jest BridgeStepDescription.test.tsx Then all 22 tests should pass successfully ``` ## **Screenshots/Recordings** N/A - Test-only change ### **Before** Test assertions used hardcoded font family strings that would fail after font renaming. ### **After** Test assertions reference `fontStyles` from `common.ts` and pass with new font names. ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Update BridgeStepDescription tests to reference centralized fontStyles instead of hardcoded font family strings. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4b8f8d2. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )