Add test for fillOrder and dispatchTransferFrom where maker == taker
This commit is contained in:
@@ -8,7 +8,10 @@ import { LogWithDecodedArgs } from 'ethereum-types';
|
||||
import ethUtil = require('ethereumjs-util');
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { DummyERC20TokenContract } from '../../generated_contract_wrappers/dummy_erc20_token';
|
||||
import {
|
||||
DummyERC20TokenContract,
|
||||
DummyERC20TokenTransferEventArgs,
|
||||
} from '../../generated_contract_wrappers/dummy_erc20_token';
|
||||
import { DummyERC721TokenContract } from '../../generated_contract_wrappers/dummy_erc721_token';
|
||||
import { DummyNoReturnERC20TokenContract } from '../../generated_contract_wrappers/dummy_no_return_erc20_token';
|
||||
import { ERC20ProxyContract } from '../../generated_contract_wrappers/erc20_proxy';
|
||||
@@ -243,6 +246,40 @@ describe('Exchange core', () => {
|
||||
RevertReason.ValidatorError,
|
||||
);
|
||||
});
|
||||
|
||||
it('should not emit transfer events for transfers where from == to', async () => {
|
||||
const txReceipt = await exchangeWrapper.fillOrderAsync(signedOrder, makerAddress);
|
||||
const logs = txReceipt.logs;
|
||||
const transferLogs = _.filter(
|
||||
logs,
|
||||
log => (log as LogWithDecodedArgs<DummyERC20TokenTransferEventArgs>).event === 'Transfer',
|
||||
);
|
||||
expect(transferLogs.length).to.be.equal(2);
|
||||
expect((transferLogs[0] as LogWithDecodedArgs<DummyERC20TokenTransferEventArgs>).address).to.be.equal(
|
||||
zrxToken.address,
|
||||
);
|
||||
expect((transferLogs[0] as LogWithDecodedArgs<DummyERC20TokenTransferEventArgs>).args._from).to.be.equal(
|
||||
makerAddress,
|
||||
);
|
||||
expect((transferLogs[0] as LogWithDecodedArgs<DummyERC20TokenTransferEventArgs>).args._to).to.be.equal(
|
||||
feeRecipientAddress,
|
||||
);
|
||||
expect(
|
||||
(transferLogs[0] as LogWithDecodedArgs<DummyERC20TokenTransferEventArgs>).args._value,
|
||||
).to.be.bignumber.equal(signedOrder.makerFee);
|
||||
expect((transferLogs[1] as LogWithDecodedArgs<DummyERC20TokenTransferEventArgs>).address).to.be.equal(
|
||||
zrxToken.address,
|
||||
);
|
||||
expect((transferLogs[1] as LogWithDecodedArgs<DummyERC20TokenTransferEventArgs>).args._from).to.be.equal(
|
||||
makerAddress,
|
||||
);
|
||||
expect((transferLogs[1] as LogWithDecodedArgs<DummyERC20TokenTransferEventArgs>).args._to).to.be.equal(
|
||||
feeRecipientAddress,
|
||||
);
|
||||
expect(
|
||||
(transferLogs[1] as LogWithDecodedArgs<DummyERC20TokenTransferEventArgs>).args._value,
|
||||
).to.be.bignumber.equal(signedOrder.takerFee);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Testing exchange of ERC20 tokens with no return values', () => {
|
||||
|
@@ -205,6 +205,60 @@ describe('AssetProxyDispatcher', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('should not dispatch a transfer if amount == 0', async () => {
|
||||
// Register ERC20 proxy
|
||||
await web3Wrapper.awaitTransactionSuccessAsync(
|
||||
await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync(erc20Proxy.address, { from: owner }),
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
||||
);
|
||||
// Construct metadata for ERC20 proxy
|
||||
const encodedAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
|
||||
|
||||
// Perform a transfer from makerAddress to takerAddress
|
||||
const erc20Balances = await erc20Wrapper.getBalancesAsync();
|
||||
const amount = constants.ZERO_AMOUNT;
|
||||
const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(
|
||||
await assetProxyDispatcher.publicDispatchTransferFrom.sendTransactionAsync(
|
||||
encodedAssetData,
|
||||
makerAddress,
|
||||
takerAddress,
|
||||
amount,
|
||||
{ from: owner },
|
||||
),
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
||||
);
|
||||
expect(txReceipt.logs.length).to.be.equal(0);
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
expect(newBalances).to.deep.equal(erc20Balances);
|
||||
});
|
||||
|
||||
it('should not dispatch a transfer if from == to', async () => {
|
||||
// Register ERC20 proxy
|
||||
await web3Wrapper.awaitTransactionSuccessAsync(
|
||||
await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync(erc20Proxy.address, { from: owner }),
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
||||
);
|
||||
// Construct metadata for ERC20 proxy
|
||||
const encodedAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
|
||||
|
||||
// Perform a transfer from makerAddress to takerAddress
|
||||
const erc20Balances = await erc20Wrapper.getBalancesAsync();
|
||||
const amount = new BigNumber(10);
|
||||
const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(
|
||||
await assetProxyDispatcher.publicDispatchTransferFrom.sendTransactionAsync(
|
||||
encodedAssetData,
|
||||
makerAddress,
|
||||
makerAddress,
|
||||
amount,
|
||||
{ from: owner },
|
||||
),
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
||||
);
|
||||
expect(txReceipt.logs.length).to.be.equal(0);
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
expect(newBalances).to.deep.equal(erc20Balances);
|
||||
});
|
||||
|
||||
it('should throw if dispatching to unregistered proxy', async () => {
|
||||
// Construct metadata for ERC20 proxy
|
||||
const encodedAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
|
||||
|
Reference in New Issue
Block a user