Add tests for getMarketBuyOrdersInfo
This commit is contained in:
@@ -83,7 +83,7 @@ export class ForwarderHelperImpl implements ForwarderHelper {
|
||||
const { makerAssetFillAmount, feePercentage } = request;
|
||||
const { orders, feeOrders, remainingFillableMakerAssetAmounts, remainingFillableFeeAmounts } = this.config;
|
||||
// TODO: make the slippage percentage customizable
|
||||
const slippageBufferAmount = makerAssetFillAmount.mul(SLIPPAGE_PERCENTAGE);
|
||||
const slippageBufferAmount = makerAssetFillAmount.mul(SLIPPAGE_PERCENTAGE).round();
|
||||
const { resultOrders, remainingFillAmount } = marketUtils.findOrdersThatCoverMakerAssetFillAmount(
|
||||
orders,
|
||||
makerAssetFillAmount,
|
||||
@@ -93,7 +93,7 @@ export class ForwarderHelperImpl implements ForwarderHelper {
|
||||
},
|
||||
);
|
||||
if (remainingFillAmount.gt(constants.ZERO_AMOUNT)) {
|
||||
throw new Error(ForwarderHelperError.InsufficientLiquidity);
|
||||
throw new Error(ForwarderHelperError.InsufficientMakerAssetLiquidity);
|
||||
}
|
||||
// TODO: update this logic to find the minimum amount of feeOrders to cover the worst case as opposed to
|
||||
// finding order that cover all fees, this will help with estimating ETH and minimizing gas usage
|
||||
|
||||
@@ -12,7 +12,7 @@ export interface ForwarderHelper {
|
||||
}
|
||||
|
||||
export enum ForwarderHelperError {
|
||||
InsufficientLiquidity = 'INSUFFICIENT_LIQUIDITY',
|
||||
InsufficientMakerAssetLiquidity = 'INSUFFICIENT_MAKER_ASSET_LIQUIDITY',
|
||||
InsufficientZrxLiquidity = 'INSUFFICIENT_ZRX_LIQUIDITY',
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import * as _ from 'lodash';
|
||||
import 'mocha';
|
||||
|
||||
import { ForwarderHelperImpl, ForwarderHelperImplConfig } from '../src/forwarder_helper_impl';
|
||||
import { ForwarderHelperError } from '../src/types';
|
||||
|
||||
import { chaiSetup } from './utils/chai_setup';
|
||||
|
||||
@@ -26,6 +27,7 @@ describe('ForwarderHelperImpl', () => {
|
||||
const testOrder3 = testOrderFactory.generateTestSignedOrder({
|
||||
makerAssetAmount: new BigNumber(100),
|
||||
takerAssetAmount: new BigNumber(300),
|
||||
takerFee: new BigNumber(1),
|
||||
});
|
||||
// rate: 3 WETH / ZRX
|
||||
const testFeeOrder1 = testOrderFactory.generateTestSignedOrder({
|
||||
@@ -42,13 +44,13 @@ describe('ForwarderHelperImpl', () => {
|
||||
makerAssetAmount: new BigNumber(100),
|
||||
takerAssetAmount: new BigNumber(100),
|
||||
});
|
||||
const inputForwarderHelperConfig: ForwarderHelperImplConfig = {
|
||||
orders: [testOrder1, testOrder2, testOrder3],
|
||||
feeOrders: [testFeeOrder1, testFeeOrder2, testFeeOrder3],
|
||||
remainingFillableMakerAssetAmounts: [new BigNumber(1), new BigNumber(2), new BigNumber(3)],
|
||||
remainingFillableFeeAmounts: [new BigNumber(4), new BigNumber(5), new BigNumber(6)],
|
||||
};
|
||||
describe('#constructor', () => {
|
||||
const inputForwarderHelperConfig: ForwarderHelperImplConfig = {
|
||||
orders: [testOrder1, testOrder2, testOrder3],
|
||||
feeOrders: [testFeeOrder1, testFeeOrder2, testFeeOrder3],
|
||||
remainingFillableMakerAssetAmounts: [new BigNumber(1), new BigNumber(2), new BigNumber(3)],
|
||||
remainingFillableFeeAmounts: [new BigNumber(4), new BigNumber(5), new BigNumber(6)],
|
||||
};
|
||||
const inputForwarderHelperConfigNoRemainingAmounts: ForwarderHelperImplConfig = {
|
||||
orders: [testOrder1, testOrder2, testOrder3],
|
||||
feeOrders: [testFeeOrder1, testFeeOrder2, testFeeOrder3],
|
||||
@@ -90,6 +92,45 @@ describe('ForwarderHelperImpl', () => {
|
||||
expect(forwarderHelper.config.remainingFillableFeeAmounts).to.be.undefined();
|
||||
});
|
||||
});
|
||||
// describe('#getMarketBuyOrdersInfo', () => {});
|
||||
// describe('#getMarketSellOrdersInfo', () => {});
|
||||
describe('#getMarketBuyOrdersInfo', () => {
|
||||
it('throws if not enough makerAsset liquidity', () => {
|
||||
const forwarderHelper = new ForwarderHelperImpl(inputForwarderHelperConfig);
|
||||
expect(() => {
|
||||
// request for 6 makerAsset units, because we have exactly 6 available we should throw because there is a built in slippage buffer
|
||||
const info = forwarderHelper.getMarketBuyOrdersInfo({
|
||||
makerAssetFillAmount: new BigNumber(6),
|
||||
});
|
||||
}).to.throw(ForwarderHelperError.InsufficientMakerAssetLiquidity);
|
||||
});
|
||||
it('throws if not enough ZRX liquidity', () => {
|
||||
const inputForwarderHelperConfigNoFees: ForwarderHelperImplConfig = {
|
||||
orders: [testOrder1, testOrder2, testOrder3],
|
||||
feeOrders: [],
|
||||
};
|
||||
const forwarderHelper = new ForwarderHelperImpl(inputForwarderHelperConfigNoFees);
|
||||
expect(() => {
|
||||
// request for 4 makerAsset units, we need fees but no fee orders exist, show we should throw
|
||||
const info = forwarderHelper.getMarketBuyOrdersInfo({
|
||||
makerAssetFillAmount: new BigNumber(250),
|
||||
});
|
||||
}).to.throw(ForwarderHelperError.InsufficientZrxLiquidity);
|
||||
});
|
||||
it('passes the makerAssetFillAmount from the request to the info response', () => {
|
||||
const forwarderHelper = new ForwarderHelperImpl(inputForwarderHelperConfig);
|
||||
const makerAssetFillAmount = new BigNumber(4);
|
||||
const info = forwarderHelper.getMarketBuyOrdersInfo({
|
||||
makerAssetFillAmount,
|
||||
});
|
||||
expect(info.makerAssetFillAmount).to.bignumber.equal(makerAssetFillAmount);
|
||||
});
|
||||
it('passes the feePercentage from the request to the info response', () => {
|
||||
const forwarderHelper = new ForwarderHelperImpl(inputForwarderHelperConfig);
|
||||
const feePercentage = new BigNumber(0.2);
|
||||
const info = forwarderHelper.getMarketBuyOrdersInfo({
|
||||
makerAssetFillAmount: new BigNumber(4),
|
||||
feePercentage,
|
||||
});
|
||||
expect(info.feePercentage).to.bignumber.equal(feePercentage);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user