Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
isHardwareAccount,
} from '../../../../../util/address';
import useApprovalRequest from '../../hooks/useApprovalRequest';
import { useTransactionMetadataRequest } from '../../hooks/transactions/useTransactionMetadataRequest';
import LedgerSignModal from '../../components/modals/ledger-sign-modal';

export interface LedgerContextType {
Expand All @@ -36,7 +37,10 @@ export const LedgerContextProvider: React.FC<{
children: ReactElement[] | ReactElement;
}> = ({ children }) => {
const { approvalRequest } = useApprovalRequest();
const fromAddress = approvalRequest?.requestData?.from as string;
const transactionMetadata = useTransactionMetadataRequest();
const fromAddress =
(approvalRequest?.requestData?.from as string) ||
(transactionMetadata?.txParams?.from as string);
const isLedgerAccount =
isHardwareAccount(fromAddress, [ExtendedKeyringTypes.ledger]) ?? false;
const [ledgerSigningInProgress, setLedgerSigningInProgress] =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ import { ApprovalType } from '@metamask/controller-utils';
import { TransactionType } from '@metamask/transaction-controller';
import { merge, cloneDeep } from 'lodash';

// eslint-disable-next-line import/no-namespace
import { isHardwareAccount } from '../../../../util/address';
import { renderHookWithProvider } from '../../../../util/test/renderWithProvider';
import {
downgradeAccountConfirmation,
Expand All @@ -26,12 +24,6 @@ const disabledFeatureFlags = {
approve: false,
};

jest.mock('../../../../util/address', () => ({
...jest.requireActual('../../../../util/address'),
isHardwareAccount: jest.fn(),
isExternalHardwareAccount: jest.fn(),
}));

jest.mock('../../../../core/Engine', () => ({
getTotalEvmFiatAccountBalance: () => ({ tokenFiat: 10 }),
context: {
Expand All @@ -53,11 +45,9 @@ describe('useConfirmationRedesignEnabled', () => {
const confirmationRedesignFlagsMock = jest.mocked(
selectConfirmationRedesignFlags,
);
const isHardwareAccountMock = jest.mocked(isHardwareAccount);

beforeEach(() => {
jest.clearAllMocks();
isHardwareAccountMock.mockReturnValue(false);
confirmationRedesignFlagsMock.mockReturnValue(disabledFeatureFlags);
});

Expand Down Expand Up @@ -183,24 +173,6 @@ describe('useConfirmationRedesignEnabled', () => {
expect(result.current.isRedesignedEnabled).toBe(false);
});

it('returns false when from address is external hardware account', async () => {
confirmationRedesignFlagsMock.mockReturnValue({
...disabledFeatureFlags,
signatures: true,
staking_confirmations: true,
});

isHardwareAccountMock.mockReturnValue(true);
const { result } = renderHookWithProvider(
useConfirmationRedesignEnabled,
{
state: stakingDepositConfirmationState,
},
);

expect(result.current.isRedesignedEnabled).toBe(false);
});

it('only redesign if transactions is staking deposit', async () => {
confirmationRedesignFlagsMock.mockReturnValue({
...disabledFeatureFlags,
Expand Down Expand Up @@ -344,27 +316,6 @@ describe('useConfirmationRedesignEnabled', () => {
);
});

it('if confirmation is a transaction, validates `txParams.from` is hardware account', () => {
isHardwareAccountMock.mockReturnValue(true);
confirmationRedesignFlagsMock.mockReturnValue({
...disabledFeatureFlags,
transfer: true,
});

const { result } = renderHookWithProvider(useConfirmationRedesignEnabled, {
state: transferConfirmationState,
});

const expectedFromAddress =
transferConfirmationState.engine.backgroundState.TransactionController
.transactions[0].txParams.from;

expect(isHardwareAccountMock).toHaveBeenCalledTimes(1);
expect(isHardwareAccountMock).toHaveBeenCalledWith(expectedFromAddress);

expect(result.current.isRedesignedEnabled).toBe(false);
});

it('returns false if transaction type is not in the list of redesigned transaction types', () => {
const state = cloneDeep(approveERC20TransactionStateMock);
state.engine.backgroundState.TransactionController.transactions[0].type =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import {
ConfirmationRedesignRemoteFlags,
selectConfirmationRedesignFlags,
} from '../../../../selectors/featureFlagController/confirmations';
import { isHardwareAccount } from '../../../../util/address';
import { isStakingConfirmation } from '../utils/confirm';
import {
REDESIGNED_APPROVE_TYPES,
Expand Down Expand Up @@ -39,12 +38,10 @@ function isRedesignedSignature({
function isRedesignedTransaction({
approvalRequestType,
confirmationRedesignFlags,
fromAddress,
transactionMetadata,
}: {
approvalRequestType: ApprovalType;
confirmationRedesignFlags: ConfirmationRedesignRemoteFlags;
fromAddress: string;
transactionMetadata?: TransactionMeta;
}) {
const transactionType = transactionMetadata?.type as TransactionType;
Expand All @@ -54,8 +51,7 @@ function isRedesignedTransaction({
if (
!isTransactionTypeRedesigned ||
approvalRequestType !== ApprovalType.Transaction ||
!transactionMetadata ||
isHardwareAccount(fromAddress)
!transactionMetadata
) {
return false;
}
Expand Down Expand Up @@ -100,8 +96,6 @@ export const useConfirmationRedesignEnabled = () => {
const confirmationRedesignFlags = useSelector(
selectConfirmationRedesignFlags,
);
const fromAddress =
transactionMetadata?.txParams?.from ?? approvalRequest?.requestData?.from;

const approvalRequestType = approvalRequest?.type as ApprovalType;

Expand All @@ -114,16 +108,10 @@ export const useConfirmationRedesignEnabled = () => {
isRedesignedTransaction({
approvalRequestType,
confirmationRedesignFlags,
fromAddress,
transactionMetadata,
}) ||
isBatchTransaction(approvalRequestType),
[
approvalRequestType,
confirmationRedesignFlags,
fromAddress,
transactionMetadata,
],
[approvalRequestType, confirmationRedesignFlags, transactionMetadata],
);

return { isRedesignedEnabled };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import { connect } from 'react-redux';
import {
setSelectedAsset,
prepareTransaction,
setTransactionObject,
resetTransaction,
setMaxValueMode,
} from '../../../../../../actions/transaction';
Expand Down Expand Up @@ -707,8 +706,7 @@ class Amount extends PureComponent {
);

const shouldUseRedesignedTransferConfirmation =
isRedesignedTransferConfirmationEnabledForTransfer &&
!isHardwareAccount(transaction.from);
isRedesignedTransferConfirmationEnabledForTransfer;

setSelectedAsset(selectedAsset);
if (onConfirm) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { AmountViewSelectorsIDs } from '../../../../../../../e2e/selectors/SendF
import { backgroundState } from '../../../../../../util/test/initial-root-state';
import { setMaxValueMode } from '../../../../../../actions/transaction';
import Routes from '../../../../../../constants/navigation/Routes';
import { isHardwareAccount } from '../../../../../../util/address';

const mockTransactionTypes = TransactionTypes;

Expand Down Expand Up @@ -229,14 +228,12 @@ describe('Amount', () => {
const mockSelectConfirmationRedesignFlags = jest.mocked(
selectConfirmationRedesignFlags,
);
const mockIsHardwareAccount = jest.mocked(isHardwareAccount);

beforeEach(() => {
mockNavigate.mockClear();
mockSelectConfirmationRedesignFlags.mockReturnValue({
transfer: false,
} as ReturnType<typeof selectConfirmationRedesignFlags>);
mockIsHardwareAccount.mockReturnValue(false);
});

it('renders correctly', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,20 @@ describe('handleShowNotification', () => {
).not.toHaveBeenCalled();
});

it('not call watchSubmittedTransaction for failed transaction', () => {
const transactionMeta = {
type: TransactionType.stakingDeposit,
id: '123',
status: 'failed',
} as unknown as TransactionMeta;

handleShowNotification(transactionMeta);

expect(
NotificationManager.watchSubmittedTransaction,
).not.toHaveBeenCalled();
});

it('handle undefined transaction type', () => {
const transactionMeta = {
type: undefined,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
import {
TransactionType,
TransactionStatus,
type TransactionMeta,
} from '@metamask/transaction-controller';
import NotificationManager from '../../../../NotificationManager';
import { REDESIGNED_TRANSACTION_TYPES } from '../../../../../components/Views/confirmations/constants/confirmations';

export function handleShowNotification(transactionMeta: TransactionMeta) {
const { status } = transactionMeta;
if (
REDESIGNED_TRANSACTION_TYPES.includes(
transactionMeta.type as TransactionType,
)
) &&
status !== TransactionStatus.failed
) {
NotificationManager.watchSubmittedTransaction(transactionMeta);
}
Expand Down
Loading