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