import React from 'react';
import sinon from 'sinon';
import thunk from 'redux-thunk';
import { fireEvent } from '@testing-library/react';
import configureMockStore from 'redux-mock-store';
import { tick } from '../../../../../test/lib/tick';
import { renderWithProvider } from '../../../../../test/lib/render-helpers';
import * as actions from '../../../../store/actions';
import { KOVAN_CHAIN_ID } from '../../../../../shared/constants/network';
import UnconnectedAccountAlert from '.';
describe('Unconnected Account Alert', () => {
const selectedAddress = '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b';
const identities = {
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': {
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
name: 'Account 1',
},
'0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b': {
address: '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b',
name: 'Account 2',
},
};
const accounts = {
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': {
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
balance: '0x0',
},
'0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b': {
address: '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b',
balance: '0x0',
},
};
const cachedBalances = {
[KOVAN_CHAIN_ID]: {
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': '0x0',
'0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b': '0x0',
},
};
const keyrings = [
{
type: 'HD Key Tree',
accounts: [
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
'0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b',
],
},
];
const mockState = {
metamask: {
selectedAddress,
identities,
accounts,
cachedBalances,
keyrings,
provider: {
chainId: KOVAN_CHAIN_ID,
},
permissionHistory: {
'https://test.dapp': {
eth_accounts: {
accounts: {
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': 1596681857076,
},
},
},
},
subjects: {
'https://test.dapp': {
permissions: {
eth_accounts: {
caveats: [
{
type: 'restrictReturnedAccounts',
value: ['0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc'],
},
],
invoker: 'https://test.dapp',
parentCapability: 'eth_accounts',
},
},
},
},
},
activeTab: {
origin: 'https://test.dapp',
},
unconnectedAccount: {
state: 'OPEN',
},
};
afterEach(() => {
sinon.restore();
});
it('checks that checkbox is checked', () => {
const store = configureMockStore()(mockState);
const { getByRole } = renderWithProvider(
,
store,
);
const dontShowCheckbox = getByRole('checkbox');
expect(dontShowCheckbox.checked).toStrictEqual(false);
fireEvent.click(dontShowCheckbox);
expect(dontShowCheckbox.checked).toStrictEqual(true);
});
it('clicks dismiss button and calls dismissAlert action', () => {
const store = configureMockStore()(mockState);
const { getByText } = renderWithProvider(
,
store,
);
const dismissButton = getByText(/Dismiss/u);
fireEvent.click(dismissButton);
expect(store.getActions()[0].type).toStrictEqual(
'unconnectedAccount/dismissAlert',
);
});
it('clicks Dont Show checkbox and dismiss to call disable alert request action', async () => {
sinon.stub(actions, 'setAlertEnabledness').returns(() => Promise.resolve());
const store = configureMockStore([thunk])(mockState);
const { getByText, getByRole } = renderWithProvider(
,
store,
);
const dismissButton = getByText(/Dismiss/u);
const dontShowCheckbox = getByRole('checkbox');
fireEvent.click(dontShowCheckbox);
fireEvent.click(dismissButton);
await tick();
expect(store.getActions()[0].type).toStrictEqual(
'unconnectedAccount/disableAlertRequested',
);
expect(store.getActions()[1].type).toStrictEqual(
'unconnectedAccount/disableAlertSucceeded',
);
});
});