import assert from 'assert'; import React from 'react'; import { shallow } from 'enzyme'; import sinon from 'sinon'; import AddRecipient from '../add-recipient.component'; import Dialog from '../../../../../components/ui/dialog'; const propsMethodSpies = { closeToDropdown: sinon.spy(), openToDropdown: sinon.spy(), updateGas: sinon.spy(), updateSendTo: sinon.spy(), updateSendToError: sinon.spy(), updateSendToWarning: sinon.spy(), }; describe('AddRecipient Component', function () { let wrapper; let instance; beforeEach(function () { wrapper = shallow( , { context: { t: (str) => `${str}_t` } }, ); instance = wrapper.instance(); }); afterEach(function () { propsMethodSpies.closeToDropdown.resetHistory(); propsMethodSpies.openToDropdown.resetHistory(); propsMethodSpies.updateSendTo.resetHistory(); propsMethodSpies.updateSendToError.resetHistory(); propsMethodSpies.updateSendToWarning.resetHistory(); propsMethodSpies.updateGas.resetHistory(); }); describe('selectRecipient', function () { it('should call updateSendTo', function () { assert.strictEqual(propsMethodSpies.updateSendTo.callCount, 0); instance.selectRecipient('mockTo2', 'mockNickname'); assert.strictEqual(propsMethodSpies.updateSendTo.callCount, 1); assert.deepStrictEqual(propsMethodSpies.updateSendTo.getCall(0).args, [ 'mockTo2', 'mockNickname', ]); }); it('should call updateGas if there is no to error', function () { assert.strictEqual(propsMethodSpies.updateGas.callCount, 0); instance.selectRecipient(false); assert.strictEqual(propsMethodSpies.updateGas.callCount, 1); }); }); describe('render', function () { it('should render a component', function () { assert.strictEqual( wrapper.find('.send__select-recipient-wrapper').length, 1, ); }); it('should render no content if there are no recents, transfers, and contacts', function () { wrapper.setProps({ ownedAccounts: [], addressBook: [], }); assert.strictEqual( wrapper.find('.send__select-recipient-wrapper__list__link').length, 0, ); assert.strictEqual( wrapper.find('.send__select-recipient-wrapper__group').length, 0, ); }); it('should render transfer', function () { wrapper.setProps({ ownedAccounts: [ { address: '0x123', name: '123' }, { address: '0x124', name: '124' }, ], addressBook: [{ address: '0x456', name: 'test-name' }], }); wrapper.setState({ isShowingTransfer: true }); const xferLink = wrapper.find( '.send__select-recipient-wrapper__list__link', ); assert.strictEqual(xferLink.length, 1); const groups = wrapper.find('RecipientGroup'); assert.strictEqual( groups.shallow().find('.send__select-recipient-wrapper__group').length, 1, ); }); it('should render ContactList', function () { wrapper.setProps({ ownedAccounts: [ { address: '0x123', name: '123' }, { address: '0x124', name: '124' }, ], addressBook: [{ address: '0x125' }], }); const contactList = wrapper.find('ContactList'); assert.strictEqual(contactList.length, 1); }); it('should render contacts', function () { wrapper.setProps({ addressBook: [ { address: '0x125', name: 'alice' }, { address: '0x126', name: 'alex' }, { address: '0x127', name: 'catherine' }, ], }); wrapper.setState({ isShowingTransfer: false }); const xferLink = wrapper.find( '.send__select-recipient-wrapper__list__link', ); assert.strictEqual(xferLink.length, 0); const groups = wrapper.find('ContactList'); assert.strictEqual(groups.length, 1); assert.strictEqual( groups.find('.send__select-recipient-wrapper__group-item').length, 0, ); }); it('should render error when query has no results', function () { wrapper.setProps({ addressBook: [], toError: 'bad', contacts: [], nonContacts: [], }); const dialog = wrapper.find(Dialog); assert.strictEqual(dialog.props().type, 'error'); assert.strictEqual(dialog.props().children, 'bad_t'); assert.strictEqual(dialog.length, 1); }); it('should render error when query has ens does not resolve', function () { wrapper.setProps({ addressBook: [], toError: 'bad', ensResolutionError: 'very bad', contacts: [], nonContacts: [], }); const dialog = wrapper.find(Dialog); assert.strictEqual(dialog.props().type, 'error'); assert.strictEqual(dialog.props().children, 'very bad'); assert.strictEqual(dialog.length, 1); }); it('should not render error when ens resolved', function () { wrapper.setProps({ addressBook: [], toError: 'bad', ensResolution: '0x128', }); const dialog = wrapper.find(Dialog); assert.strictEqual(dialog.length, 0); }); }); });