From 7d3ec0c6bd17902b4d31d201d4980d2369d4e520 Mon Sep 17 00:00:00 2001 From: Monte Lai Date: Tue, 29 Apr 2025 22:50:26 +0800 Subject: [PATCH 1/3] fix: add solana privacy link --- .../UI/ManageNetworks/ManageNetworks.test.js | 33 ++++++++++++++++++- .../UI/ManageNetworks/ManageNetworks.tsx | 19 +++++++++-- app/core/AppConstants.ts | 1 + locales/languages/en.json | 3 +- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/app/components/UI/ManageNetworks/ManageNetworks.test.js b/app/components/UI/ManageNetworks/ManageNetworks.test.js index ff2b49d629be..8ce50fafcc7b 100644 --- a/app/components/UI/ManageNetworks/ManageNetworks.test.js +++ b/app/components/UI/ManageNetworks/ManageNetworks.test.js @@ -1,12 +1,20 @@ // Third party dependencies. import React from 'react'; - +import { Linking } from 'react-native'; // Internal dependencies. import ManageNetworks from './ManageNetworks'; import renderWithProvider from '../../../util/test/renderWithProvider'; import { useNavigation } from '@react-navigation/native'; import { useSelector } from 'react-redux'; import { selectNetworkName } from '../../../selectors/networkInfos'; +import AppConstants from '../../../core/AppConstants'; +import { fireEvent } from '@testing-library/react-native'; + +jest.mock('react-native/Libraries/Linking/Linking', () => ({ + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + openURL: jest.fn(), +})); jest.mock('@react-navigation/native', () => { const actualReactNavigation = jest.requireActual('@react-navigation/native'); @@ -35,4 +43,27 @@ describe('ManageNetworks', () => { ); expect(toJSON()).toMatchSnapshot(); }); + + it.each([ + [ + { + link: AppConstants.URLS.PRIVACY_POLICY_2024, + testId: 'privacy-policy-link', + }, + { + link: AppConstants.URLS.ADD_SOLANA_ACCOUNT_PRIVACY_POLICY, + testId: 'solana-privacy-policy-link', + }, + ], + ])('opens link %link', ({ link, testId }) => { + useSelector.mockImplementation((selector) => { + if (selector === selectNetworkName) return mockNetworkName; + }); + const { getByTestId } = renderWithProvider( + , + ); + const button = getByTestId(testId); + fireEvent.press(button); + expect(Linking.openURL).toHaveBeenCalledWith(link); + }); }); diff --git a/app/components/UI/ManageNetworks/ManageNetworks.tsx b/app/components/UI/ManageNetworks/ManageNetworks.tsx index 23ffd01d9d29..a9276e940454 100644 --- a/app/components/UI/ManageNetworks/ManageNetworks.tsx +++ b/app/components/UI/ManageNetworks/ManageNetworks.tsx @@ -43,8 +43,8 @@ export default function ManageNetworksComponent() { ); }, [navigation, trackEvent, chainId, createEventBuilder]); - const handleLink = () => { - Linking.openURL(AppConstants.URLS.PRIVACY_POLICY_2024); + const handleLink = (link: string) => { + Linking.openURL(link); }; return ( @@ -60,10 +60,23 @@ export default function ManageNetworksComponent() { style={styles.description} > {strings('default_settings.manage_networks_body')} - + handleLink(AppConstants.URLS.PRIVACY_POLICY_2024)} + > {strings('default_settings.privacy_policy')} {strings('default_settings.manage_networks_body2')} + + handleLink(AppConstants.URLS.ADD_SOLANA_ACCOUNT_PRIVACY_POLICY) + } + > + {strings('default_settings.manage_networks_body3')} + Date: Tue, 29 Apr 2025 23:33:25 +0800 Subject: [PATCH 2/3] fix: snapshot --- .../__snapshots__/ManageNetworks.test.js.snap | 20 ++++++++++++++++++- .../__snapshots__/index.test.tsx.snap | 20 ++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/app/components/UI/ManageNetworks/__snapshots__/ManageNetworks.test.js.snap b/app/components/UI/ManageNetworks/__snapshots__/ManageNetworks.test.js.snap index 7dc1d914c7d4..75a29e9c5ff4 100644 --- a/app/components/UI/ManageNetworks/__snapshots__/ManageNetworks.test.js.snap +++ b/app/components/UI/ManageNetworks/__snapshots__/ManageNetworks.test.js.snap @@ -62,10 +62,28 @@ exports[`ManageNetworks should render correctly 1`] = ` "lineHeight": 24, } } + testID="privacy-policy-link" > Privacy policy - to learn more about how Infura handles data. + to learn more about how Infura handles data for EVM accounts, for Solana accounts + + click here. + Privacy policy - to learn more about how Infura handles data. + to learn more about how Infura handles data for EVM accounts, for Solana accounts + + click here. + Date: Wed, 7 May 2025 08:31:47 +0800 Subject: [PATCH 3/3] refactor: wrap link in useCallback. --- .../UI/ManageNetworks/ManageNetworks.tsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/components/UI/ManageNetworks/ManageNetworks.tsx b/app/components/UI/ManageNetworks/ManageNetworks.tsx index a9276e940454..ae30e13c073f 100644 --- a/app/components/UI/ManageNetworks/ManageNetworks.tsx +++ b/app/components/UI/ManageNetworks/ManageNetworks.tsx @@ -43,9 +43,13 @@ export default function ManageNetworksComponent() { ); }, [navigation, trackEvent, chainId, createEventBuilder]); - const handleLink = (link: string) => { - Linking.openURL(link); - }; + const openPrivacyPolicyLink = useCallback(() => { + Linking.openURL(AppConstants.URLS.PRIVACY_POLICY_2024); + }, []); + + const openAddSolanaAccountPrivacyPolicyLink = useCallback(() => { + Linking.openURL(AppConstants.URLS.ADD_SOLANA_ACCOUNT_PRIVACY_POLICY); + }, []); return ( @@ -63,7 +67,7 @@ export default function ManageNetworksComponent() { handleLink(AppConstants.URLS.PRIVACY_POLICY_2024)} + onPress={openPrivacyPolicyLink} > {strings('default_settings.privacy_policy')} @@ -71,9 +75,7 @@ export default function ManageNetworksComponent() { - handleLink(AppConstants.URLS.ADD_SOLANA_ACCOUNT_PRIVACY_POLICY) - } + onPress={openAddSolanaAccountPrivacyPolicyLink} > {strings('default_settings.manage_networks_body3')}