Add additional order factory methods and refactor test to use them

This commit is contained in:
Brandon Millman 2018-10-03 23:14:55 -07:00
parent 250a9a4809
commit 059162a90a
2 changed files with 62 additions and 62 deletions

View File

@ -27,74 +27,37 @@ describe('buyQuoteCalculator', () => {
// the second order has a rate of 2 makerAsset / WETH with a takerFee of 100 ZRX and has 200 / 200 makerAsset units left to fill (completely fillable)
// generate one order for fees
// the fee order has a rate of 1 ZRX / WETH with no taker fee and has 100 ZRX left to fill (completely fillable)
const firstOrder = orderFactory.createOrder(
NULL_ADDRESS,
new BigNumber(400),
NULL_BYTES,
new BigNumber(100),
NULL_BYTES,
NULL_ADDRESS,
{
takerFee: new BigNumber(200),
},
);
const firstRemainingFillAmount = new BigNumber(200);
const secondOrder = orderFactory.createOrder(
NULL_ADDRESS,
new BigNumber(200),
NULL_BYTES,
new BigNumber(100),
NULL_BYTES,
NULL_ADDRESS,
{
takerFee: new BigNumber(100),
},
);
const secondRemainingFillAmount = secondOrder.makerAssetAmount;
const signedOrders = _.map([firstOrder, secondOrder], order => {
return {
...order,
signature: NULL_BYTES,
};
const firstOrder = orderFactory.createSignedOrderFromPartial({
makerAssetAmount: new BigNumber(400),
takerAssetAmount: new BigNumber(100),
takerFee: new BigNumber(200),
});
const firstRemainingFillAmount = new BigNumber(200);
const secondOrder = orderFactory.createSignedOrderFromPartial({
makerAssetAmount: new BigNumber(200),
takerAssetAmount: new BigNumber(100),
takerFee: new BigNumber(100),
});
const secondRemainingFillAmount = secondOrder.makerAssetAmount;
ordersAndFillableAmounts = {
orders: signedOrders,
orders: [firstOrder, secondOrder],
remainingFillableMakerAssetAmounts: [firstRemainingFillAmount, secondRemainingFillAmount],
};
const smallFeeOrder = orderFactory.createOrder(
NULL_ADDRESS,
new BigNumber(100),
NULL_BYTES,
new BigNumber(100),
NULL_BYTES,
NULL_ADDRESS,
);
const signedSmallFeeOrder = {
...smallFeeOrder,
signature: NULL_BYTES,
};
const smallFeeOrder = orderFactory.createSignedOrderFromPartial({
makerAssetAmount: new BigNumber(100),
takerAssetAmount: new BigNumber(100),
});
smallFeeOrderAndFillableAmount = {
orders: [signedSmallFeeOrder],
remainingFillableMakerAssetAmounts: [signedSmallFeeOrder.makerAssetAmount],
};
const largeFeeOrder = orderFactory.createOrder(
NULL_ADDRESS,
new BigNumber(100),
NULL_BYTES,
new BigNumber(200),
NULL_BYTES,
NULL_ADDRESS,
);
const signedLargeFeeOrder = {
...largeFeeOrder,
signature: NULL_BYTES,
orders: [smallFeeOrder],
remainingFillableMakerAssetAmounts: [smallFeeOrder.makerAssetAmount],
};
const largeFeeOrder = orderFactory.createSignedOrderFromPartial({
makerAssetAmount: new BigNumber(100),
takerAssetAmount: new BigNumber(200),
});
allFeeOrdersAndFillableAmounts = {
orders: [signedSmallFeeOrder, signedLargeFeeOrder],
remainingFillableMakerAssetAmounts: [
signedSmallFeeOrder.makerAssetAmount,
largeFeeOrder.makerAssetAmount,
],
orders: [smallFeeOrder, largeFeeOrder],
remainingFillableMakerAssetAmounts: [smallFeeOrder.makerAssetAmount, largeFeeOrder.makerAssetAmount],
};
});
it('should throw if not enough maker asset liquidity', () => {

View File

@ -8,8 +8,21 @@ import { orderHashUtils } from './order_hash';
import { generatePseudoRandomSalt } from './salt';
import { signatureUtils } from './signature_utils';
import { CreateOrderOpts } from './types';
export const orderFactory = {
createOrderFromPartial(partialOrder: Partial<Order>): Order {
const defaultOrder = generateEmptyOrder();
return {
...defaultOrder,
...partialOrder,
};
},
createSignedOrderFromPartial(partialSignedOrder: Partial<SignedOrder>): SignedOrder {
const defaultOrder = generateEmptySignedOrder();
return {
...defaultOrder,
...partialSignedOrder,
};
},
createOrder(
makerAddress: string,
makerAssetAmount: BigNumber,
@ -69,6 +82,30 @@ export const orderFactory = {
},
};
function generateEmptySignedOrder(): SignedOrder {
return {
...generateEmptyOrder(),
signature: constants.NULL_BYTES,
};
}
function generateEmptyOrder(): Order {
return {
senderAddress: constants.NULL_ADDRESS,
makerAddress: constants.NULL_ADDRESS,
takerAddress: constants.NULL_ADDRESS,
makerFee: constants.ZERO_AMOUNT,
takerFee: constants.ZERO_AMOUNT,
makerAssetAmount: constants.ZERO_AMOUNT,
takerAssetAmount: constants.ZERO_AMOUNT,
makerAssetData: constants.NULL_BYTES,
takerAssetData: constants.NULL_BYTES,
salt: generatePseudoRandomSalt(),
exchangeAddress: constants.NULL_ADDRESS,
feeRecipientAddress: constants.NULL_ADDRESS,
expirationTimeSeconds: constants.INFINITE_TIMESTAMP_SEC,
};
}
function generateDefaultCreateOrderOpts(): {
takerAddress: string;
senderAddress: string;