diff options
author | Amir Bandeali <abandeali1@gmail.com> | 2018-05-30 13:09:57 +0800 |
---|---|---|
committer | Jacob Evans <jacob@dekz.net> | 2018-06-05 06:55:28 +0800 |
commit | 342432dc76d1bfc2531fb2edef77afc523eacefe (patch) | |
tree | a6676f58cfe204c30a96524008900ece8d232f53 /packages/contracts/test/exchange/core.ts | |
parent | 79472552aae4ef60ae20e26571c750cbeb02c552 (diff) | |
download | dexon-sol-tools-342432dc76d1bfc2531fb2edef77afc523eacefe.tar dexon-sol-tools-342432dc76d1bfc2531fb2edef77afc523eacefe.tar.gz dexon-sol-tools-342432dc76d1bfc2531fb2edef77afc523eacefe.tar.bz2 dexon-sol-tools-342432dc76d1bfc2531fb2edef77afc523eacefe.tar.lz dexon-sol-tools-342432dc76d1bfc2531fb2edef77afc523eacefe.tar.xz dexon-sol-tools-342432dc76d1bfc2531fb2edef77afc523eacefe.tar.zst dexon-sol-tools-342432dc76d1bfc2531fb2edef77afc523eacefe.zip |
Update Exchange statuses, revert instead of emmitting event on fill/cancel failures, and remove redundant logic in matchOrders
Diffstat (limited to 'packages/contracts/test/exchange/core.ts')
-rw-r--r-- | packages/contracts/test/exchange/core.ts | 89 |
1 files changed, 44 insertions, 45 deletions
diff --git a/packages/contracts/test/exchange/core.ts b/packages/contracts/test/exchange/core.ts index 8320e97d6..16492b8ac 100644 --- a/packages/contracts/test/exchange/core.ts +++ b/packages/contracts/test/exchange/core.ts @@ -15,7 +15,6 @@ import { ERC721ProxyContract } from '../../src/contract_wrappers/generated/e_r_c import { CancelContractEventArgs, ExchangeContract, - ExchangeStatusContractEventArgs, FillContractEventArgs, } from '../../src/contract_wrappers/generated/exchange'; import { artifacts } from '../../src/utils/artifacts'; @@ -25,6 +24,7 @@ import { ERC20Wrapper } from '../../src/utils/erc20_wrapper'; import { ERC721Wrapper } from '../../src/utils/erc721_wrapper'; import { ExchangeWrapper } from '../../src/utils/exchange_wrapper'; import { OrderFactory } from '../../src/utils/order_factory'; +import { orderUtils } from '../../src/utils/order_utils'; import { ContractName, ERC20BalancesByOwner, ExchangeStatus } from '../../src/utils/types'; import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper'; @@ -132,6 +132,7 @@ describe('Exchange core', () => { signedOrder = orderFactory.newSignedOrder(); }); +<<<<<<< HEAD it('should create an unfillable order', async () => { signedOrder = orderFactory.newSignedOrder({ makerAssetAmount: new BigNumber(1001), @@ -164,6 +165,8 @@ describe('Exchange core', () => { expect(takerAssetFilledAmountAfter2).to.be.bignumber.equal(takerAssetFilledAmountAfter1); }); +======= +>>>>>>> Update Exchange statuses, revert instead of emmitting event on fill/cancel failures, and remove redundant logic in matchOrders it('should transfer the correct amounts when makerAssetAmount === takerAssetAmount', async () => { signedOrder = orderFactory.newSignedOrder({ makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18), @@ -550,37 +553,21 @@ describe('Exchange core', () => { ); }); - it('should not change erc20Balances if an order is expired', async () => { + it('should throw if an order is expired', async () => { signedOrder = orderFactory.newSignedOrder({ expirationTimeSeconds: new BigNumber(Math.floor((Date.now() - 10000) / 1000)), }); - await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress); - - const newBalances = await erc20Wrapper.getBalancesAsync(); - expect(newBalances).to.be.deep.equal(erc20Balances); - }); - - it('should log an error event if an order is expired', async () => { - signedOrder = orderFactory.newSignedOrder({ - expirationTimeSeconds: new BigNumber(Math.floor((Date.now() - 10000) / 1000)), - }); - - const res = await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress); - expect(res.logs).to.have.length(1); - const log = res.logs[0] as LogWithDecodedArgs<ExchangeStatusContractEventArgs>; - const statusCode = log.args.statusId; - expect(statusCode).to.be.equal(ExchangeStatus.ORDER_EXPIRED); + return expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith( + constants.REVERT, + ); }); - it('should log an error event if no value is filled', async () => { - signedOrder = orderFactory.newSignedOrder({}); + it('should throw if no value is filled', async () => { + signedOrder = orderFactory.newSignedOrder(); await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress); - - const res = await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress); - expect(res.logs).to.have.length(1); - const log = res.logs[0] as LogWithDecodedArgs<ExchangeStatusContractEventArgs>; - const statusCode = log.args.statusId; - expect(statusCode).to.be.equal(ExchangeStatus.ORDER_FULLY_FILLED); + return expect(exchangeWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith( + constants.REVERT, + ); }); }); @@ -618,12 +605,11 @@ describe('Exchange core', () => { it('should be able to cancel a full order', async () => { await exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress); - await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { - takerAssetFillAmount: signedOrder.takerAssetAmount.div(2), - }); - - const newBalances = await erc20Wrapper.getBalancesAsync(); - expect(newBalances).to.be.deep.equal(erc20Balances); + return expect( + exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { + takerAssetFillAmount: signedOrder.takerAssetAmount.div(2), + }), + ).to.be.rejectedWith(constants.REVERT); }); it('should log 1 event with correct arguments', async () => { @@ -641,26 +627,39 @@ describe('Exchange core', () => { expect(orderHashUtils.getOrderHashHex(signedOrder)).to.be.equal(logArgs.orderHash); }); - it('should log an error if already cancelled', async () => { + it('should throw if already cancelled', async () => { await exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress); - - const res = await exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress); - expect(res.logs).to.have.length(1); - const log = res.logs[0] as LogWithDecodedArgs<ExchangeStatusContractEventArgs>; - const statusCode = log.args.statusId; - expect(statusCode).to.be.equal(ExchangeStatus.ORDER_CANCELLED); + return expect(exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress)).to.be.rejectedWith( + constants.REVERT, + ); }); - it('should log error if order is expired', async () => { + it('should throw if order is expired', async () => { signedOrder = orderFactory.newSignedOrder({ expirationTimeSeconds: new BigNumber(Math.floor((Date.now() - 10000) / 1000)), }); + return expect(exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress)).to.be.rejectedWith( + constants.REVERT, + ); + }); - const res = await exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress); - expect(res.logs).to.have.length(1); - const log = res.logs[0] as LogWithDecodedArgs<ExchangeStatusContractEventArgs>; - const statusCode = log.args.statusId; - expect(statusCode).to.be.equal(ExchangeStatus.ORDER_EXPIRED); + it('should throw if rounding error is greater than 0.1%', async () => { + signedOrder = orderFactory.newSignedOrder({ + makerAssetAmount: new BigNumber(1001), + takerAssetAmount: new BigNumber(3), + }); + + const fillTakerAssetAmount1 = new BigNumber(2); + await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { + takerAssetFillAmount: fillTakerAssetAmount1, + }); + + const fillTakerAssetAmount2 = new BigNumber(1); + return expect( + exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { + takerAssetFillAmount: fillTakerAssetAmount2, + }), + ).to.be.rejectedWith(constants.REVERT); }); }); |