import React from 'react';
import { renderWithLocalization } from '../../../../../test/lib/render-helpers';
import { Severity } from '../../../../helpers/constants/design-system';
import {
BlockaidReason,
BlockaidResultType,
} from '../../../../../shared/constants/security-provider';
import BlockaidBannerAlert from '.';
const mockPpomResponse = {
resultType: BlockaidResultType.Warning,
reason: BlockaidReason.setApprovalForAll,
description:
'A SetApprovalForAll request was made on {contract}. We found the operator {operator} to be malicious',
args: {
contract: '0xa7206d878c5c3871826dfdb42191c49b1d11f466',
operator: '0x92a3b9773b1763efa556f55ccbeb20441962d9b2',
},
};
describe('Blockaid Banner Alert', () => {
it(`should not render when ppomResponse.resultType is '${BlockaidResultType.Benign}'`, () => {
const { container } = renderWithLocalization(
,
);
expect(container.querySelector('.mm-banner-alert')).toBeNull();
});
it(`should render '${Severity.Danger}' UI when ppomResponse.resultType is '${BlockaidResultType.Malicious}`, () => {
const { container } = renderWithLocalization(
,
);
const dangerBannerAlert = container.querySelector(
'.mm-banner-alert--severity-danger',
);
expect(dangerBannerAlert).toBeInTheDocument();
expect(dangerBannerAlert).toMatchSnapshot();
});
it(`should render '${Severity.Warning}' UI when ppomResponse.resultType is '${BlockaidResultType.Warning}`, () => {
const { container } = renderWithLocalization(
,
);
const warningBannerAlert = container.querySelector(
'.mm-banner-alert--severity-warning',
);
expect(warningBannerAlert).toBeInTheDocument();
expect(warningBannerAlert).toMatchSnapshot();
});
it('should render title, "This is a deceptive request"', () => {
const { getByText } = renderWithLocalization(
,
);
expect(getByText('This is a deceptive request')).toBeInTheDocument();
});
it('should render title, "This is a suspicious request", when the reason is "raw_signature_farming"', () => {
const { getByText } = renderWithLocalization(
,
);
expect(getByText('This is a suspicious request')).toBeInTheDocument();
});
it('should render details when provided', () => {
const mockFeatures = [
'Operator is an EOA',
'Operator is untrusted according to previous activity',
];
const { container, getByText } = renderWithLocalization(
,
);
expect(container).toMatchSnapshot();
expect(container.querySelector('.disclosure')).toBeInTheDocument();
mockFeatures.forEach((feature) => {
expect(getByText(`• ${feature}`)).toBeInTheDocument();
});
});
describe('when rendering description', () => {
Object.entries({
[BlockaidReason.approvalFarming]:
'If you approve this request, a third party known for scams might take all your assets.',
[BlockaidReason.blurFarming]:
'If you approve this request, someone can steal your assets listed on Blur.',
[BlockaidReason.maliciousDomain]:
"You're interacting with a malicious domain. If you approve this request, you might lose your assets.",
[BlockaidReason.other]:
'If you approve this request, you might lose your assets.',
[BlockaidReason.permitFarming]:
'If you approve this request, a third party known for scams might take all your assets.',
[BlockaidReason.rawNativeTokenTransfer]:
'If you approve this request, a third party known for scams will take all your assets.',
[BlockaidReason.rawSignatureFarming]:
'If you approve this request, you might lose your assets.',
[BlockaidReason.seaportFarming]:
'If you approve this request, someone can steal your assets listed on OpenSea.',
[BlockaidReason.setApprovalForAll]:
'If you approve this request, a third party known for scams might take all your assets.',
[BlockaidReason.tradeOrderFarming]:
'If you approve this request, you might lose your assets.',
[BlockaidReason.transferFromFarming]:
'If you approve this request, a third party known for scams will take all your assets.',
[BlockaidReason.transferFarming]:
'If you approve this request, a third party known for scams will take all your assets.',
[BlockaidReason.unfairTrade]:
'If you approve this request, you might lose your assets.',
}).forEach(([reason, expectedDescription]) => {
it(`should render for '${reason}' correctly`, () => {
const { getByText } = renderWithLocalization(
,
);
expect(getByText(expectedDescription)).toBeInTheDocument();
});
});
});
});