import React from 'react' import assert from 'assert' import { shallow } from 'enzyme' import sinon from 'sinon' import SendFromRow from '../send-from-row.component.js' import SendRowWrapper from '../../send-row-wrapper/send-row-wrapper.component' import FromDropdown from '../from-dropdown/from-dropdown.component' const propsMethodSpies = { closeFromDropdown: sinon.spy(), openFromDropdown: sinon.spy(), updateSendFrom: sinon.spy(), setSendTokenBalance: sinon.spy(), } sinon.spy(SendFromRow.prototype, 'handleFromChange') describe('SendFromRow Component', function () { let wrapper let instance beforeEach(() => { wrapper = shallow(, { context: { t: str => str + '_t' } }) instance = wrapper.instance() }) afterEach(() => { propsMethodSpies.closeFromDropdown.resetHistory() propsMethodSpies.openFromDropdown.resetHistory() propsMethodSpies.updateSendFrom.resetHistory() propsMethodSpies.setSendTokenBalance.resetHistory() SendFromRow.prototype.handleFromChange.resetHistory() }) describe('handleFromChange', () => { it('should call updateSendFrom', () => { assert.equal(propsMethodSpies.updateSendFrom.callCount, 0) instance.handleFromChange('mockFrom') assert.equal(propsMethodSpies.updateSendFrom.callCount, 1) assert.deepEqual( propsMethodSpies.updateSendFrom.getCall(0).args, ['mockFrom'] ) }) it('should call tokenContract.balanceOf and setSendTokenBalance if tokenContract is defined', async () => { wrapper.setProps({ tokenContract: { balanceOf: () => new Promise((resolve) => resolve('mockUsersToken')), }, }) assert.equal(propsMethodSpies.setSendTokenBalance.callCount, 0) await instance.handleFromChange('mockFrom') assert.equal(propsMethodSpies.setSendTokenBalance.callCount, 1) assert.deepEqual( propsMethodSpies.setSendTokenBalance.getCall(0).args, ['mockUsersToken'] ) }) }) describe('render', () => { it('should render a SendRowWrapper component', () => { assert.equal(wrapper.find(SendRowWrapper).length, 1) }) it('should pass the correct props to SendRowWrapper', () => { const { label, } = wrapper.find(SendRowWrapper).props() assert.equal(label, 'from_t:') }) it('should render an FromDropdown as a child of the SendRowWrapper', () => { assert(wrapper.find(SendRowWrapper).childAt(0).is(FromDropdown)) }) it('should render the FromDropdown with the correct props', () => { const { accounts, closeDropdown, conversionRate, dropdownOpen, onSelect, openDropdown, selectedAccount, } = wrapper.find(SendRowWrapper).childAt(0).props() assert.deepEqual(accounts, ['mockAccount']) assert.equal(dropdownOpen, false) assert.equal(conversionRate, 15) assert.deepEqual(selectedAccount, { address: 'mockAddress' }) assert.equal(propsMethodSpies.closeFromDropdown.callCount, 0) closeDropdown() assert.equal(propsMethodSpies.closeFromDropdown.callCount, 1) assert.equal(propsMethodSpies.openFromDropdown.callCount, 0) openDropdown() assert.equal(propsMethodSpies.openFromDropdown.callCount, 1) assert.equal(SendFromRow.prototype.handleFromChange.callCount, 0) onSelect('mockNewFrom') assert.equal(SendFromRow.prototype.handleFromChange.callCount, 1) assert.deepEqual( SendFromRow.prototype.handleFromChange.getCall(0).args, ['mockNewFrom'] ) }) }) })