Add tests for getOrderInfo and getOrdersInfo
This commit is contained in:
@@ -15,14 +15,14 @@ import { ERC721ProxyContract } from '../../generated_contract_wrappers/erc721_pr
|
|||||||
import { ExchangeCancelEventArgs, ExchangeContract } from '../../generated_contract_wrappers/exchange';
|
import { ExchangeCancelEventArgs, ExchangeContract } from '../../generated_contract_wrappers/exchange';
|
||||||
import { artifacts } from '../utils/artifacts';
|
import { artifacts } from '../utils/artifacts';
|
||||||
import { expectTransactionFailedAsync } from '../utils/assertions';
|
import { expectTransactionFailedAsync } from '../utils/assertions';
|
||||||
import { getLatestBlockTimestampAsync } from '../utils/block_timestamp';
|
import { getLatestBlockTimestampAsync, increaseTimeAndMineBlockAsync } from '../utils/block_timestamp';
|
||||||
import { chaiSetup } from '../utils/chai_setup';
|
import { chaiSetup } from '../utils/chai_setup';
|
||||||
import { constants } from '../utils/constants';
|
import { constants } from '../utils/constants';
|
||||||
import { ERC20Wrapper } from '../utils/erc20_wrapper';
|
import { ERC20Wrapper } from '../utils/erc20_wrapper';
|
||||||
import { ERC721Wrapper } from '../utils/erc721_wrapper';
|
import { ERC721Wrapper } from '../utils/erc721_wrapper';
|
||||||
import { ExchangeWrapper } from '../utils/exchange_wrapper';
|
import { ExchangeWrapper } from '../utils/exchange_wrapper';
|
||||||
import { OrderFactory } from '../utils/order_factory';
|
import { OrderFactory } from '../utils/order_factory';
|
||||||
import { ERC20BalancesByOwner } from '../utils/types';
|
import { ERC20BalancesByOwner, OrderStatus } from '../utils/types';
|
||||||
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
|
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
@@ -483,6 +483,124 @@ describe('Exchange core', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('getOrderInfo', () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
signedOrder = await orderFactory.newSignedOrderAsync();
|
||||||
|
});
|
||||||
|
it('should return the correct orderInfo for an unfilled valid order', async () => {
|
||||||
|
const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedOrderStatus = OrderStatus.FILLABLE;
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
it('should return the correct orderInfo for a fully filled order', async () => {
|
||||||
|
await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress);
|
||||||
|
const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount;
|
||||||
|
const expectedOrderStatus = OrderStatus.FULLY_FILLED;
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
it('should return the correct orderInfo for a partially filled order', async () => {
|
||||||
|
const takerAssetFillAmount = signedOrder.takerAssetAmount.div(2);
|
||||||
|
await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount });
|
||||||
|
const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = takerAssetFillAmount;
|
||||||
|
const expectedOrderStatus = OrderStatus.FILLABLE;
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
it('should return the correct orderInfo for a cancelled and unfilled order', async () => {
|
||||||
|
await exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress);
|
||||||
|
const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedOrderStatus = OrderStatus.CANCELLED;
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
it('should return the correct orderInfo for a cancelled and partially filled order', async () => {
|
||||||
|
const takerAssetFillAmount = signedOrder.takerAssetAmount.div(2);
|
||||||
|
await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount });
|
||||||
|
await exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress);
|
||||||
|
const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = takerAssetFillAmount;
|
||||||
|
const expectedOrderStatus = OrderStatus.CANCELLED;
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
it('should return the correct orderInfo for an expired and unfilled order', async () => {
|
||||||
|
const currentTimestamp = await getLatestBlockTimestampAsync();
|
||||||
|
const timeUntilExpiration = signedOrder.expirationTimeSeconds.minus(currentTimestamp).toNumber();
|
||||||
|
await increaseTimeAndMineBlockAsync(timeUntilExpiration);
|
||||||
|
const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedOrderStatus = OrderStatus.EXPIRED;
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
it('should return the correct orderInfo for an expired and partially filled order', async () => {
|
||||||
|
const takerAssetFillAmount = signedOrder.takerAssetAmount.div(2);
|
||||||
|
await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount });
|
||||||
|
const currentTimestamp = await getLatestBlockTimestampAsync();
|
||||||
|
const timeUntilExpiration = signedOrder.expirationTimeSeconds.minus(currentTimestamp).toNumber();
|
||||||
|
await increaseTimeAndMineBlockAsync(timeUntilExpiration);
|
||||||
|
const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = takerAssetFillAmount;
|
||||||
|
const expectedOrderStatus = OrderStatus.EXPIRED;
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
it('should return the correct orderInfo for an expired and fully filled order', async () => {
|
||||||
|
await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress);
|
||||||
|
const currentTimestamp = await getLatestBlockTimestampAsync();
|
||||||
|
const timeUntilExpiration = signedOrder.expirationTimeSeconds.minus(currentTimestamp).toNumber();
|
||||||
|
await increaseTimeAndMineBlockAsync(timeUntilExpiration);
|
||||||
|
const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount;
|
||||||
|
// FULLY_FILLED takes precedence over EXPIRED
|
||||||
|
const expectedOrderStatus = OrderStatus.FULLY_FILLED;
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
it('should return the correct orderInfo for an order with a makerAssetAmount of 0', async () => {
|
||||||
|
signedOrder = await orderFactory.newSignedOrderAsync({ makerAssetAmount: new BigNumber(0) });
|
||||||
|
const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedOrderStatus = OrderStatus.INVALID_MAKER_ASSET_AMOUNT;
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
it('should return the correct orderInfo for an order with a takerAssetAmount of 0', async () => {
|
||||||
|
signedOrder = await orderFactory.newSignedOrderAsync({ takerAssetAmount: new BigNumber(0) });
|
||||||
|
const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedOrderStatus = OrderStatus.INVALID_TAKER_ASSET_AMOUNT;
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
// tslint:disable:max-file-line-count
|
// tslint:disable:max-file-line-count
|
||||||
// tslint:enable:no-unnecessary-type-assertion
|
// tslint:enable:no-unnecessary-type-assertion
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
||||||
import { assetProxyUtils } from '@0xproject/order-utils';
|
import { assetProxyUtils, orderHashUtils } from '@0xproject/order-utils';
|
||||||
import { RevertReason, SignedOrder } from '@0xproject/types';
|
import { RevertReason, SignedOrder } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
@@ -13,14 +13,14 @@ import { ERC721ProxyContract } from '../../generated_contract_wrappers/erc721_pr
|
|||||||
import { ExchangeContract } from '../../generated_contract_wrappers/exchange';
|
import { ExchangeContract } from '../../generated_contract_wrappers/exchange';
|
||||||
import { artifacts } from '../utils/artifacts';
|
import { artifacts } from '../utils/artifacts';
|
||||||
import { expectTransactionFailedAsync } from '../utils/assertions';
|
import { expectTransactionFailedAsync } from '../utils/assertions';
|
||||||
import { getLatestBlockTimestampAsync } from '../utils/block_timestamp';
|
import { getLatestBlockTimestampAsync, increaseTimeAndMineBlockAsync } from '../utils/block_timestamp';
|
||||||
import { chaiSetup } from '../utils/chai_setup';
|
import { chaiSetup } from '../utils/chai_setup';
|
||||||
import { constants } from '../utils/constants';
|
import { constants } from '../utils/constants';
|
||||||
import { ERC20Wrapper } from '../utils/erc20_wrapper';
|
import { ERC20Wrapper } from '../utils/erc20_wrapper';
|
||||||
import { ERC721Wrapper } from '../utils/erc721_wrapper';
|
import { ERC721Wrapper } from '../utils/erc721_wrapper';
|
||||||
import { ExchangeWrapper } from '../utils/exchange_wrapper';
|
import { ExchangeWrapper } from '../utils/exchange_wrapper';
|
||||||
import { OrderFactory } from '../utils/order_factory';
|
import { OrderFactory } from '../utils/order_factory';
|
||||||
import { ERC20BalancesByOwner } from '../utils/types';
|
import { ERC20BalancesByOwner, OrderStatus } from '../utils/types';
|
||||||
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
|
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
@@ -1071,5 +1071,189 @@ describe('Exchange wrappers', () => {
|
|||||||
expect(erc20Balances).to.be.deep.equal(newBalances);
|
expect(erc20Balances).to.be.deep.equal(newBalances);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('getOrdersInfo', () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
signedOrders = [
|
||||||
|
await orderFactory.newSignedOrderAsync(),
|
||||||
|
await orderFactory.newSignedOrderAsync(),
|
||||||
|
await orderFactory.newSignedOrderAsync(),
|
||||||
|
];
|
||||||
|
});
|
||||||
|
it('should get the correct information for multiple unfilled orders', async () => {
|
||||||
|
const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
|
||||||
|
expect(ordersInfo.length).to.be.equal(3);
|
||||||
|
_.forEach(signedOrders, (signedOrder, index) => {
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedOrderStatus = OrderStatus.FILLABLE;
|
||||||
|
const orderInfo = ordersInfo[index];
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should get the correct information for multiple partially filled orders', async () => {
|
||||||
|
const takerAssetFillAmounts = _.map(signedOrders, signedOrder => signedOrder.takerAssetAmount.div(2));
|
||||||
|
await exchangeWrapper.batchFillOrdersAsync(signedOrders, takerAddress, { takerAssetFillAmounts });
|
||||||
|
const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
|
||||||
|
expect(ordersInfo.length).to.be.equal(3);
|
||||||
|
_.forEach(signedOrders, (signedOrder, index) => {
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount.div(2);
|
||||||
|
const expectedOrderStatus = OrderStatus.FILLABLE;
|
||||||
|
const orderInfo = ordersInfo[index];
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should get the correct information for multiple fully filled orders', async () => {
|
||||||
|
await exchangeWrapper.batchFillOrdersAsync(signedOrders, takerAddress);
|
||||||
|
const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
|
||||||
|
expect(ordersInfo.length).to.be.equal(3);
|
||||||
|
_.forEach(signedOrders, (signedOrder, index) => {
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount;
|
||||||
|
const expectedOrderStatus = OrderStatus.FULLY_FILLED;
|
||||||
|
const orderInfo = ordersInfo[index];
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should get the correct information for multiple cancelled and unfilled orders', async () => {
|
||||||
|
await exchangeWrapper.batchCancelOrdersAsync(signedOrders, makerAddress);
|
||||||
|
const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
|
||||||
|
expect(ordersInfo.length).to.be.equal(3);
|
||||||
|
_.forEach(signedOrders, (signedOrder, index) => {
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedOrderStatus = OrderStatus.CANCELLED;
|
||||||
|
const orderInfo = ordersInfo[index];
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should get the correct information for multiple cancelled and partially filled orders', async () => {
|
||||||
|
const takerAssetFillAmounts = _.map(signedOrders, signedOrder => signedOrder.takerAssetAmount.div(2));
|
||||||
|
await exchangeWrapper.batchFillOrdersAsync(signedOrders, takerAddress, { takerAssetFillAmounts });
|
||||||
|
await exchangeWrapper.batchCancelOrdersAsync(signedOrders, makerAddress);
|
||||||
|
const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
|
||||||
|
expect(ordersInfo.length).to.be.equal(3);
|
||||||
|
_.forEach(signedOrders, (signedOrder, index) => {
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount.div(2);
|
||||||
|
const expectedOrderStatus = OrderStatus.CANCELLED;
|
||||||
|
const orderInfo = ordersInfo[index];
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should get the correct information for multiple expired and unfilled orders', async () => {
|
||||||
|
const currentTimestamp = await getLatestBlockTimestampAsync();
|
||||||
|
const timeUntilExpiration = signedOrders[0].expirationTimeSeconds.minus(currentTimestamp).toNumber();
|
||||||
|
await increaseTimeAndMineBlockAsync(timeUntilExpiration);
|
||||||
|
const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
|
||||||
|
expect(ordersInfo.length).to.be.equal(3);
|
||||||
|
_.forEach(signedOrders, (signedOrder, index) => {
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedOrderStatus = OrderStatus.EXPIRED;
|
||||||
|
const orderInfo = ordersInfo[index];
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should get the correct information for multiple expired and partially filled orders', async () => {
|
||||||
|
const takerAssetFillAmounts = _.map(signedOrders, signedOrder => signedOrder.takerAssetAmount.div(2));
|
||||||
|
await exchangeWrapper.batchFillOrdersAsync(signedOrders, takerAddress, { takerAssetFillAmounts });
|
||||||
|
const currentTimestamp = await getLatestBlockTimestampAsync();
|
||||||
|
const timeUntilExpiration = signedOrders[0].expirationTimeSeconds.minus(currentTimestamp).toNumber();
|
||||||
|
await increaseTimeAndMineBlockAsync(timeUntilExpiration);
|
||||||
|
const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
|
||||||
|
expect(ordersInfo.length).to.be.equal(3);
|
||||||
|
_.forEach(signedOrders, (signedOrder, index) => {
|
||||||
|
const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount.div(2);
|
||||||
|
const expectedOrderStatus = OrderStatus.EXPIRED;
|
||||||
|
const orderInfo = ordersInfo[index];
|
||||||
|
expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
|
||||||
|
expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
|
||||||
|
expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should get the correct information for a mix of unfilled, partially filled, fully filled, cancelled, and expired orders', async () => {
|
||||||
|
const unfilledOrder = await orderFactory.newSignedOrderAsync();
|
||||||
|
const partiallyFilledOrder = await orderFactory.newSignedOrderAsync();
|
||||||
|
await exchangeWrapper.fillOrderAsync(partiallyFilledOrder, takerAddress, {
|
||||||
|
takerAssetFillAmount: partiallyFilledOrder.takerAssetAmount.div(2),
|
||||||
|
});
|
||||||
|
const fullyFilledOrder = await orderFactory.newSignedOrderAsync();
|
||||||
|
await exchangeWrapper.fillOrderAsync(fullyFilledOrder, takerAddress);
|
||||||
|
const cancelledOrder = await orderFactory.newSignedOrderAsync();
|
||||||
|
await exchangeWrapper.cancelOrderAsync(cancelledOrder, makerAddress);
|
||||||
|
const currentTimestamp = await getLatestBlockTimestampAsync();
|
||||||
|
const expiredOrder = await orderFactory.newSignedOrderAsync({
|
||||||
|
expirationTimeSeconds: new BigNumber(currentTimestamp),
|
||||||
|
});
|
||||||
|
signedOrders = [unfilledOrder, partiallyFilledOrder, fullyFilledOrder, cancelledOrder, expiredOrder];
|
||||||
|
const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
|
||||||
|
expect(ordersInfo.length).to.be.equal(5);
|
||||||
|
|
||||||
|
const expectedUnfilledOrderHash = orderHashUtils.getOrderHashHex(unfilledOrder);
|
||||||
|
const expectedUnfilledTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedUnfilledOrderStatus = OrderStatus.FILLABLE;
|
||||||
|
const unfilledOrderInfo = ordersInfo[0];
|
||||||
|
expect(unfilledOrderInfo.orderHash).to.be.equal(expectedUnfilledOrderHash);
|
||||||
|
expect(unfilledOrderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(
|
||||||
|
expectedUnfilledTakerAssetFilledAmount,
|
||||||
|
);
|
||||||
|
expect(unfilledOrderInfo.orderStatus).to.be.equal(expectedUnfilledOrderStatus);
|
||||||
|
|
||||||
|
const expectedPartialOrderHash = orderHashUtils.getOrderHashHex(partiallyFilledOrder);
|
||||||
|
const expectedPartialTakerAssetFilledAmount = partiallyFilledOrder.takerAssetAmount.div(2);
|
||||||
|
const expectedPartialOrderStatus = OrderStatus.FILLABLE;
|
||||||
|
const partialOrderInfo = ordersInfo[1];
|
||||||
|
expect(partialOrderInfo.orderHash).to.be.equal(expectedPartialOrderHash);
|
||||||
|
expect(partialOrderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(
|
||||||
|
expectedPartialTakerAssetFilledAmount,
|
||||||
|
);
|
||||||
|
expect(partialOrderInfo.orderStatus).to.be.equal(expectedPartialOrderStatus);
|
||||||
|
|
||||||
|
const expectedFilledOrderHash = orderHashUtils.getOrderHashHex(fullyFilledOrder);
|
||||||
|
const expectedFilledTakerAssetFilledAmount = fullyFilledOrder.takerAssetAmount;
|
||||||
|
const expectedFilledOrderStatus = OrderStatus.FULLY_FILLED;
|
||||||
|
const filledOrderInfo = ordersInfo[2];
|
||||||
|
expect(filledOrderInfo.orderHash).to.be.equal(expectedFilledOrderHash);
|
||||||
|
expect(filledOrderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(
|
||||||
|
expectedFilledTakerAssetFilledAmount,
|
||||||
|
);
|
||||||
|
expect(filledOrderInfo.orderStatus).to.be.equal(expectedFilledOrderStatus);
|
||||||
|
|
||||||
|
const expectedCancelledOrderHash = orderHashUtils.getOrderHashHex(cancelledOrder);
|
||||||
|
const expectedCancelledTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedCancelledOrderStatus = OrderStatus.CANCELLED;
|
||||||
|
const cancelledOrderInfo = ordersInfo[3];
|
||||||
|
expect(cancelledOrderInfo.orderHash).to.be.equal(expectedCancelledOrderHash);
|
||||||
|
expect(cancelledOrderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(
|
||||||
|
expectedCancelledTakerAssetFilledAmount,
|
||||||
|
);
|
||||||
|
expect(cancelledOrderInfo.orderStatus).to.be.equal(expectedCancelledOrderStatus);
|
||||||
|
|
||||||
|
const expectedExpiredOrderHash = orderHashUtils.getOrderHashHex(expiredOrder);
|
||||||
|
const expectedExpiredTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedExpiredOrderStatus = OrderStatus.EXPIRED;
|
||||||
|
const expiredOrderInfo = ordersInfo[4];
|
||||||
|
expect(expiredOrderInfo.orderHash).to.be.equal(expectedExpiredOrderHash);
|
||||||
|
expect(expiredOrderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(
|
||||||
|
expectedExpiredTakerAssetFilledAmount,
|
||||||
|
);
|
||||||
|
expect(expiredOrderInfo.orderStatus).to.be.equal(expectedExpiredOrderStatus);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}); // tslint:disable-line:max-file-line-count
|
}); // tslint:disable-line:max-file-line-count
|
||||||
|
|||||||
@@ -223,6 +223,10 @@ export class ExchangeWrapper {
|
|||||||
const orderInfo = (await this._exchange.getOrderInfo.callAsync(signedOrder)) as OrderInfo;
|
const orderInfo = (await this._exchange.getOrderInfo.callAsync(signedOrder)) as OrderInfo;
|
||||||
return orderInfo;
|
return orderInfo;
|
||||||
}
|
}
|
||||||
|
public async getOrdersInfoAsync(signedOrders: SignedOrder[]): Promise<OrderInfo[]> {
|
||||||
|
const ordersInfo = (await this._exchange.getOrdersInfo.callAsync(signedOrders)) as OrderInfo[];
|
||||||
|
return ordersInfo;
|
||||||
|
}
|
||||||
public async matchOrdersAsync(
|
public async matchOrdersAsync(
|
||||||
signedOrderLeft: SignedOrder,
|
signedOrderLeft: SignedOrder,
|
||||||
signedOrderRight: SignedOrder,
|
signedOrderRight: SignedOrder,
|
||||||
|
|||||||
Reference in New Issue
Block a user