Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
c4d30a4
feat: bump bitcoin 1.10.0 (#25625)
Battambang Feb 5, 2026
f49598e
test: added missing permissions to call other workflows (#25697)
javiergarciavera Feb 5, 2026
73390d0
refactor(analytics): migrate Batch 1-4: predict (#25650)
NicolasMassart Feb 5, 2026
d270ce5
fix(perps): clear confirmation on order view unmount cp-7.64.0 (#25708)
michalconsensys Feb 5, 2026
c9d5adc
feat: MUSD-280 Make mUSD Conversion Primary CTA text clickable (#25676)
Matt561 Feb 5, 2026
a2afc16
fix: transaction activity for main and token detail lists as well as …
nickewansmith Feb 5, 2026
20383bd
chore: bump `@metamask/profile-sync-controller` to `^27.1.0` (#25707)
mathieuartu Feb 5, 2026
800ebb6
chore: disallow hiding of mUSD (#25640)
nickewansmith Feb 5, 2026
7a4bd9d
fix(perps): tx history initial fetch (#25695)
aganglada Feb 5, 2026
f2f1579
fix: exclude gas fees from swap quotes insufficientBal calculation (#…
GeorgeGkas Feb 5, 2026
4860b46
feat(perps): pay with any token and Perps balance with info tooltip (…
michalconsensys Feb 5, 2026
4fda86e
fix(rewards): end of season scrollable rewards (#25639)
VGR-GIT Feb 5, 2026
8efb4f6
feat: implement ClaimOnLineaBottomSheet for claiming bonuses (#25516)
PatrykLucka Feb 5, 2026
42a3937
fix: background color for Perps deposit cp-7.64.0 (#25567)
dan437 Feb 5, 2026
0aeff3d
fix: update TransactionDetails component header to have left arrow ba…
nickewansmith Feb 5, 2026
889d421
fix: MUSD-285 get musd cta displayed for account with no stablecoins …
Matt561 Feb 5, 2026
c0ee7e2
refactor: rename HeaderCenter component to HeaderCompactStandard (#25…
brianacnguyen Feb 5, 2026
bcf0c8d
chore: moves quarantine specs to tests; deprecates e2e/specs (#25706)
christopherferreira9 Feb 5, 2026
8af0ce1
fix: correct padding alignment in Add Chain bottom sheet (#25671)
georgewrmarshall Feb 5, 2026
82b9936
feat: changed StakeButton style to tag (#25722)
Matt561 Feb 5, 2026
a3323bc
chore: Added titles to components temp (#25683)
brianacnguyen Feb 5, 2026
ad6e853
chore: moves card selectors to app (#25729)
christopherferreira9 Feb 5, 2026
9d82768
feat(predict): add version gating to market highlights and filter clo…
matallui Feb 5, 2026
3d1e55f
refactor: Update TextField and TextFieldSearch's styling (#25684)
brianacnguyen Feb 5, 2026
51f9d36
feat(card): cp-7.64.0 change CardHome button colors (#25728)
Brunonascdev Feb 5, 2026
c7685f0
chore(release): Bump main version to 7.66.0 (#25736)
metamaskbot Feb 5, 2026
14babfe
feat(card): add push provisioning base infrastructure (#25669)
Brunonascdev Feb 5, 2026
fa7d510
feat(predict): cp-7.65.0 add analytics tracking to deposit flow (#25670)
caieu Feb 5, 2026
af8fe0d
fix: fix on-ramp buy navigation on token details (#25709)
sahar-fehri Feb 5, 2026
ba14ec4
fix: cash buy button action (#25719)
bergarces Feb 5, 2026
13c9688
feat: add provider_onramp property to Ramps Transaction Completed/Fai…
amitabh94 Feb 5, 2026
7c4514a
feat: cp-7.65.0 updated color of earn percentage CTA (#25738)
Matt561 Feb 6, 2026
fa38c18
feat(ramps): adds payment selection modal (#25681)
georgeweiler Feb 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .cursor/BUGBOT.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Use the rules in the [unit testing guidelines](rules/unit-testing-guidelines.mdc
### 2. Initial Setup - E2E Tests

- **ALWAYS** load and reference [e2e-testing-guidelines](rules/e2e-testing-guidelines.mdc)
- Verify test file naming pattern: `e2e/specs/**/*.spec.{js,ts}`
- Verify test file naming pattern: `tests/(smoke|regression)/**/*.spec.{js,ts}`
- Check for proper imports and framework utilities from `tests/framework/index.ts`

Use the rules in the [e2e-testing-guidelines](rules/e2e-testing-guidelines.mdc) to enforce the test quality and bug detection.
Expand Down
25 changes: 21 additions & 4 deletions .cursor/rules/e2e-testing-guidelines.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,15 @@ alwaysApply: true
## Test Organization - MANDATORY

- Organize tests into folders based on features and scenarios
- Use the a directory that suits the test type (regression|smoke) based on the tag used
- Each feature team should own one or more folders of tests
- Follow the same organization pattern as the extension team for consistency
- Place tests in logical feature directories:
```
e2e/specs/<feature-name>/<e2e-test-name.spec.ts>
e2e/specs/tokens/import/import-erc1155.spec.ts
e2e/specs/settings/clear-activity.spec.ts
e2e/specs/ppom/ppom-blockaid-alert-erc20-approval.spec.ts
tests/smoke/<feature-name>/<e2e-test-name.spec.ts>
tests/smoke/tokens/import/import-erc1155.spec.ts
tests/regression/wallet/settings/clear-activity.spec.ts
tests/regression/ppom/ppom-blockaid-alert-erc20-approval.spec.ts
```

## Framework Architecture
Expand Down Expand Up @@ -109,6 +110,7 @@ new FixtureBuilder().build();
### Page Object Model (POM) Pattern
- ALWAYS use the Page Object Model pattern for organizing test code
- Move all element selectors to Page Objects or dedicated selector files
- When adding one or more testID to a component or view, place it in a dedicated file next to where it is being used with the file extension `.testIds.ts`
- Access UI elements through Page Object methods, not directly in test specs

#### Page Object Structure Example:
Expand Down Expand Up @@ -149,6 +151,21 @@ class LoginPage {
export default new LoginPage();
```

### TestIDs location example:
```typescript
// DON'T:
import { MyComponentSelectors } from '../../tests/selectors/Card/RecurringFeeModal.selectors';

// DO:
import { MyComponentSelectors } from './MyComponent.testIds';

const MyComponent = () => {
return (
<MyComponent testID={MyComponentSelectors.CONTAINER} />
)
};
```

### Proper Waiting and Assertions
- NEVER use `TestHelpers.delay()` - it creates flaky tests and slows down test execution
- ALWAYS use proper waiting with Assertions from the framework:
Expand Down
2 changes: 1 addition & 1 deletion .github/scripts/e2e-extract-test-results.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ async function parseXml(content) {
* jest-junit outputs XML with structure:
* <testsuites>
* <testsuite name="TestSuite" tests="N" failures="N" ...>
* <testcase name="test name" classname="e2e/specs/path/to/file.spec.ts" time="N">
* <testcase name="test name" classname="tests/smoke/path/to/file.spec.ts" time="N">
* <failure>...</failure> <!-- only if failed -->
* </testcase>
* </testsuite>
Expand Down
5 changes: 1 addition & 4 deletions .github/scripts/e2e-split-tags-shards.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,7 @@ import { extractTestResults } from './e2e-extract-test-results.mjs';

const env = {
TEST_SUITE_TAG: process.env.TEST_SUITE_TAG,
// Starting at the root drastically affects the performance of the script.
// This will be reverted as soon as all specs are migrated to the new folder
// structure.
BASE_DIR: process.env.BASE_DIR || './',
BASE_DIR: process.env.BASE_DIR || './tests/',
METAMASK_BUILD_TYPE: process.env.METAMASK_BUILD_TYPE || 'main',
PLATFORM: process.env.PLATFORM || 'ios',
SPLIT_NUMBER: Number(process.env.SPLIT_NUMBER || '1'),
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/run-performance-e2e-experimental.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ on:
branches:
- main

permissions:
contents: read
id-token: write
actions: write

concurrency:
group: performance-e2e-experimental-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: false
Expand Down
4 changes: 3 additions & 1 deletion .storybook/storybook.requires.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ android {
applicationId "io.metamask"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionName "7.65.0"
versionName "7.66.0"
versionCode 3607
testBuildType System.getProperty('testBuildType', 'debug')
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
import React from 'react';
import React, { forwardRef } from 'react';
import { ScrollView } from 'react-native';
import { ConditionalScrollViewProps } from './ConditionalScrollView.types';

/**
* ConditionalScrollView renders either a ScrollView or content directly based on isScrollEnabled prop.
* This is useful for homepage redesign where we want to remove nested scroll views in favor of a global scroll container.
*/
const ConditionalScrollView: React.FC<ConditionalScrollViewProps> = ({
children,
isScrollEnabled,
scrollViewProps,
}) =>
const ConditionalScrollView = forwardRef<
ScrollView,
ConditionalScrollViewProps
>(({ children, isScrollEnabled, scrollViewProps }, ref) =>
isScrollEnabled ? (
<ScrollView {...scrollViewProps}>{children}</ScrollView>
<ScrollView ref={ref} {...scrollViewProps}>
{children}
</ScrollView>
) : (
<>{children}</>
);
),
);

ConditionalScrollView.displayName = 'ConditionalScrollView';

export default ConditionalScrollView;

This file was deleted.

3 changes: 0 additions & 3 deletions app/component-library/components-temp/HeaderCenter/index.ts

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ import {
IconName,
} from '@metamask/design-system-react-native';

import HeaderCenter from './HeaderCenter';
import HeaderCompactStandard from './HeaderCompactStandard';

const HeaderCenterMeta = {
title: 'Components Temp / HeaderCenter',
component: HeaderCenter,
const HeaderCompactStandardMeta = {
title: 'Components Temp / HeaderCompactStandard',
component: HeaderCompactStandard,
argTypes: {
title: {
control: 'text',
Expand All @@ -26,7 +26,7 @@ const HeaderCenterMeta = {
},
};

export default HeaderCenterMeta;
export default HeaderCompactStandardMeta;

export const Default = {
args: {
Expand All @@ -36,13 +36,16 @@ export const Default = {

export const OnBack = {
render: () => (
<HeaderCenter title="Settings" onBack={() => console.log('Back pressed')} />
<HeaderCompactStandard
title="Settings"
onBack={() => console.log('Back pressed')}
/>
),
};

export const OnClose = {
render: () => (
<HeaderCenter
<HeaderCompactStandard
title="Modal Title"
onClose={() => console.log('Close pressed')}
/>
Expand All @@ -51,7 +54,7 @@ export const OnClose = {

export const BackAndClose = {
render: () => (
<HeaderCenter
<HeaderCompactStandard
title="Settings"
onBack={() => console.log('Back pressed')}
onClose={() => console.log('Close pressed')}
Expand All @@ -61,7 +64,7 @@ export const BackAndClose = {

export const WithSubtitle = {
render: () => (
<HeaderCenter
<HeaderCompactStandard
title="Settings"
subtitle="Account Settings"
onBack={() => console.log('Back pressed')}
Expand All @@ -71,7 +74,7 @@ export const WithSubtitle = {

export const MultipleEndButtons = {
render: () => (
<HeaderCenter
<HeaderCompactStandard
title="Search"
onBack={() => console.log('Back pressed')}
endButtonIconProps={[
Expand All @@ -87,11 +90,11 @@ export const MultipleEndButtons = {

export const Children = {
render: () => (
<HeaderCenter onClose={() => console.log('Close pressed')}>
<HeaderCompactStandard onClose={() => console.log('Close pressed')}>
<Box twClassName="items-center">
<Text variant={TextVariant.HeadingSm}>Custom Title</Text>
<Text variant={TextVariant.BodySm}>Subtitle text</Text>
</Box>
</HeaderCenter>
</HeaderCompactStandard>
),
};
Loading
Loading