Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
dc34a7e
Update routes in ChangePassword and Login to skip metametrics
grvgoel81 Sep 1, 2025
215a247
adding TOU check by default for social login users
grvgoel81 Sep 1, 2025
996239c
mid commit
grvgoel81 Sep 2, 2025
959ec70
Remove TOU, metametrics and update change password screen
grvgoel81 Sep 2, 2025
252e340
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 2, 2025
4bea5cf
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 2, 2025
479d1b7
update ChoosePassword
grvgoel81 Sep 2, 2025
5339c3b
update ChoosePassword
grvgoel81 Sep 2, 2025
2518a8a
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 3, 2025
e167680
add common SocialUI flag and used everywhere
grvgoel81 Sep 3, 2025
1e55a79
add tests for OnBoardingSheet and Login
grvgoel81 Sep 3, 2025
5a088cb
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 3, 2025
4a966b3
add tests for ChoosePassword
grvgoel81 Sep 3, 2025
7226c73
linting error resolved
grvgoel81 Sep 3, 2025
2274106
Resolved ramp sdk dependencies and update tests
grvgoel81 Sep 3, 2025
823c903
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 3, 2025
62e864e
update tests in Nav Main
grvgoel81 Sep 3, 2025
81e5d5f
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 3, 2025
9386a7b
update tests
grvgoel81 Sep 3, 2025
c5738fa
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 3, 2025
a8afb60
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 3, 2025
909f552
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 3, 2025
234c890
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 3, 2025
4c60ba1
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 4, 2025
978d078
Remove env flag and update all components and unit tests
grvgoel81 Sep 4, 2025
e88bed0
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 4, 2025
b394d35
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 4, 2025
a3317d2
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 4, 2025
e8f9b2d
update choose password snapshot
grvgoel81 Sep 4, 2025
c8fce31
Resolved cursor comment
grvgoel81 Sep 4, 2025
ed2fca7
Removing OptinMetrics test
grvgoel81 Sep 4, 2025
b75eed7
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 4, 2025
03e1e8f
Update string constants
grvgoel81 Sep 5, 2025
08e8584
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 5, 2025
e833ad8
feat: update snapshot and design
grvgoel81 Sep 5, 2025
2d3f7ce
code refactoring
grvgoel81 Sep 5, 2025
96f148f
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 5, 2025
bf5dacd
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 5, 2025
6630ee6
fix minor UI bugs
grvgoel81 Sep 7, 2025
b54d424
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 8, 2025
1393e1c
fix UI bug
grvgoel81 Sep 8, 2025
e134dc1
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 8, 2025
d609f19
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 8, 2025
d65dec4
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 8, 2025
484681e
fix PR comments
grvgoel81 Sep 8, 2025
9824c08
fix PR comments and update tests
grvgoel81 Sep 8, 2025
b877fd2
fix: cursor comment
grvgoel81 Sep 8, 2025
033a578
fix PR comments
grvgoel81 Sep 9, 2025
dc13182
update Marketing consent and enable sentry for social login users
grvgoel81 Sep 9, 2025
89b4760
update unit-tests
grvgoel81 Sep 9, 2025
890e78c
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 9, 2025
714e72b
Update metrics permission on onboarding and update tests
grvgoel81 Sep 10, 2025
acfecc5
Resolved cursor comment
grvgoel81 Sep 10, 2025
a6bb3a5
Resolved cursor comment
grvgoel81 Sep 10, 2025
406fed5
update unit-test coverage
grvgoel81 Sep 10, 2025
8489ddf
Resolved PR comments
grvgoel81 Sep 10, 2025
6a13a42
fix: use getMetricStateBeforeOauth
ieow Sep 11, 2025
91e827d
Update Onboarding tests
grvgoel81 Sep 11, 2025
e56354a
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 11, 2025
2d64226
Resolve merge conflicts
grvgoel81 Sep 11, 2025
0aa793d
separate social login metrics flag
grvgoel81 Sep 11, 2025
0eb6551
Resolve cursor comment
grvgoel81 Sep 11, 2025
2e63633
Added unit test
grvgoel81 Sep 11, 2025
f40a4d1
configure isSocialLoginEnabled in configure
grvgoel81 Sep 11, 2025
78c33e2
Resolved metametrics unit-tests
grvgoel81 Sep 11, 2025
154212c
Increased test coverage for MetaMetrics.ts
grvgoel81 Sep 11, 2025
82cabfc
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 11, 2025
8601979
resolve linting errors
grvgoel81 Sep 11, 2025
1e9b22b
resolve metametrics fucntion error
grvgoel81 Sep 11, 2025
f80b1c7
update metametrics snapshot
grvgoel81 Sep 11, 2025
db01722
resolved PR comment
grvgoel81 Sep 11, 2025
d6875c5
Upadte snapshot
grvgoel81 Sep 11, 2025
1de40e0
Upadte snapshot
grvgoel81 Sep 11, 2025
abdb82d
Making checkbox optional
grvgoel81 Sep 12, 2025
7087a10
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
ieow Sep 12, 2025
6ee5c7a
Resolve PR comments
grvgoel81 Sep 12, 2025
ef1a4c1
Add unit tests
grvgoel81 Sep 12, 2025
0fa656a
Merge branch 'main' into feat-SL-128_remove_metametrics_screen
grvgoel81 Sep 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 108 additions & 53 deletions app/components/Nav/App/App.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -362,32 +362,50 @@ describe('App', () => {
});
});

it('navigates to OptinMetrics when user exists and OptinMetaMetricsUISeen is false', async () => {
// Mock StorageWrapper.getItem to return different values based on the key
jest.spyOn(StorageWrapper, 'getItem').mockImplementation(async (key) => {
if (key === OPTIN_META_METRICS_UI_SEEN) {
return false; // OptinMetrics UI has not been seen
}
return null; // Default for other keys
describe('SRP vs Social Login user differentiation', () => {
beforeEach(() => {
jest.spyOn(Authentication, 'appTriggeredAuth').mockResolvedValue();
});

renderScreen(
App,
{ name: 'App' },
{
state: {
...initialState,
user: {
...initialState.user,
existingUser: true,
it('shows metrics optin for SRP users when not seen before', async () => {
const srpUserState = {
...initialState,
user: {
...initialState.user,
existingUser: true,
},
engine: {
...initialState.engine,
backgroundState: {
...initialState.engine?.backgroundState,
SeedlessOnboardingController: {
vault: undefined,
},
},
},
},
);
};

jest
.spyOn(StorageWrapper, 'getItem')
.mockImplementation(async (key) => {
if (key === OPTIN_META_METRICS_UI_SEEN) {
return false;
}
return null;
});

// Mock useMetrics hook to return false for isEnabled
jest.mock('../../hooks/useMetrics/useMetrics', () => ({
useMetrics: () => ({
isEnabled: jest.fn().mockReturnValue(false),
}),
}));

// Act
renderScreen(App, { name: 'App' }, { state: srpUserState });

// Wait a bit longer and add debugging
await waitFor(
() => {
// Assert
await waitFor(() => {
expect(mockReset).toHaveBeenCalledWith({
routes: [
{
Expand All @@ -401,9 +419,46 @@ describe('App', () => {
},
],
});
},
{ timeout: 5000 },
);
});
});

it('navigates directly to home for SRP users when metrics UI already seen', async () => {
const srpUserState = {
...initialState,
user: {
...initialState.user,
existingUser: true,
},
engine: {
...initialState.engine,
backgroundState: {
...initialState.engine?.backgroundState,
SeedlessOnboardingController: {
vault: undefined,
},
},
},
};

jest
.spyOn(StorageWrapper, 'getItem')
.mockImplementation(async (key) => {
if (key === OPTIN_META_METRICS_UI_SEEN) {
return true;
}
return null;
});

// Act
renderScreen(App, { name: 'App' }, { state: srpUserState });

// Assert
await waitFor(() => {
expect(mockReset).toHaveBeenCalledWith({
routes: [{ name: Routes.ONBOARDING.HOME_NAV }],
});
});
});
});

describe('Seedless onboarding password outdated check', () => {
Expand Down Expand Up @@ -797,43 +852,43 @@ describe('App', () => {
});
});
});
});

it('should use useNavigation.reset with correct parameters for optin metrics navigation', async () => {
jest.spyOn(StorageWrapper, 'getItem').mockImplementation(async (key) => {
if (key === OPTIN_META_METRICS_UI_SEEN) {
return false; // OptinMetrics UI has not been seen
}
return null; // Default for other keys
});
it('should use useNavigation.reset with correct parameters for optin metrics navigation', async () => {
jest.spyOn(StorageWrapper, 'getItem').mockImplementation(async (key) => {
if (key === OPTIN_META_METRICS_UI_SEEN) {
return false; // OptinMetrics UI has not been seen
}
return null; // Default for other keys
});

renderScreen(
App,
{ name: 'App' },
{
state: {
...initialState,
user: {
...initialState.user,
existingUser: true,
},
renderScreen(
App,
{ name: 'App' },
{
state: {
...initialState,
user: {
...initialState.user,
existingUser: true,
},
},
);
},
);

await waitFor(() => {
expect(mockReset).toHaveBeenCalledWith({
routes: [
{
name: Routes.ONBOARDING.ROOT_NAV,
await waitFor(() => {
expect(mockReset).toHaveBeenCalledWith({
routes: [
{
name: Routes.ONBOARDING.ROOT_NAV,
params: {
screen: Routes.ONBOARDING.NAV,
params: {
screen: Routes.ONBOARDING.NAV,
params: {
screen: Routes.ONBOARDING.OPTIN_METRICS,
},
screen: Routes.ONBOARDING.OPTIN_METRICS,
},
},
],
});
},
],
});
});
});
Expand Down
45 changes: 24 additions & 21 deletions app/components/Nav/App/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1007,9 +1007,7 @@
const routes = useNavigationState((state) => state.routes);
const { toastRef } = useContext(ToastContext);
const isFirstRender = useRef(true);

const { isEnabled: checkMetricsEnabled } = useMetrics();

const isSeedlessOnboardingLoginFlow = useSelector(
selectSeedlessOnboardingLoginFlow,
);
Expand Down Expand Up @@ -1071,30 +1069,35 @@
},
);

const isOptinMetaMetricsUISeen = await StorageWrapper.getItem(
OPTIN_META_METRICS_UI_SEEN,
);
// Only show metrics optin for SRP users
if (!isSeedlessOnboardingLoginFlow) {
const isOptinMetaMetricsUISeen = await StorageWrapper.getItem(
OPTIN_META_METRICS_UI_SEEN,
);

if (!isOptinMetaMetricsUISeen && !checkMetricsEnabled()) {
const resetParams = {
routes: [
{
name: Routes.ONBOARDING.ROOT_NAV,
params: {
screen: Routes.ONBOARDING.NAV,
if (!isOptinMetaMetricsUISeen && !checkMetricsEnabled()) {
const resetParams = {
routes: [
{
name: Routes.ONBOARDING.ROOT_NAV,
params: {
screen: Routes.ONBOARDING.OPTIN_METRICS,
screen: Routes.ONBOARDING.NAV,
params: {
screen: Routes.ONBOARDING.OPTIN_METRICS,
},
},
},
},
],
};
navigation.reset(resetParams);
} else {
navigation.reset({
routes: [{ name: Routes.ONBOARDING.HOME_NAV }],
});
],
};
navigation.reset(resetParams);
return;
}
}

// Navigate to home for both SRP users (who have seen metrics) and social login users
navigation.reset({
routes: [{ name: Routes.ONBOARDING.HOME_NAV }],
});
} else {
navigation.reset({ routes: [{ name: Routes.ONBOARDING.ROOT_NAV }] });
}
Expand Down Expand Up @@ -1207,7 +1210,7 @@
Logger.error(error, 'Error starting app');
});
// existingUser is not present in the dependency array because it is not needed to re-run the effect when it changes and it will cause a bug.
// eslint-disable-next-line react-hooks/exhaustive-deps

Check warning on line 1213 in app/components/Nav/App/App.tsx

View workflow job for this annotation

GitHub Actions / scripts (lint)

React Compiler has skipped optimizing this component because one or more React ESLint rules were disabled. React Compiler only works when your components follow all the rules of React, disabling them may result in unexpected or incorrect behavior
}, []);

return (
Expand Down
27 changes: 27 additions & 0 deletions app/components/Nav/Main/index.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,33 @@ import { renderHookWithProvider } from '../../../util/test/renderWithProvider';
import Engine from '../../../core/Engine';
import configureMockStore from 'redux-mock-store';
import { Provider } from 'react-redux';

// Mock Ramp SDK dependencies to prevent SdkEnvironment.Production errors
jest.mock('../../../components/UI/Ramp', () => ({
RampOrders: ({ children }: { children: React.ReactNode }) => children,
}));

jest.mock('../../../components/UI/Ramp/Deposit/sdk', () => ({
DepositSDKProvider: ({ children }: { children: React.ReactNode }) => children,
DepositSDKContext: {
Provider: ({ children }: { children: React.ReactNode }) => children,
},
}));

jest.mock('../../../components/UI/Ramp/Deposit/orderProcessor', () => ({}));

jest.mock('@consensys/native-ramps-sdk', () => ({
SdkEnvironment: {
Production: 'production',
Staging: 'staging',
},
Context: {
MobileIOS: 'mobile-ios',
MobileAndroid: 'mobile-android',
},
NativeRampsSdk: jest.fn(),
}));

const mockStore = configureMockStore();
const mockInitialState = {
user: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -396,11 +396,14 @@ exports[`ChoosePassword render matches snapshot 1`] = `
style={
{
"alignItems": "flex-start",
"backgroundColor": "#f3f5f9",
"borderRadius": 8,
"flexDirection": "row",
"gap": 8,
"justifyContent": "flex-start",
"marginBottom": 16,
"marginTop": 8,
"padding": 16,
}
}
>
Expand Down Expand Up @@ -453,6 +456,7 @@ exports[`ChoosePassword render matches snapshot 1`] = `
"justifyContent": "flex-start",
"letterSpacing": 0,
"lineHeight": 24,
"marginTop": -6,
"width": "90%",
}
}
Expand All @@ -465,28 +469,42 @@ exports[`ChoosePassword render matches snapshot 1`] = `
{
"color": "#121314",
"fontFamily": "Geist Regular",
"fontSize": 16,
"fontSize": 14,
"letterSpacing": 0,
"lineHeight": 24,
"lineHeight": 22,
}
}
>
If I forget this password, MetaMask can't recover it for me.
<Text
accessibilityRole="text"
onPress={[Function]}
style={
{
"color": "#4459ff",
"color": "#686e7d",
"fontFamily": "Geist Regular",
"fontSize": 16,
"fontSize": 14,
"letterSpacing": 0,
"lineHeight": 24,
"lineHeight": 22,
}
}
testID="learn-more-link"
>
Learn more.
If I lose this password, MetaMask can’t reset it.
<Text
accessibilityRole="text"
onPress={[Function]}
style={
{
"color": "#4459ff",
"fontFamily": "Geist Regular",
"fontSize": 14,
"letterSpacing": 0,
"lineHeight": 22,
}
}
testID="learn-more-link"
>

Learn more.
</Text>
</Text>
</Text>
</Text>
Expand Down
Loading
Loading