Add a test for rounding error

This commit is contained in:
Leonid Logvinov 2017-11-13 18:57:38 -05:00
parent 33f479c271
commit 02bbcf6b0e
No known key found for this signature in database
GPG Key ID: 0DD294BFDE8C95D4

View File

@ -337,6 +337,29 @@ describe('OrderStateWatcher', () => {
await zeroEx.exchange.cancelOrderAsync(signedOrder, fillableAmount); await zeroEx.exchange.cancelOrderAsync(signedOrder, fillableAmount);
})().catch(done); })().catch(done);
}); });
it('should emit orderStateInvalid when within rounding error range', (done: DoneCallback) => {
(async () => {
const fillableAmountInBaseUnits = new BigNumber(10).pow(18);
const remainingFillableAmountInBaseUnits = new BigNumber(10).pow(2);
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
makerToken.address, takerToken.address, maker, taker, fillableAmountInBaseUnits,
);
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
zeroEx.orderStateWatcher.addOrder(signedOrder);
const callback = reportCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.false();
const invalidOrderState = orderState as OrderStateInvalid;
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderFillRoundingError);
done();
});
zeroEx.orderStateWatcher.subscribe(callback);
await zeroEx.exchange.cancelOrderAsync(
signedOrder, fillableAmountInBaseUnits.minus(remainingFillableAmountInBaseUnits),
);
})().catch(done);
});
it('should emit orderStateValid when watched order partially cancelled', (done: DoneCallback) => { it('should emit orderStateValid when watched order partially cancelled', (done: DoneCallback) => {
(async () => { (async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync( signedOrder = await fillScenarios.createFillableSignedOrderAsync(