Merge branch 'v2-prototype' of https://github.com/0xProject/0x-monorepo into feature/improve-linting
This commit is contained in:
@@ -4,6 +4,7 @@ import 'make-promises-safe';
|
||||
|
||||
import { MixinAuthorizableContract } from '../../src/contract_wrappers/generated/mixin_authorizable';
|
||||
import { artifacts } from '../../src/utils/artifacts';
|
||||
import { expectRevertOrAlwaysFailingTransactionAsync } from '../../src/utils/assertions';
|
||||
import { chaiSetup } from '../../src/utils/chai_setup';
|
||||
import { constants } from '../../src/utils/constants';
|
||||
import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper';
|
||||
@@ -42,9 +43,9 @@ describe('Authorizable', () => {
|
||||
});
|
||||
describe('addAuthorizedAddress', () => {
|
||||
it('should throw if not called by owner', async () => {
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
authorizable.addAuthorizedAddress.sendTransactionAsync(notOwner, { from: notOwner }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
it('should allow owner to add an authorized address', async () => {
|
||||
await web3Wrapper.awaitTransactionSuccessAsync(
|
||||
@@ -59,9 +60,9 @@ describe('Authorizable', () => {
|
||||
await authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }),
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
||||
);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -71,11 +72,11 @@ describe('Authorizable', () => {
|
||||
await authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }),
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
||||
);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
authorizable.removeAuthorizedAddress.sendTransactionAsync(address, {
|
||||
from: notOwner,
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should allow owner to remove an authorized address', async () => {
|
||||
@@ -94,11 +95,11 @@ describe('Authorizable', () => {
|
||||
});
|
||||
|
||||
it('should throw if owner attempts to remove an address that is not authorized', async () => {
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
authorizable.removeAuthorizedAddress.sendTransactionAsync(address, {
|
||||
from: owner,
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
|
@@ -8,6 +8,7 @@ import { DummyERC20TokenContract } from '../../src/contract_wrappers/generated/d
|
||||
import { DummyERC721TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c721_token';
|
||||
import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c20_proxy';
|
||||
import { ERC721ProxyContract } from '../../src/contract_wrappers/generated/e_r_c721_proxy';
|
||||
import { expectRevertOrAlwaysFailingTransactionAsync } from '../../src/utils/assertions';
|
||||
import { chaiSetup } from '../../src/utils/chai_setup';
|
||||
import { constants } from '../../src/utils/constants';
|
||||
import { ERC20Wrapper } from '../../src/utils/erc20_wrapper';
|
||||
@@ -142,7 +143,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
||||
);
|
||||
// Perform a transfer; expect this to fail.
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
erc20Proxy.transferFrom.sendTransactionAsync(
|
||||
encodedProxyMetadata,
|
||||
makerAddress,
|
||||
@@ -150,7 +151,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
transferAmount,
|
||||
{ from: notAuthorized },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if requesting address is not authorized', async () => {
|
||||
@@ -158,7 +159,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrxToken.address);
|
||||
// Perform a transfer from makerAddress to takerAddress
|
||||
const amount = new BigNumber(10);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
erc20Proxy.transferFrom.sendTransactionAsync(
|
||||
encodedProxyMetadata,
|
||||
makerAddress,
|
||||
@@ -168,7 +169,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
from: notAuthorized,
|
||||
},
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -215,7 +216,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
const toAddresses = _.times(numTransfers, () => takerAddress);
|
||||
const amounts = _.times(numTransfers, () => amount);
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
erc20Proxy.batchTransferFrom.sendTransactionAsync(
|
||||
assetMetadata,
|
||||
fromAddresses,
|
||||
@@ -223,7 +224,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
amounts,
|
||||
{ from: notAuthorized },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -272,7 +273,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
expect(ownerMakerAsset).to.be.bignumber.equal(makerAddress);
|
||||
// Perform a transfer from makerAddress to takerAddress
|
||||
const amount = new BigNumber(0);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
erc721Proxy.transferFrom.sendTransactionAsync(
|
||||
encodedProxyMetadata,
|
||||
makerAddress,
|
||||
@@ -280,7 +281,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
amount,
|
||||
{ from: exchangeAddress },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if transferring > 1 amount of a token', async () => {
|
||||
@@ -294,7 +295,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
expect(ownerMakerAsset).to.be.bignumber.equal(makerAddress);
|
||||
// Perform a transfer from makerAddress to takerAddress
|
||||
const amount = new BigNumber(500);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
erc721Proxy.transferFrom.sendTransactionAsync(
|
||||
encodedProxyMetadata,
|
||||
makerAddress,
|
||||
@@ -302,7 +303,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
amount,
|
||||
{ from: exchangeAddress },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if allowances are too low', async () => {
|
||||
@@ -320,7 +321,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
);
|
||||
// Perform a transfer; expect this to fail.
|
||||
const amount = new BigNumber(1);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
erc20Proxy.transferFrom.sendTransactionAsync(
|
||||
encodedProxyMetadata,
|
||||
makerAddress,
|
||||
@@ -330,7 +331,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
from: notAuthorized,
|
||||
},
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if requesting address is not authorized', async () => {
|
||||
@@ -341,7 +342,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
);
|
||||
// Perform a transfer from makerAddress to takerAddress
|
||||
const amount = new BigNumber(1);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
erc721Proxy.transferFrom.sendTransactionAsync(
|
||||
encodedProxyMetadata,
|
||||
makerAddress,
|
||||
@@ -349,7 +350,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
amount,
|
||||
{ from: notAuthorized },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -399,7 +400,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
const toAddresses = _.times(numTransfers, () => takerAddress);
|
||||
const amounts = _.times(numTransfers, () => new BigNumber(1));
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
erc721Proxy.batchTransferFrom.sendTransactionAsync(
|
||||
assetMetadata,
|
||||
fromAddresses,
|
||||
@@ -407,7 +408,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
amounts,
|
||||
{ from: notAuthorized },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
|
@@ -13,8 +13,13 @@ import {
|
||||
} from '../src/contract_wrappers/generated/asset_proxy_owner';
|
||||
import { MixinAuthorizableContract } from '../src/contract_wrappers/generated/mixin_authorizable';
|
||||
import { artifacts } from '../src/utils/artifacts';
|
||||
import {
|
||||
expectRevertOrAlwaysFailingTransactionAsync,
|
||||
expectRevertOrContractCallFailedAsync,
|
||||
} from '../src/utils/assertions';
|
||||
import { chaiSetup } from '../src/utils/chai_setup';
|
||||
import { constants } from '../src/utils/constants';
|
||||
import { increaseTimeAndMineBlockAsync } from '../src/utils/increase_time';
|
||||
import { MultiSigWrapper } from '../src/utils/multi_sig_wrapper';
|
||||
import { provider, txDefaults, web3Wrapper } from '../src/utils/web3_wrapper';
|
||||
|
||||
@@ -99,7 +104,7 @@ describe('AssetProxyOwner', () => {
|
||||
});
|
||||
it('should throw if a null address is included in assetProxyContracts', async () => {
|
||||
const assetProxyContractAddresses = [erc20Proxy.address, constants.NULL_ADDRESS];
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
AssetProxyOwnerContract.deployFrom0xArtifactAsync(
|
||||
artifacts.AssetProxyOwner,
|
||||
provider,
|
||||
@@ -109,7 +114,7 @@ describe('AssetProxyOwner', () => {
|
||||
REQUIRED_APPROVALS,
|
||||
SECONDS_TIME_LOCKED,
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -118,9 +123,9 @@ describe('AssetProxyOwner', () => {
|
||||
const notRemoveAuthorizedAddressData = erc20Proxy.addAuthorizedAddress.getABIEncodedTransactionData(
|
||||
owners[0],
|
||||
);
|
||||
return expect(
|
||||
return expectRevertOrContractCallFailedAsync(
|
||||
multiSig.isFunctionRemoveAuthorizedAddress.callAsync(notRemoveAuthorizedAddressData),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should return true if data is for removeAuthorizedAddress', async () => {
|
||||
@@ -137,9 +142,9 @@ describe('AssetProxyOwner', () => {
|
||||
describe('registerAssetProxy', () => {
|
||||
it('should throw if not called by multisig', async () => {
|
||||
const isRegistered = true;
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
multiSig.registerAssetProxy.sendTransactionAsync(erc20Proxy.address, isRegistered, { from: owners[0] }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should register an address if called by multisig after timelock', async () => {
|
||||
@@ -154,11 +159,12 @@ describe('AssetProxyOwner', () => {
|
||||
registerAssetProxyData,
|
||||
owners[0],
|
||||
);
|
||||
|
||||
const log = submitTxRes.logs[0] as LogWithDecodedArgs<SubmissionContractEventArgs>;
|
||||
const txId = log.args.transactionId;
|
||||
|
||||
await multiSigWrapper.confirmTransactionAsync(txId, owners[1]);
|
||||
await web3Wrapper.increaseTimeAsync(SECONDS_TIME_LOCKED.toNumber());
|
||||
await increaseTimeAndMineBlockAsync(SECONDS_TIME_LOCKED.toNumber());
|
||||
|
||||
const executeTxRes = await multiSigWrapper.executeTransactionAsync(txId, owners[0]);
|
||||
const registerLog = executeTxRes.logs[0] as LogWithDecodedArgs<AssetProxyRegistrationContractEventArgs>;
|
||||
@@ -185,7 +191,7 @@ describe('AssetProxyOwner', () => {
|
||||
const txId = log.args.transactionId;
|
||||
|
||||
await multiSigWrapper.confirmTransactionAsync(txId, owners[1]);
|
||||
await web3Wrapper.increaseTimeAsync(SECONDS_TIME_LOCKED.toNumber());
|
||||
await increaseTimeAndMineBlockAsync(SECONDS_TIME_LOCKED.toNumber());
|
||||
|
||||
const executeTxRes = await multiSigWrapper.executeTransactionAsync(txId, owners[0]);
|
||||
const failureLog = executeTxRes.logs[0] as LogWithDecodedArgs<ExecutionFailureContractEventArgs>;
|
||||
@@ -237,7 +243,7 @@ describe('AssetProxyOwner', () => {
|
||||
|
||||
await multiSigWrapper.confirmTransactionAsync(erc20AddAuthorizedAddressTxId, owners[1]);
|
||||
await multiSigWrapper.confirmTransactionAsync(erc721AddAuthorizedAddressTxId, owners[1]);
|
||||
await web3Wrapper.increaseTimeAsync(SECONDS_TIME_LOCKED.toNumber());
|
||||
await increaseTimeAndMineBlockAsync(SECONDS_TIME_LOCKED.toNumber());
|
||||
await multiSigWrapper.executeTransactionAsync(registerAssetProxyTxId, owners[0]);
|
||||
await multiSigWrapper.executeTransactionAsync(erc20AddAuthorizedAddressTxId, owners[0]);
|
||||
await multiSigWrapper.executeTransactionAsync(erc721AddAuthorizedAddressTxId, owners[0]);
|
||||
@@ -255,9 +261,9 @@ describe('AssetProxyOwner', () => {
|
||||
const log = res.logs[0] as LogWithDecodedArgs<SubmissionContractEventArgs>;
|
||||
const txId = log.args.transactionId;
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
multiSig.executeRemoveAuthorizedAddress.sendTransactionAsync(txId, { from: owners[1] }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if tx destination is not registered', async () => {
|
||||
@@ -274,9 +280,9 @@ describe('AssetProxyOwner', () => {
|
||||
|
||||
await multiSigWrapper.confirmTransactionAsync(txId, owners[1]);
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
multiSig.executeRemoveAuthorizedAddress.sendTransactionAsync(txId, { from: owners[1] }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if tx data is not for removeAuthorizedAddress', async () => {
|
||||
@@ -294,9 +300,9 @@ describe('AssetProxyOwner', () => {
|
||||
|
||||
await multiSigWrapper.confirmTransactionAsync(txId, owners[1]);
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
multiSig.executeRemoveAuthorizedAddress.sendTransactionAsync(txId, { from: owners[1] }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should execute removeAuthorizedAddress for registered address if fully confirmed', async () => {
|
||||
@@ -347,9 +353,9 @@ describe('AssetProxyOwner', () => {
|
||||
const isExecuted = tx[3];
|
||||
expect(isExecuted).to.equal(true);
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
multiSig.executeRemoveAuthorizedAddress.sendTransactionAsync(txId, { from: owners[1] }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -6,6 +6,7 @@ import 'make-promises-safe';
|
||||
|
||||
import { WETH9Contract } from '../src/contract_wrappers/generated/weth9';
|
||||
import { artifacts } from '../src/utils/artifacts';
|
||||
import { expectInsufficientFundsAsync, expectRevertOrAlwaysFailingTransactionAsync } from '../src/utils/assertions';
|
||||
import { chaiSetup } from '../src/utils/chai_setup';
|
||||
import { constants } from '../src/utils/constants';
|
||||
import { provider, txDefaults, web3Wrapper } from '../src/utils/web3_wrapper';
|
||||
@@ -45,9 +46,7 @@ describe('EtherToken', () => {
|
||||
const initEthBalance = await web3Wrapper.getBalanceInWeiAsync(account);
|
||||
const ethToDeposit = initEthBalance.plus(1);
|
||||
|
||||
return expect(etherToken.deposit.sendTransactionAsync({ value: ethToDeposit })).to.be.rejectedWith(
|
||||
"ender doesn't have enough funds to send tx.",
|
||||
);
|
||||
return expectInsufficientFundsAsync(etherToken.deposit.sendTransactionAsync({ value: ethToDeposit }));
|
||||
});
|
||||
|
||||
it('should convert deposited Ether to wrapped Ether tokens', async () => {
|
||||
@@ -76,8 +75,8 @@ describe('EtherToken', () => {
|
||||
const initEthTokenBalance = await etherToken.balanceOf.callAsync(account);
|
||||
const ethTokensToWithdraw = initEthTokenBalance.plus(1);
|
||||
|
||||
return expect(etherToken.withdraw.sendTransactionAsync(ethTokensToWithdraw)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
etherToken.withdraw.sendTransactionAsync(ethTokensToWithdraw),
|
||||
);
|
||||
});
|
||||
|
||||
|
@@ -18,6 +18,7 @@ import {
|
||||
FillContractEventArgs,
|
||||
} from '../../src/contract_wrappers/generated/exchange';
|
||||
import { artifacts } from '../../src/utils/artifacts';
|
||||
import { expectRevertOrAlwaysFailingTransactionAsync } from '../../src/utils/assertions';
|
||||
import { chaiSetup } from '../../src/utils/chai_setup';
|
||||
import { constants } from '../../src/utils/constants';
|
||||
import { ERC20Wrapper } from '../../src/utils/erc20_wrapper';
|
||||
@@ -414,8 +415,8 @@ describe('Exchange core', () => {
|
||||
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
|
||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(200), 18),
|
||||
});
|
||||
return expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -431,8 +432,8 @@ describe('Exchange core', () => {
|
||||
const invalidSigBuff = Buffer.concat([v, invalidR, invalidS, signatureType]);
|
||||
const invalidSigHex = `0x${invalidSigBuff.toString('hex')}`;
|
||||
signedOrder.signature = invalidSigHex;
|
||||
return expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -441,8 +442,8 @@ describe('Exchange core', () => {
|
||||
makerAssetAmount: new BigNumber(0),
|
||||
});
|
||||
|
||||
return expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -451,19 +452,19 @@ describe('Exchange core', () => {
|
||||
takerAssetAmount: new BigNumber(0),
|
||||
});
|
||||
|
||||
return expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if takerAssetFillAmount is 0', async () => {
|
||||
signedOrder = orderFactory.newSignedOrder();
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, {
|
||||
takerAssetFillAmount: new BigNumber(0),
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if maker erc20Balances are too low to fill order', async () => {
|
||||
@@ -471,8 +472,8 @@ describe('Exchange core', () => {
|
||||
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100000), 18),
|
||||
});
|
||||
|
||||
return expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -480,9 +481,8 @@ describe('Exchange core', () => {
|
||||
signedOrder = orderFactory.newSignedOrder({
|
||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100000), 18),
|
||||
});
|
||||
|
||||
return expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -493,11 +493,8 @@ describe('Exchange core', () => {
|
||||
}),
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
||||
);
|
||||
// HACK: `rejectWith` returns a "promise-like" type, but not an actual "Promise", so TSLint
|
||||
// complains, even though we do need to `await` it. So we disable the TSLint error below.
|
||||
// tslint:disable-next-line:await-promise
|
||||
await expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -508,11 +505,8 @@ describe('Exchange core', () => {
|
||||
}),
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
||||
);
|
||||
// HACK: `rejectWith` returns a "promise-like" type, but not an actual "Promise", so TSLint
|
||||
// complains, even though we do need to `await` it. So we disable the TSLint error below.
|
||||
// tslint:disable-next-line:await-promise
|
||||
await expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -520,16 +514,16 @@ describe('Exchange core', () => {
|
||||
signedOrder = orderFactory.newSignedOrder({
|
||||
expirationTimeSeconds: new BigNumber(Math.floor((Date.now() - 10000) / 1000)),
|
||||
});
|
||||
return expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if no value is filled', async () => {
|
||||
signedOrder = orderFactory.newSignedOrder();
|
||||
await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress);
|
||||
return expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -541,8 +535,8 @@ describe('Exchange core', () => {
|
||||
});
|
||||
|
||||
it('should throw if not sent by maker', async () => {
|
||||
return expect(exchangeWrapper.cancelOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.cancelOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -551,8 +545,8 @@ describe('Exchange core', () => {
|
||||
makerAssetAmount: new BigNumber(0),
|
||||
});
|
||||
|
||||
return expect(exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -561,18 +555,18 @@ describe('Exchange core', () => {
|
||||
takerAssetAmount: new BigNumber(0),
|
||||
});
|
||||
|
||||
return expect(exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
it('should be able to cancel a full order', async () => {
|
||||
await exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, {
|
||||
takerAssetFillAmount: signedOrder.takerAssetAmount.div(2),
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should log 1 event with correct arguments', async () => {
|
||||
@@ -591,8 +585,8 @@ describe('Exchange core', () => {
|
||||
|
||||
it('should throw if already cancelled', async () => {
|
||||
await exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress);
|
||||
return expect(exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -600,8 +594,8 @@ describe('Exchange core', () => {
|
||||
signedOrder = orderFactory.newSignedOrder({
|
||||
expirationTimeSeconds: new BigNumber(Math.floor((Date.now() - 10000) / 1000)),
|
||||
});
|
||||
return expect(exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -617,11 +611,11 @@ describe('Exchange core', () => {
|
||||
});
|
||||
|
||||
const fillTakerAssetAmount2 = new BigNumber(1);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, {
|
||||
takerAssetFillAmount: fillTakerAssetAmount2,
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -630,16 +624,16 @@ describe('Exchange core', () => {
|
||||
const makerEpoch = new BigNumber(1);
|
||||
await exchangeWrapper.cancelOrdersUpToAsync(makerEpoch, makerAddress);
|
||||
const lesserMakerEpoch = new BigNumber(0);
|
||||
return expect(exchangeWrapper.cancelOrdersUpToAsync(lesserMakerEpoch, makerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.cancelOrdersUpToAsync(lesserMakerEpoch, makerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
it('should fail to set makerEpoch equal to existing makerEpoch', async () => {
|
||||
const makerEpoch = new BigNumber(1);
|
||||
await exchangeWrapper.cancelOrdersUpToAsync(makerEpoch, makerAddress);
|
||||
return expect(exchangeWrapper.cancelOrdersUpToAsync(makerEpoch, makerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.cancelOrdersUpToAsync(makerEpoch, makerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -673,7 +667,12 @@ describe('Exchange core', () => {
|
||||
salt: new BigNumber(3),
|
||||
}),
|
||||
];
|
||||
await exchangeWrapper.batchFillOrdersNoThrowAsync(signedOrders, takerAddress);
|
||||
await exchangeWrapper.batchFillOrdersNoThrowAsync(signedOrders, takerAddress, {
|
||||
// HACK(albrow): We need to hardcode the gas estimate here because
|
||||
// the Geth gas estimator doesn't work with the way we use
|
||||
// delegatecall and swallow errors.
|
||||
gas: 490000,
|
||||
});
|
||||
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
const fillMakerAssetAmount = signedOrders[2].makerAssetAmount.add(signedOrders[3].makerAssetAmount);
|
||||
@@ -748,9 +747,9 @@ describe('Exchange core', () => {
|
||||
expect(initialOwnerTakerAsset).to.be.bignumber.equal(takerAddress);
|
||||
// Call Exchange
|
||||
const takerAssetFillAmount = signedOrder.takerAssetAmount;
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw when taker does not own the token with id takerAssetId', async () => {
|
||||
@@ -770,9 +769,9 @@ describe('Exchange core', () => {
|
||||
expect(initialOwnerTakerAsset).to.be.bignumber.not.equal(takerAddress);
|
||||
// Call Exchange
|
||||
const takerAssetFillAmount = signedOrder.takerAssetAmount;
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw when makerAssetAmount is greater than 1', async () => {
|
||||
@@ -792,9 +791,9 @@ describe('Exchange core', () => {
|
||||
expect(initialOwnerTakerAsset).to.be.bignumber.equal(takerAddress);
|
||||
// Call Exchange
|
||||
const takerAssetFillAmount = signedOrder.takerAssetAmount;
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw when takerAssetAmount is greater than 1', async () => {
|
||||
@@ -814,9 +813,9 @@ describe('Exchange core', () => {
|
||||
expect(initialOwnerTakerAsset).to.be.bignumber.equal(takerAddress);
|
||||
// Call Exchange
|
||||
const takerAssetFillAmount = signedOrder.takerAssetAmount;
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw on partial fill', async () => {
|
||||
@@ -836,9 +835,9 @@ describe('Exchange core', () => {
|
||||
expect(initialOwnerTakerAsset).to.be.bignumber.equal(takerAddress);
|
||||
// Call Exchange
|
||||
const takerAssetFillAmount = signedOrder.takerAssetAmount;
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should successfully fill order when makerAsset is ERC721 and takerAsset is ERC20', async () => {
|
||||
|
@@ -9,6 +9,7 @@ import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c2
|
||||
import { ERC721ProxyContract } from '../../src/contract_wrappers/generated/e_r_c721_proxy';
|
||||
import { TestAssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/test_asset_proxy_dispatcher';
|
||||
import { artifacts } from '../../src/utils/artifacts';
|
||||
import { expectRevertOrAlwaysFailingTransactionAsync } from '../../src/utils/assertions';
|
||||
import { chaiSetup } from '../../src/utils/chai_setup';
|
||||
import { constants } from '../../src/utils/constants';
|
||||
import { ERC20Wrapper } from '../../src/utils/erc20_wrapper';
|
||||
@@ -174,14 +175,14 @@ describe('AssetProxyDispatcher', () => {
|
||||
const proxyAddress = await assetProxyDispatcher.getAssetProxy.callAsync(AssetProxyId.ERC20);
|
||||
expect(proxyAddress).to.be.equal(erc20Proxy.address);
|
||||
// The following transaction will throw because the currentAddress is no longer constants.NULL_ADDRESS
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
assetProxyDispatcher.registerAssetProxy.sendTransactionAsync(
|
||||
AssetProxyId.ERC20,
|
||||
erc20Proxy.address,
|
||||
constants.NULL_ADDRESS,
|
||||
{ from: owner },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should be able to reset proxy address to NULL', async () => {
|
||||
@@ -215,26 +216,26 @@ describe('AssetProxyDispatcher', () => {
|
||||
|
||||
it('should throw if requesting address is not owner', async () => {
|
||||
const prevProxyAddress = constants.NULL_ADDRESS;
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
assetProxyDispatcher.registerAssetProxy.sendTransactionAsync(
|
||||
AssetProxyId.ERC20,
|
||||
erc20Proxy.address,
|
||||
prevProxyAddress,
|
||||
{ from: notOwner },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if attempting to register a proxy to the incorrect id', async () => {
|
||||
const prevProxyAddress = constants.NULL_ADDRESS;
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
assetProxyDispatcher.registerAssetProxy.sendTransactionAsync(
|
||||
AssetProxyId.ERC721,
|
||||
erc20Proxy.address,
|
||||
prevProxyAddress,
|
||||
{ from: owner },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -303,7 +304,7 @@ describe('AssetProxyDispatcher', () => {
|
||||
const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrxToken.address);
|
||||
// Perform a transfer from makerAddress to takerAddress
|
||||
const amount = new BigNumber(10);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
assetProxyDispatcher.publicDispatchTransferFrom.sendTransactionAsync(
|
||||
encodedProxyMetadata,
|
||||
makerAddress,
|
||||
@@ -311,7 +312,7 @@ describe('AssetProxyDispatcher', () => {
|
||||
amount,
|
||||
{ from: owner },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -12,6 +12,7 @@ import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c2
|
||||
import { ERC721ProxyContract } from '../../src/contract_wrappers/generated/e_r_c721_proxy';
|
||||
import { ExchangeContract } from '../../src/contract_wrappers/generated/exchange';
|
||||
import { artifacts } from '../../src/utils/artifacts';
|
||||
import { expectRevertOrAlwaysFailingTransactionAsync } from '../../src/utils/assertions';
|
||||
import { chaiSetup } from '../../src/utils/chai_setup';
|
||||
import { constants } from '../../src/utils/constants';
|
||||
import { ERC20Wrapper } from '../../src/utils/erc20_wrapper';
|
||||
@@ -625,9 +626,9 @@ describe('matchOrders', () => {
|
||||
// Cancel left order
|
||||
await exchangeWrapper.cancelOrderAsync(signedOrderLeft, signedOrderLeft.makerAddress);
|
||||
// Match orders
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.matchOrdersAsync(signedOrderLeft, signedOrderRight, takerAddress),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('Should throw if right order is not fillable', async () => {
|
||||
@@ -651,9 +652,9 @@ describe('matchOrders', () => {
|
||||
// Cancel right order
|
||||
await exchangeWrapper.cancelOrderAsync(signedOrderRight, signedOrderRight.makerAddress);
|
||||
// Match orders
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.matchOrdersAsync(signedOrderLeft, signedOrderRight, takerAddress),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if there is not a positive spread', async () => {
|
||||
@@ -675,7 +676,7 @@ describe('matchOrders', () => {
|
||||
feeRecipientAddress: feeRecipientAddressRight,
|
||||
});
|
||||
// Match orders
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||
signedOrderLeft,
|
||||
signedOrderRight,
|
||||
@@ -683,7 +684,7 @@ describe('matchOrders', () => {
|
||||
erc20BalancesByOwner,
|
||||
erc721TokenIdsByOwner,
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if the left maker asset is not equal to the right taker asset ', async () => {
|
||||
@@ -705,7 +706,7 @@ describe('matchOrders', () => {
|
||||
feeRecipientAddress: feeRecipientAddressRight,
|
||||
});
|
||||
// Match orders
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||
signedOrderLeft,
|
||||
signedOrderRight,
|
||||
@@ -713,7 +714,7 @@ describe('matchOrders', () => {
|
||||
erc20BalancesByOwner,
|
||||
erc721TokenIdsByOwner,
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if the right maker asset is not equal to the left taker asset', async () => {
|
||||
@@ -735,7 +736,7 @@ describe('matchOrders', () => {
|
||||
feeRecipientAddress: feeRecipientAddressRight,
|
||||
});
|
||||
// Match orders
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||
signedOrderLeft,
|
||||
signedOrderRight,
|
||||
@@ -743,7 +744,7 @@ describe('matchOrders', () => {
|
||||
erc20BalancesByOwner,
|
||||
erc721TokenIdsByOwner,
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should transfer correct amounts when left order maker asset is an ERC721 token', async () => {
|
||||
|
@@ -9,6 +9,7 @@ import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c2
|
||||
import { ExchangeContract } from '../../src/contract_wrappers/generated/exchange';
|
||||
import { WhitelistContract } from '../../src/contract_wrappers/generated/whitelist';
|
||||
import { artifacts } from '../../src/utils/artifacts';
|
||||
import { expectRevertOrAlwaysFailingTransactionAsync } from '../../src/utils/assertions';
|
||||
import { chaiSetup } from '../../src/utils/chai_setup';
|
||||
import { constants } from '../../src/utils/constants';
|
||||
import { ERC20Wrapper } from '../../src/utils/erc20_wrapper';
|
||||
@@ -124,8 +125,8 @@ describe('Exchange transactions', () => {
|
||||
});
|
||||
|
||||
it('should throw if not called by specified sender', async () => {
|
||||
return expect(exchangeWrapper.executeTransactionAsync(signedTx, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.executeTransactionAsync(signedTx, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -166,8 +167,8 @@ describe('Exchange transactions', () => {
|
||||
|
||||
it('should throw if the a 0x transaction with the same transactionHash has already been executed', async () => {
|
||||
await exchangeWrapper.executeTransactionAsync(signedTx, senderAddress);
|
||||
return expect(exchangeWrapper.executeTransactionAsync(signedTx, senderAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.executeTransactionAsync(signedTx, senderAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -185,15 +186,15 @@ describe('Exchange transactions', () => {
|
||||
});
|
||||
|
||||
it('should throw if not called by specified sender', async () => {
|
||||
return expect(exchangeWrapper.executeTransactionAsync(signedTx, makerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.executeTransactionAsync(signedTx, makerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
it('should cancel the order when signed by maker and called by sender', async () => {
|
||||
await exchangeWrapper.executeTransactionAsync(signedTx, senderAddress);
|
||||
return expect(exchangeWrapper.fillOrderAsync(signedOrder, senderAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrderAsync(signedOrder, senderAddress),
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -242,7 +243,7 @@ describe('Exchange transactions', () => {
|
||||
orderWithoutExchangeAddress = orderUtils.getOrderWithoutExchangeAddress(signedOrder);
|
||||
const takerAssetFillAmount = signedOrder.takerAssetAmount;
|
||||
const salt = generatePseudoRandomSalt();
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
whitelist.fillOrderIfWhitelisted.sendTransactionAsync(
|
||||
orderWithoutExchangeAddress,
|
||||
takerAssetFillAmount,
|
||||
@@ -250,7 +251,7 @@ describe('Exchange transactions', () => {
|
||||
signedOrder.signature,
|
||||
{ from: takerAddress },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should revert if taker has not been whitelisted', async () => {
|
||||
@@ -262,7 +263,7 @@ describe('Exchange transactions', () => {
|
||||
orderWithoutExchangeAddress = orderUtils.getOrderWithoutExchangeAddress(signedOrder);
|
||||
const takerAssetFillAmount = signedOrder.takerAssetAmount;
|
||||
const salt = generatePseudoRandomSalt();
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
whitelist.fillOrderIfWhitelisted.sendTransactionAsync(
|
||||
orderWithoutExchangeAddress,
|
||||
takerAssetFillAmount,
|
||||
@@ -270,7 +271,7 @@ describe('Exchange transactions', () => {
|
||||
signedOrder.signature,
|
||||
{ from: takerAddress },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should fill the order if maker and taker have been whitelisted', async () => {
|
||||
|
@@ -13,6 +13,7 @@ import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c2
|
||||
import { ERC721ProxyContract } from '../../src/contract_wrappers/generated/e_r_c721_proxy';
|
||||
import { ExchangeContract } from '../../src/contract_wrappers/generated/exchange';
|
||||
import { artifacts } from '../../src/utils/artifacts';
|
||||
import { expectRevertOrAlwaysFailingTransactionAsync } from '../../src/utils/assertions';
|
||||
import { chaiSetup } from '../../src/utils/chai_setup';
|
||||
import { constants } from '../../src/utils/constants';
|
||||
import { ERC20Wrapper } from '../../src/utils/erc20_wrapper';
|
||||
@@ -170,8 +171,8 @@ describe('Exchange wrappers', () => {
|
||||
expirationTimeSeconds: new BigNumber(Math.floor((Date.now() - 10000) / 1000)),
|
||||
});
|
||||
|
||||
return expect(exchangeWrapper.fillOrKillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrKillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -182,8 +183,8 @@ describe('Exchange wrappers', () => {
|
||||
takerAssetFillAmount: signedOrder.takerAssetAmount.div(2),
|
||||
});
|
||||
|
||||
return expect(exchangeWrapper.fillOrKillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.fillOrKillOrderAsync(signedOrder, takerAddress),
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -195,12 +196,16 @@ describe('Exchange wrappers', () => {
|
||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(200), 18),
|
||||
});
|
||||
const takerAssetFillAmount = signedOrder.takerAssetAmount.div(2);
|
||||
|
||||
await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress, {
|
||||
takerAssetFillAmount,
|
||||
// HACK(albrow): We need to hardcode the gas estimate here because
|
||||
// the Geth gas estimator doesn't work with the way we use
|
||||
// delegatecall and swallow errors.
|
||||
gas: 250000,
|
||||
});
|
||||
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
|
||||
const makerAssetFilledAmount = takerAssetFillAmount
|
||||
.times(signedOrder.makerAssetAmount)
|
||||
.dividedToIntegerBy(signedOrder.takerAssetAmount);
|
||||
@@ -210,6 +215,7 @@ describe('Exchange wrappers', () => {
|
||||
const takerFee = signedOrder.takerFee
|
||||
.times(makerAssetFilledAmount)
|
||||
.dividedToIntegerBy(signedOrder.makerAssetAmount);
|
||||
|
||||
expect(newBalances[makerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
|
||||
erc20Balances[makerAddress][defaultMakerAssetAddress].minus(makerAssetFilledAmount),
|
||||
);
|
||||
@@ -358,7 +364,13 @@ describe('Exchange wrappers', () => {
|
||||
expect(initialOwnerTakerAsset).to.be.bignumber.equal(takerAddress);
|
||||
// Call Exchange
|
||||
const takerAssetFillAmount = signedOrder.takerAssetAmount;
|
||||
await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress, { takerAssetFillAmount });
|
||||
await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress, {
|
||||
takerAssetFillAmount,
|
||||
// HACK(albrow): We need to hardcode the gas estimate here because
|
||||
// the Geth gas estimator doesn't work with the way we use
|
||||
// delegatecall and swallow errors.
|
||||
gas: 270000,
|
||||
});
|
||||
// Verify post-conditions
|
||||
const newOwnerMakerAsset = await erc721Token.ownerOf.callAsync(makerAssetId);
|
||||
expect(newOwnerMakerAsset).to.be.bignumber.equal(takerAddress);
|
||||
@@ -483,11 +495,11 @@ describe('Exchange wrappers', () => {
|
||||
|
||||
await exchangeWrapper.fillOrKillOrderAsync(signedOrders[0], takerAddress);
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.batchFillOrKillOrdersAsync(signedOrders, takerAddress, {
|
||||
takerAssetFillAmounts,
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -533,6 +545,10 @@ describe('Exchange wrappers', () => {
|
||||
|
||||
await exchangeWrapper.batchFillOrdersNoThrowAsync(signedOrders, takerAddress, {
|
||||
takerAssetFillAmounts,
|
||||
// HACK(albrow): We need to hardcode the gas estimate here because
|
||||
// the Geth gas estimator doesn't work with the way we use
|
||||
// delegatecall and swallow errors.
|
||||
gas: 600000,
|
||||
});
|
||||
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
@@ -589,6 +605,10 @@ describe('Exchange wrappers', () => {
|
||||
const newOrders = [invalidOrder, ...validOrders];
|
||||
await exchangeWrapper.batchFillOrdersNoThrowAsync(newOrders, takerAddress, {
|
||||
takerAssetFillAmounts,
|
||||
// HACK(albrow): We need to hardcode the gas estimate here because
|
||||
// the Geth gas estimator doesn't work with the way we use
|
||||
// delegatecall and swallow errors.
|
||||
gas: 450000,
|
||||
});
|
||||
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
@@ -677,11 +697,11 @@ describe('Exchange wrappers', () => {
|
||||
orderFactory.newSignedOrder(),
|
||||
];
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.marketSellOrdersAsync(signedOrders, takerAddress, {
|
||||
takerAssetFillAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(1000), 18),
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -751,6 +771,10 @@ describe('Exchange wrappers', () => {
|
||||
});
|
||||
await exchangeWrapper.marketSellOrdersNoThrowAsync(signedOrders, takerAddress, {
|
||||
takerAssetFillAmount,
|
||||
// HACK(albrow): We need to hardcode the gas estimate here because
|
||||
// the Geth gas estimator doesn't work with the way we use
|
||||
// delegatecall and swallow errors.
|
||||
gas: 600000,
|
||||
});
|
||||
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
@@ -766,11 +790,11 @@ describe('Exchange wrappers', () => {
|
||||
orderFactory.newSignedOrder(),
|
||||
];
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.marketSellOrdersNoThrowAsync(signedOrders, takerAddress, {
|
||||
takerAssetFillAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(1000), 18),
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -855,11 +879,11 @@ describe('Exchange wrappers', () => {
|
||||
orderFactory.newSignedOrder(),
|
||||
];
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.marketBuyOrdersAsync(signedOrders, takerAddress, {
|
||||
makerAssetFillAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(1000), 18),
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -929,6 +953,10 @@ describe('Exchange wrappers', () => {
|
||||
});
|
||||
await exchangeWrapper.marketSellOrdersNoThrowAsync(signedOrders, takerAddress, {
|
||||
takerAssetFillAmount,
|
||||
// HACK(albrow): We need to hardcode the gas estimate here because
|
||||
// the Geth gas estimator doesn't work with the way we use
|
||||
// delegatecall and swallow errors.
|
||||
gas: 600000,
|
||||
});
|
||||
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
@@ -944,11 +972,11 @@ describe('Exchange wrappers', () => {
|
||||
orderFactory.newSignedOrder(),
|
||||
];
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
exchangeWrapper.marketBuyOrdersNoThrowAsync(signedOrders, takerAddress, {
|
||||
makerAssetFillAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(1000), 18),
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
|
@@ -6,6 +6,7 @@ import ethUtil = require('ethereumjs-util');
|
||||
|
||||
import { TestLibBytesContract } from '../../src/contract_wrappers/generated/test_lib_bytes';
|
||||
import { artifacts } from '../../src/utils/artifacts';
|
||||
import { expectRevertOrAlwaysFailingTransactionAsync, expectRevertOrOtherErrorAsync } from '../../src/utils/assertions';
|
||||
import { chaiSetup } from '../../src/utils/chai_setup';
|
||||
import { constants } from '../../src/utils/constants';
|
||||
import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper';
|
||||
@@ -57,7 +58,10 @@ describe('LibBytes', () => {
|
||||
|
||||
describe('popByte', () => {
|
||||
it('should revert if length is 0', async () => {
|
||||
return expect(libBytes.publicPopByte.callAsync(constants.NULL_BYTES)).to.be.rejectedWith(constants.REVERT);
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
libBytes.publicPopByte.callAsync(constants.NULL_BYTES),
|
||||
constants.LIB_BYTES_GT_ZERO_LENGTH_REQUIRED,
|
||||
);
|
||||
});
|
||||
|
||||
it('should pop the last byte from the input and return it', async () => {
|
||||
@@ -71,8 +75,9 @@ describe('LibBytes', () => {
|
||||
|
||||
describe('popAddress', () => {
|
||||
it('should revert if length is less than 20', async () => {
|
||||
return expect(libBytes.publicPopAddress.callAsync(byteArrayShorterThan20Bytes)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
libBytes.publicPopAddress.callAsync(byteArrayShorterThan20Bytes),
|
||||
constants.LIB_BYTES_GTE_20_LENGTH_REQUIRED,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -156,16 +161,18 @@ describe('LibBytes', () => {
|
||||
it('should fail if the byte array is too short to hold an address)', async () => {
|
||||
const shortByteArray = '0xabcdef';
|
||||
const offset = new BigNumber(0);
|
||||
return expect(libBytes.publicReadAddress.callAsync(shortByteArray, offset)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
libBytes.publicReadAddress.callAsync(shortByteArray, offset),
|
||||
constants.LIB_BYTES_GTE_20_LENGTH_REQUIRED,
|
||||
);
|
||||
});
|
||||
|
||||
it('should fail if the length between the offset and end of the byte array is too short to hold an address)', async () => {
|
||||
const byteArray = ethUtil.addHexPrefix(testAddress);
|
||||
const badOffset = new BigNumber(ethUtil.toBuffer(byteArray).byteLength);
|
||||
return expect(libBytes.publicReadAddress.callAsync(byteArray, badOffset)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
libBytes.publicReadAddress.callAsync(byteArray, badOffset),
|
||||
constants.LIB_BYTES_GTE_20_LENGTH_REQUIRED,
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -200,15 +207,17 @@ describe('LibBytes', () => {
|
||||
|
||||
it('should fail if the byte array is too short to hold a bytes32)', async () => {
|
||||
const offset = new BigNumber(0);
|
||||
return expect(libBytes.publicReadBytes32.callAsync(byteArrayShorterThan32Bytes, offset)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
libBytes.publicReadBytes32.callAsync(byteArrayShorterThan32Bytes, offset),
|
||||
constants.LIB_BYTES_GTE_32_LENGTH_REQUIRED,
|
||||
);
|
||||
});
|
||||
|
||||
it('should fail if the length between the offset and end of the byte array is too short to hold a bytes32)', async () => {
|
||||
const badOffset = new BigNumber(ethUtil.toBuffer(testBytes32).byteLength);
|
||||
return expect(libBytes.publicReadBytes32.callAsync(testBytes32, badOffset)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
libBytes.publicReadBytes32.callAsync(testBytes32, badOffset),
|
||||
constants.LIB_BYTES_GTE_32_LENGTH_REQUIRED,
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -247,8 +256,9 @@ describe('LibBytes', () => {
|
||||
|
||||
it('should fail if the byte array is too short to hold a uint256)', async () => {
|
||||
const offset = new BigNumber(0);
|
||||
return expect(libBytes.publicReadUint256.callAsync(byteArrayShorterThan32Bytes, offset)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
libBytes.publicReadUint256.callAsync(byteArrayShorterThan32Bytes, offset),
|
||||
constants.LIB_BYTES_GTE_32_LENGTH_REQUIRED,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -257,8 +267,9 @@ describe('LibBytes', () => {
|
||||
const testUint256AsBuffer = ethUtil.toBuffer(formattedTestUint256);
|
||||
const byteArray = ethUtil.bufferToHex(testUint256AsBuffer);
|
||||
const badOffset = new BigNumber(testUint256AsBuffer.byteLength);
|
||||
return expect(libBytes.publicReadUint256.callAsync(byteArray, badOffset)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
libBytes.publicReadUint256.callAsync(byteArray, badOffset),
|
||||
constants.LIB_BYTES_GTE_32_LENGTH_REQUIRED,
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -275,10 +286,12 @@ describe('LibBytes', () => {
|
||||
*/
|
||||
|
||||
describe('readFirst4', () => {
|
||||
// AssertionError: expected promise to be rejected with an error including 'revert' but it was fulfilled with '0x08c379a0'
|
||||
it('should revert if byte array has a length < 4', async () => {
|
||||
const byteArrayLessThan4Bytes = '0x010101';
|
||||
return expect(libBytes.publicReadFirst4.callAsync(byteArrayLessThan4Bytes)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
libBytes.publicReadFirst4.callAsync(byteArrayLessThan4Bytes),
|
||||
constants.LIB_BYTES_GTE_4_LENGTH_REQUIRED,
|
||||
);
|
||||
});
|
||||
it('should return the first 4 bytes of a byte array of arbitrary length', async () => {
|
||||
|
@@ -9,8 +9,10 @@ import {
|
||||
SubmissionContractEventArgs,
|
||||
} from '../src/contract_wrappers/generated/multi_sig_wallet_with_time_lock';
|
||||
import { artifacts } from '../src/utils/artifacts';
|
||||
import { expectRevertOrAlwaysFailingTransactionAsync } from '../src/utils/assertions';
|
||||
import { chaiSetup } from '../src/utils/chai_setup';
|
||||
import { constants } from '../src/utils/constants';
|
||||
import { increaseTimeAndMineBlockAsync } from '../src/utils/increase_time';
|
||||
import { MultiSigWrapper } from '../src/utils/multi_sig_wrapper';
|
||||
import { provider, txDefaults, web3Wrapper } from '../src/utils/web3_wrapper';
|
||||
|
||||
@@ -66,9 +68,9 @@ describe('MultiSigWalletWithTimeLock', () => {
|
||||
});
|
||||
|
||||
it('should throw when not called by wallet', async () => {
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
multiSig.changeTimeLock.sendTransactionAsync(SECONDS_TIME_LOCKED, { from: owners[0] }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw without enough confirmations', async () => {
|
||||
@@ -77,10 +79,9 @@ describe('MultiSigWalletWithTimeLock', () => {
|
||||
const res = await multiSigWrapper.submitTransactionAsync(destination, changeTimeLockData, owners[0]);
|
||||
const log = res.logs[0] as LogWithDecodedArgs<SubmissionContractEventArgs>;
|
||||
const txId = log.args.transactionId;
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
multiSig.executeTransaction.sendTransactionAsync(txId, { from: owners[0] }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should set confirmation time with enough confirmations', async () => {
|
||||
@@ -145,14 +146,15 @@ describe('MultiSigWalletWithTimeLock', () => {
|
||||
txId = log.args.transactionId;
|
||||
await multiSigWrapper.confirmTransactionAsync(txId, owners[1]);
|
||||
});
|
||||
|
||||
it('should throw if it has enough confirmations but is not past the time lock', async () => {
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
multiSig.executeTransaction.sendTransactionAsync(txId, { from: owners[0] }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should execute if it has enough confirmations and is past the time lock', async () => {
|
||||
await web3Wrapper.increaseTimeAsync(SECONDS_TIME_LOCKED.toNumber());
|
||||
await increaseTimeAndMineBlockAsync(SECONDS_TIME_LOCKED.toNumber());
|
||||
await web3Wrapper.awaitTransactionSuccessAsync(
|
||||
await multiSig.executeTransaction.sendTransactionAsync(txId, { from: owners[0] }),
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
||||
|
@@ -7,6 +7,7 @@ import 'make-promises-safe';
|
||||
|
||||
import { TokenRegistryContract } from '../src/contract_wrappers/generated/token_registry';
|
||||
import { artifacts } from '../src/utils/artifacts';
|
||||
import { expectRevertOrAlwaysFailingTransactionAsync } from '../src/utils/assertions';
|
||||
import { chaiSetup } from '../src/utils/chai_setup';
|
||||
import { constants } from '../src/utils/constants';
|
||||
import { TokenRegWrapper } from '../src/utils/token_registry_wrapper';
|
||||
@@ -74,7 +75,7 @@ describe('TokenRegistry', () => {
|
||||
|
||||
describe('addToken', () => {
|
||||
it('should throw when not called by owner', async () => {
|
||||
return expect(tokenRegWrapper.addTokenAsync(token1, notOwner)).to.be.rejectedWith(constants.REVERT);
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(tokenRegWrapper.addTokenAsync(token1, notOwner));
|
||||
});
|
||||
|
||||
it('should add token metadata when called by owner', async () => {
|
||||
@@ -86,19 +87,19 @@ describe('TokenRegistry', () => {
|
||||
it('should throw if token already exists', async () => {
|
||||
await tokenRegWrapper.addTokenAsync(token1, owner);
|
||||
|
||||
return expect(tokenRegWrapper.addTokenAsync(token1, owner)).to.be.rejectedWith(constants.REVERT);
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(tokenRegWrapper.addTokenAsync(token1, owner));
|
||||
});
|
||||
|
||||
it('should throw if token address is null', async () => {
|
||||
return expect(tokenRegWrapper.addTokenAsync(nullToken, owner)).to.be.rejectedWith(constants.REVERT);
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(tokenRegWrapper.addTokenAsync(nullToken, owner));
|
||||
});
|
||||
|
||||
it('should throw if name already exists', async () => {
|
||||
await tokenRegWrapper.addTokenAsync(token1, owner);
|
||||
const duplicateNameToken = _.assign({}, token2, { name: token1.name });
|
||||
|
||||
return expect(tokenRegWrapper.addTokenAsync(duplicateNameToken, owner)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
tokenRegWrapper.addTokenAsync(duplicateNameToken, owner),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -108,8 +109,8 @@ describe('TokenRegistry', () => {
|
||||
symbol: token1.symbol,
|
||||
});
|
||||
|
||||
return expect(tokenRegWrapper.addTokenAsync(duplicateSymbolToken, owner)).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
tokenRegWrapper.addTokenAsync(duplicateSymbolToken, owner),
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -135,9 +136,9 @@ describe('TokenRegistry', () => {
|
||||
|
||||
describe('setTokenName', () => {
|
||||
it('should throw when not called by owner', async () => {
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
tokenReg.setTokenName.sendTransactionAsync(token1.address, token2.name, { from: notOwner }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should change the token name when called by owner', async () => {
|
||||
@@ -161,25 +162,25 @@ describe('TokenRegistry', () => {
|
||||
it('should throw if the name already exists', async () => {
|
||||
await tokenRegWrapper.addTokenAsync(token2, owner);
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
tokenReg.setTokenName.sendTransactionAsync(token1.address, token2.name, { from: owner }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if token does not exist', async () => {
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
tokenReg.setTokenName.sendTransactionAsync(nullToken.address, token2.name, { from: owner }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('setTokenSymbol', () => {
|
||||
it('should throw when not called by owner', async () => {
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
tokenReg.setTokenSymbol.sendTransactionAsync(token1.address, token2.symbol, {
|
||||
from: notOwner,
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should change the token symbol when called by owner', async () => {
|
||||
@@ -201,28 +202,28 @@ describe('TokenRegistry', () => {
|
||||
it('should throw if the symbol already exists', async () => {
|
||||
await tokenRegWrapper.addTokenAsync(token2, owner);
|
||||
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
tokenReg.setTokenSymbol.sendTransactionAsync(token1.address, token2.symbol, {
|
||||
from: owner,
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if token does not exist', async () => {
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
tokenReg.setTokenSymbol.sendTransactionAsync(nullToken.address, token2.symbol, {
|
||||
from: owner,
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('removeToken', () => {
|
||||
it('should throw if not called by owner', async () => {
|
||||
const index = new BigNumber(0);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
tokenReg.removeToken.sendTransactionAsync(token1.address, index, { from: notOwner }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should remove token metadata when called by owner', async () => {
|
||||
@@ -239,17 +240,17 @@ describe('TokenRegistry', () => {
|
||||
|
||||
it('should throw if token does not exist', async () => {
|
||||
const index = new BigNumber(0);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
tokenReg.removeToken.sendTransactionAsync(nullToken.address, index, { from: owner }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if token at given index does not match address', async () => {
|
||||
await tokenRegWrapper.addTokenAsync(token2, owner);
|
||||
const incorrectIndex = new BigNumber(0);
|
||||
return expect(
|
||||
return expectRevertOrAlwaysFailingTransactionAsync(
|
||||
tokenReg.removeToken.sendTransactionAsync(token2.address, incorrectIndex, { from: owner }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -5,6 +5,7 @@ import 'make-promises-safe';
|
||||
|
||||
import { DummyERC20TokenContract } from '../src/contract_wrappers/generated/dummy_e_r_c20_token';
|
||||
import { artifacts } from '../src/utils/artifacts';
|
||||
import { expectRevertOrAlwaysFailingTransactionAsync, expectRevertOrOtherErrorAsync } from '../src/utils/assertions';
|
||||
import { chaiSetup } from '../src/utils/chai_setup';
|
||||
import { constants } from '../src/utils/constants';
|
||||
import { provider, txDefaults, web3Wrapper } from '../src/utils/web3_wrapper';
|
||||
@@ -53,8 +54,9 @@ describe('UnlimitedAllowanceToken', () => {
|
||||
it('should throw if owner has insufficient balance', async () => {
|
||||
const ownerBalance = await token.balanceOf.callAsync(owner);
|
||||
const amountToTransfer = ownerBalance.plus(1);
|
||||
return expect(token.transfer.callAsync(spender, amountToTransfer, { from: owner })).to.be.rejectedWith(
|
||||
constants.REVERT,
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
token.transfer.callAsync(spender, amountToTransfer, { from: owner }),
|
||||
constants.ERC20_INSUFFICIENT_BALANCE,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -91,11 +93,12 @@ describe('UnlimitedAllowanceToken', () => {
|
||||
await token.approve.sendTransactionAsync(spender, amountToTransfer, { from: owner }),
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
||||
);
|
||||
return expect(
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
token.transferFrom.callAsync(owner, spender, amountToTransfer, {
|
||||
from: spender,
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
constants.ERC20_INSUFFICIENT_BALANCE,
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw if spender has insufficient allowance', async () => {
|
||||
@@ -106,11 +109,12 @@ describe('UnlimitedAllowanceToken', () => {
|
||||
const isSpenderAllowanceInsufficient = spenderAllowance.cmp(amountToTransfer) < 0;
|
||||
expect(isSpenderAllowanceInsufficient).to.be.true();
|
||||
|
||||
return expect(
|
||||
return expectRevertOrOtherErrorAsync(
|
||||
token.transferFrom.callAsync(owner, spender, amountToTransfer, {
|
||||
from: spender,
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
constants.ERC20_INSUFFICIENT_ALLOWANCE,
|
||||
);
|
||||
});
|
||||
|
||||
it('should return true on a 0 value transfer', async () => {
|
||||
|
Reference in New Issue
Block a user