From 899afae7016ef385a955e93806365d261ff58b75 Mon Sep 17 00:00:00 2001 From: Jyoti Puri Date: Mon, 10 Jun 2024 23:19:17 +0530 Subject: [PATCH] Simulations on signature pages should be displayed only if preference is enabled --- .../info/personal-sign/personal-sign.test.tsx | 7 ++++++- .../info/personal-sign/personal-sign.tsx | 4 +++- .../info/typed-sign/typed-sign.test.tsx | 6 +++++- .../confirm/info/typed-sign/typed-sign.tsx | 5 ++++- .../selectors/preferences.test.ts | 19 +++++++++++++++++++ .../confirmations/selectors/preferences.ts | 8 ++++++++ 6 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 ui/pages/confirmations/selectors/preferences.test.ts create mode 100644 ui/pages/confirmations/selectors/preferences.ts diff --git a/ui/pages/confirmations/components/confirm/info/personal-sign/personal-sign.test.tsx b/ui/pages/confirmations/components/confirm/info/personal-sign/personal-sign.test.tsx index 92c3393b3bc1..67cabe3f667f 100644 --- a/ui/pages/confirmations/components/confirm/info/personal-sign/personal-sign.test.tsx +++ b/ui/pages/confirmations/components/confirm/info/personal-sign/personal-sign.test.tsx @@ -24,6 +24,7 @@ describe('PersonalSignInfo', () => { it('does not render if required data is not present in the transaction', () => { const state = { + ...mockState, confirm: { currentConfirmation: { id: '0050d5b0-c023-11ee-a0cb-3390a510a0ab', @@ -74,9 +75,13 @@ describe('PersonalSignInfo', () => { expect(getByText('Signing in with')).toBeDefined(); }); - it('display simulation for SIWE request', () => { + it('display simulation for SIWE request if preference useTransactionSimulations is enabled', () => { const state = { ...mockState, + metamask: { + ...mockState.metamask, + useTransactionSimulations: true, + }, confirm: { currentConfirmation: signatureRequestSIWE, }, diff --git a/ui/pages/confirmations/components/confirm/info/personal-sign/personal-sign.tsx b/ui/pages/confirmations/components/confirm/info/personal-sign/personal-sign.tsx index e9decf94e752..f2a0e223c6a5 100644 --- a/ui/pages/confirmations/components/confirm/info/personal-sign/personal-sign.tsx +++ b/ui/pages/confirmations/components/confirm/info/personal-sign/personal-sign.tsx @@ -19,6 +19,7 @@ import { sanitizeString, } from '../../../../../../helpers/utils/util'; import { SignatureRequestType } from '../../../../types/confirm'; +import { getUseTransactionSimulations } from '../../../../selectors/preferences'; import { isSIWESignatureRequest } from '../../../../utils'; import { AlertRow } from '../../../../../../components/app/confirm/info/row/alert-row/alert-row'; @@ -27,6 +28,7 @@ const PersonalSignInfo: React.FC = () => { const currentConfirmation = useSelector( currentConfirmationSelector, ) as SignatureRequestType; + const useTransactionSimulations = useSelector(getUseTransactionSimulations); if (!currentConfirmation?.msgParams) { return null; @@ -37,7 +39,7 @@ const PersonalSignInfo: React.FC = () => { return ( <> - {isSiweSigReq && ( + {isSiweSigReq && useTransactionSimulations && ( { expect(container).toMatchSnapshot(); }); - it('display simulation details for permit signature', () => { + it('display simulation details for permit signature if flag useTransactionSimulations is set', () => { const state = { ...mockState, + metamask: { + ...mockState.metamask, + useTransactionSimulations: true, + }, confirm: { currentConfirmation: permitSignatureMsg, }, diff --git a/ui/pages/confirmations/components/confirm/info/typed-sign/typed-sign.tsx b/ui/pages/confirmations/components/confirm/info/typed-sign/typed-sign.tsx index ed4cb30f3360..6395ff8849c9 100644 --- a/ui/pages/confirmations/components/confirm/info/typed-sign/typed-sign.tsx +++ b/ui/pages/confirmations/components/confirm/info/typed-sign/typed-sign.tsx @@ -18,6 +18,7 @@ import { import { EIP712_PRIMARY_TYPE_PERMIT } from '../../../../constants'; import { SignatureRequestType } from '../../../../types/confirm'; import { parseTypedDataMessage } from '../../../../utils'; +import { getUseTransactionSimulations } from '../../../../selectors/preferences'; import { ConfirmInfoRowTypedSignData } from '../../row/typed-sign-data/typedSignData'; import { PermitSimulation } from './permit-simulation'; @@ -26,6 +27,7 @@ const TypedSignInfo: React.FC = () => { const currentConfirmation = useSelector( currentConfirmationSelector, ) as SignatureRequestType; + const useTransactionSimulations = useSelector(getUseTransactionSimulations); if (!currentConfirmation?.msgParams) { return null; @@ -39,7 +41,8 @@ const TypedSignInfo: React.FC = () => { return ( <> - {primaryType === EIP712_PRIMARY_TYPE_PERMIT && } + {primaryType === EIP712_PRIMARY_TYPE_PERMIT && + useTransactionSimulations && } { + describe('getUseTransactionSimulations', () => { + it('returns value of useTransactionSimulations from state', () => { + const result = getUseTransactionSimulations({ + metamask: { + useTransactionSimulations: true, + }, + }); + expect(result).toStrictEqual(true); + }); + + it('returns undefined if useTransactionSimulations is not set', () => { + const result = getUseTransactionSimulations({ metamask: {} }); + expect(result).toStrictEqual(undefined); + }); + }); +}); diff --git a/ui/pages/confirmations/selectors/preferences.ts b/ui/pages/confirmations/selectors/preferences.ts new file mode 100644 index 000000000000..e84775032819 --- /dev/null +++ b/ui/pages/confirmations/selectors/preferences.ts @@ -0,0 +1,8 @@ +export type RootState = { + metamask: { + useTransactionSimulations?: boolean; + }; +}; + +export const getUseTransactionSimulations = (state: RootState) => + state.metamask.useTransactionSimulations;