aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorLeonid <logvinov.leon@gmail.com>2017-10-24 23:54:50 +0800
committerGitHub <noreply@github.com>2017-10-24 23:54:50 +0800
commit8330dabda829ab507c859cf72462351f4ede70b9 (patch)
treef7b8b42ae711535f2ba75e87428286b32697265d /test
parentcd1f0c74c1439302cd691449c0493ed7a1c14bf3 (diff)
parent1fd8c2a6e28150cb7825cf79b0d46c1db9286053 (diff)
downloaddexon-sol-tools-8330dabda829ab507c859cf72462351f4ede70b9.tar
dexon-sol-tools-8330dabda829ab507c859cf72462351f4ede70b9.tar.gz
dexon-sol-tools-8330dabda829ab507c859cf72462351f4ede70b9.tar.bz2
dexon-sol-tools-8330dabda829ab507c859cf72462351f4ede70b9.tar.lz
dexon-sol-tools-8330dabda829ab507c859cf72462351f4ede70b9.tar.xz
dexon-sol-tools-8330dabda829ab507c859cf72462351f4ede70b9.tar.zst
dexon-sol-tools-8330dabda829ab507c859cf72462351f4ede70b9.zip
Merge pull request #197 from 0xProject/fix/rounding
Fix rounding of maker fill amount and correctly validate partial fees
Diffstat (limited to 'test')
-rw-r--r--test/order_validation_test.ts36
1 files changed, 34 insertions, 2 deletions
diff --git a/test/order_validation_test.ts b/test/order_validation_test.ts
index 784fa9ec4..dfcf1d43d 100644
--- a/test/order_validation_test.ts
+++ b/test/order_validation_test.ts
@@ -210,14 +210,14 @@ describe('OrderValidation', () => {
});
describe('#validateFillOrderBalancesAllowancesThrowIfInvalidAsync', () => {
let exchangeTransferSimulator: ExchangeTransferSimulator;
- let transferFromAsync: any;
+ let transferFromAsync: Sinon.SinonSpy;
const bigNumberMatch = (expected: BigNumber.BigNumber) => {
return Sinon.match((value: BigNumber.BigNumber) => value.eq(expected));
};
beforeEach('create exchangeTransferSimulator', async () => {
exchangeTransferSimulator = new ExchangeTransferSimulator(zeroEx.token);
transferFromAsync = Sinon.spy();
- exchangeTransferSimulator.transferFromAsync = transferFromAsync;
+ exchangeTransferSimulator.transferFromAsync = transferFromAsync as any;
});
it('should call exchangeTransferSimulator.transferFrom in a correct order', async () => {
const makerFee = new BigNumber(2);
@@ -291,5 +291,37 @@ describe('OrderValidation', () => {
),
).to.be.true();
});
+ it('should correctly round the fillMakerTokenAmount', async () => {
+ const makerTokenAmount = new BigNumber(3);
+ const takerTokenAmount = new BigNumber(1);
+ const signedOrder = await fillScenarios.createAsymmetricFillableSignedOrderAsync(
+ makerTokenAddress, takerTokenAddress, makerAddress, takerAddress, makerTokenAmount, takerTokenAmount,
+ );
+ await orderValidationUtils.validateFillOrderBalancesAllowancesThrowIfInvalidAsync(
+ exchangeTransferSimulator, signedOrder, takerTokenAmount, takerAddress, zrxTokenAddress,
+ );
+ expect(transferFromAsync.callCount).to.be.equal(4);
+ const makerFillAmount = transferFromAsync.getCall(0).args[3];
+ expect(makerFillAmount).to.be.bignumber.equal(makerTokenAmount);
+ });
+ it('should correctly round the makerFeeAmount', async () => {
+ const makerFee = new BigNumber(2);
+ const takerFee = new BigNumber(4);
+ const signedOrder = await fillScenarios.createFillableSignedOrderWithFeesAsync(
+ makerTokenAddress, takerTokenAddress, makerFee, takerFee, makerAddress, takerAddress,
+ fillableAmount, ZeroEx.NULL_ADDRESS,
+ );
+ const fillTakerTokenAmount = fillableAmount.div(2).round(0);
+ await orderValidationUtils.validateFillOrderBalancesAllowancesThrowIfInvalidAsync(
+ exchangeTransferSimulator, signedOrder, fillTakerTokenAmount, takerAddress, zrxTokenAddress,
+ );
+ const makerPartialFee = makerFee.div(2);
+ const takerPartialFee = takerFee.div(2);
+ expect(transferFromAsync.callCount).to.be.equal(4);
+ const partialMakerFee = transferFromAsync.getCall(2).args[3];
+ expect(partialMakerFee).to.be.bignumber.equal(makerPartialFee);
+ const partialTakerFee = transferFromAsync.getCall(3).args[3];
+ expect(partialTakerFee).to.be.bignumber.equal(takerPartialFee);
+ });
});
});