Merge pull request #2368 from 0xProject/fix/reenable-builds-for-v3

Reenable CircleCi tests for swapper + orderbook, and fix migrations bug
This commit is contained in:
David Sun 2019-11-25 16:35:56 -05:00 committed by GitHub
commit 5fbdfa66d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 82 additions and 72 deletions

View File

@ -116,22 +116,15 @@ jobs:
- repo-{{ .Environment.CIRCLE_SHA1 }} - repo-{{ .Environment.CIRCLE_SHA1 }}
- run: yarn wsrun test:circleci @0x/contracts-test-utils - run: yarn wsrun test:circleci @0x/contracts-test-utils
- run: yarn wsrun test:circleci @0x/abi-gen - run: yarn wsrun test:circleci @0x/abi-gen
# TODO (xianny): Needs to be updated for 3.0 - run: yarn wsrun test:circleci @0x/asset-swapper
# - run: yarn wsrun test:circleci @0x/asset-buyer
# TODO: Needs to be updated for 3.0. At that time, also remove
# exclusion from monorepo package.json's test script.
# - run: yarn wsrun test:circleci @0x/asset-swapper
- run: yarn wsrun test:circleci @0x/contract-artifacts - run: yarn wsrun test:circleci @0x/contract-artifacts
- run: yarn wsrun test:circleci @0x/assert - run: yarn wsrun test:circleci @0x/assert
- run: yarn wsrun test:circleci @0x/base-contract - run: yarn wsrun test:circleci @0x/base-contract
# TODO (xianny): Needs to be updated for 3.0 - run: yarn wsrun test:circleci @0x/connect
# - run: yarn wsrun test:circleci @0x/connect
- run: yarn wsrun test:circleci @0x/contract-wrappers - run: yarn wsrun test:circleci @0x/contract-wrappers
- run: yarn wsrun test:circleci @0x/dev-utils - run: yarn wsrun test:circleci @0x/dev-utils
- run: yarn wsrun test:circleci @0x/json-schemas - run: yarn wsrun test:circleci @0x/json-schemas
- run: yarn wsrun test:circleci @0x/order-utils - run: yarn wsrun test:circleci @0x/order-utils
# TODO: Needs to be updated for 3.0. At that time, also remove
# exclusion from monorepo package.json's test script.
# - run: yarn wsrun test:circleci @0x/orderbook # - run: yarn wsrun test:circleci @0x/orderbook
- run: yarn wsrun test:circleci @0x/sol-compiler - run: yarn wsrun test:circleci @0x/sol-compiler
- run: yarn wsrun test:circleci @0x/sol-tracing-utils - run: yarn wsrun test:circleci @0x/sol-tracing-utils

View File

View File

@ -99,7 +99,7 @@ describe('ExchangeSwapQuoteConsumer', () => {
) => Promise<void>; ) => Promise<void>;
before(async () => { before(async () => {
contractAddresses = await migrateOnceAsync(); contractAddresses = await migrateOnceAsync(provider);
await blockchainLifecycle.startAsync(); await blockchainLifecycle.startAsync();
userAddresses = await web3Wrapper.getAvailableAddressesAsync(); userAddresses = await web3Wrapper.getAvailableAddressesAsync();
[coinbaseAddress, takerAddress, makerAddress, feeRecipient] = userAddresses; [coinbaseAddress, takerAddress, makerAddress, feeRecipient] = userAddresses;

View File

@ -31,9 +31,7 @@ const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
const GAS_PRICE = new BigNumber(devConstants.DEFAULT_GAS_PRICE); const GAS_PRICE = new BigNumber(devConstants.DEFAULT_GAS_PRICE);
const ONE_ETH_IN_WEI = new BigNumber(1000000000000000000); const ONE_ETH_IN_WEI = new BigNumber(1000000000000000000);
const TESTRPC_CHAIN_ID = devConstants.TESTRPC_CHAIN_ID; const TESTRPC_CHAIN_ID = devConstants.TESTRPC_CHAIN_ID;
const FILLABLE_AMOUNTS = [new BigNumber(2), new BigNumber(3), new BigNumber(5)].map(value =>
value.multipliedBy(ONE_ETH_IN_WEI),
);
const UNLIMITED_ALLOWANCE_IN_BASE_UNITS = new BigNumber(2).pow(256).minus(1); // tslint:disable-line:custom-no-magic-numbers const UNLIMITED_ALLOWANCE_IN_BASE_UNITS = new BigNumber(2).pow(256).minus(1); // tslint:disable-line:custom-no-magic-numbers
const PARTIAL_PRUNED_SIGNED_ORDERS_FEELESS: Array<Partial<PrunedSignedOrder>> = [ const PARTIAL_PRUNED_SIGNED_ORDERS_FEELESS: Array<Partial<PrunedSignedOrder>> = [
@ -99,7 +97,7 @@ describe('ForwarderSwapQuoteConsumer', () => {
const chainId = TESTRPC_CHAIN_ID; const chainId = TESTRPC_CHAIN_ID;
before(async () => { before(async () => {
contractAddresses = await migrateOnceAsync(); contractAddresses = await migrateOnceAsync(provider);
await blockchainLifecycle.startAsync(); await blockchainLifecycle.startAsync();
userAddresses = await web3Wrapper.getAvailableAddressesAsync(); userAddresses = await web3Wrapper.getAvailableAddressesAsync();
[coinbaseAddress, takerAddress, makerAddress, feeRecipient] = userAddresses; [coinbaseAddress, takerAddress, makerAddress, feeRecipient] = userAddresses;
@ -149,10 +147,7 @@ describe('ForwarderSwapQuoteConsumer', () => {
await blockchainLifecycle.startAsync(); await blockchainLifecycle.startAsync();
const UNLIMITED_ALLOWANCE = UNLIMITED_ALLOWANCE_IN_BASE_UNITS; const UNLIMITED_ALLOWANCE = UNLIMITED_ALLOWANCE_IN_BASE_UNITS;
const totalFillableAmount = FILLABLE_AMOUNTS.reduce( const totalFillableAmount = new BigNumber(10).multipliedBy(ONE_ETH_IN_WEI);
(a: BigNumber, c: BigNumber) => a.plus(c),
new BigNumber(0),
);
await erc20TokenContract.transfer(makerAddress, totalFillableAmount).sendTransactionAsync({ await erc20TokenContract.transfer(makerAddress, totalFillableAmount).sendTransactionAsync({
from: coinbaseAddress, from: coinbaseAddress,
@ -241,6 +236,7 @@ describe('ForwarderSwapQuoteConsumer', () => {
takerAddress, takerAddress,
gasPrice: GAS_PRICE, gasPrice: GAS_PRICE,
gasLimit: 4000000, gasLimit: 4000000,
ethAmount: new BigNumber(10).multipliedBy(ONE_ETH_IN_WEI),
}); });
await expectMakerAndTakerBalancesAsync( await expectMakerAndTakerBalancesAsync(
constants.ZERO_AMOUNT, constants.ZERO_AMOUNT,

View File

@ -64,7 +64,7 @@ describe('OrderPruner', () => {
const takerFeeAmount = new BigNumber(2).multipliedBy(ONE_ETH_IN_WEI); const takerFeeAmount = new BigNumber(2).multipliedBy(ONE_ETH_IN_WEI);
before(async () => { before(async () => {
contractAddresses = await migrateOnceAsync(); contractAddresses = await migrateOnceAsync(provider);
await blockchainLifecycle.startAsync(); await blockchainLifecycle.startAsync();
userAddresses = await web3Wrapper.getAvailableAddressesAsync(); userAddresses = await web3Wrapper.getAvailableAddressesAsync();
[coinbaseAddress, takerAddress, makerAddress, feeRecipient] = userAddresses; [coinbaseAddress, takerAddress, makerAddress, feeRecipient] = userAddresses;

View File

@ -83,7 +83,7 @@ describe('swapQuoteConsumerUtils', () => {
const chainId = TESTRPC_CHAIN_ID; const chainId = TESTRPC_CHAIN_ID;
before(async () => { before(async () => {
contractAddresses = await migrateOnceAsync(); contractAddresses = await migrateOnceAsync(provider);
await blockchainLifecycle.startAsync(); await blockchainLifecycle.startAsync();
userAddresses = await web3Wrapper.getAvailableAddressesAsync(); userAddresses = await web3Wrapper.getAvailableAddressesAsync();
const devUtils = new DevUtilsContract(contractAddresses.devUtils, provider); const devUtils = new DevUtilsContract(contractAddresses.devUtils, provider);

View File

@ -1,4 +1,13 @@
[ [
{
"version": "3.3.0-beta.5",
"changes": [
{
"note": "`1337` addresses updated with Forwarder deployed after Exchange is configured",
"pr": 2368
}
]
},
{ {
"version": "3.3.0-beta.4", "version": "3.3.0-beta.4",
"changes": [ "changes": [

View File

@ -105,22 +105,22 @@
"erc1155Proxy": "0x6a4a62e5a7ed13c361b176a5f62c2ee620ac0df8", "erc1155Proxy": "0x6a4a62e5a7ed13c361b176a5f62c2ee620ac0df8",
"zrxToken": "0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c", "zrxToken": "0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c",
"etherToken": "0x0b1ba0af832d7c05fd64161e0db78e85978e8082", "etherToken": "0x0b1ba0af832d7c05fd64161e0db78e85978e8082",
"exchangeV2": "0x48bacb9266a570d521063ef5dd96e61686dbe788",
"exchange": "0x48bacb9266a570d521063ef5dd96e61686dbe788", "exchange": "0x48bacb9266a570d521063ef5dd96e61686dbe788",
"zeroExGovernor": "0x0000000000000000000000000000000000000000",
"assetProxyOwner": "0x0000000000000000000000000000000000000000", "assetProxyOwner": "0x0000000000000000000000000000000000000000",
"forwarder": "0xaa86dda78e9434aca114b6676fc742a18d15a1cc", "erc20BridgeProxy": "0x8ea76477cfaca8f7ea06477fd3c09a740ac6012a",
"zeroExGovernor": "0x0000000000000000000000000000000000000000",
"forwarder": "0x5d3ad3561a1235273cbcb4e82fce63a0073d19be",
"orderValidator": "0x0000000000000000000000000000000000000000", "orderValidator": "0x0000000000000000000000000000000000000000",
"dutchAuction": "0x0000000000000000000000000000000000000000", "dutchAuction": "0x0000000000000000000000000000000000000000",
"coordinatorRegistry": "0x1941ff73d1154774d87521d2d0aaad5d19c8df60", "coordinatorRegistry": "0xaa86dda78e9434aca114b6676fc742a18d15a1cc",
"coordinator": "0x0d8b0dd11f5d34ed41d556def5f841900d5b1c6b", "coordinator": "0x4d3d5c850dd5bd9d6f4adda3dd039a3c8054ca29",
"multiAssetProxy": "0xcfc18cec799fbd1793b5c43e773c98d4d61cc2db", "multiAssetProxy": "0xcfc18cec799fbd1793b5c43e773c98d4d61cc2db",
"staticCallProxy": "0x6dfff22588be9b3ef8cf0ad6dc9b84796f9fb45f", "staticCallProxy": "0x6dfff22588be9b3ef8cf0ad6dc9b84796f9fb45f",
"devUtils": "0x38ef19fdf8e8415f18c307ed71967e19aac28ba1", "devUtils": "0xa31e64ea55b9b6bbb9d6a676738e9a5b23149f84",
"zrxVault": "0x609acc8b356894a937fc58f3411f9528de96ecb1", "exchangeV2": "0x48bacb9266a570d521063ef5dd96e61686dbe788",
"staking": "0xca9717a4a6e8009b3518648c9f3e7676255471a1", "zrxVault": "0x1941ff73d1154774d87521d2d0aaad5d19c8df60",
"stakingProxy": "0x4586649629f699f9a4b61d0e962dc3c9025fe488", "staking": "0x0d8b0dd11f5d34ed41d556def5f841900d5b1c6b",
"erc20BridgeProxy": "0xf23276778860e420acfc18ebeebf7e829b06965c", "stakingProxy": "0x38ef19fdf8e8415f18c307ed71967e19aac28ba1",
"uniswapBridge": "0x0000000000000000000000000000000000000000", "uniswapBridge": "0x0000000000000000000000000000000000000000",
"eth2DaiBridge": "0x0000000000000000000000000000000000000000" "eth2DaiBridge": "0x0000000000000000000000000000000000000000"
} }

View File

@ -42,7 +42,7 @@ describe('ABI Decoding Calldata', () => {
chainId, chainId,
}; };
contractAddresses = await migrateOnceAsync(); contractAddresses = await migrateOnceAsync(provider);
await blockchainLifecycle.startAsync(); await blockchainLifecycle.startAsync();
const config = { const config = {
chainId: constants.TESTRPC_CHAIN_ID, chainId: constants.TESTRPC_CHAIN_ID,

View File

@ -1,4 +1,17 @@
[ [
{
"version": "4.4.0-beta.4",
"changes": [
{
"note": "Deploy Forwarder after Exchange is configured as Staking Proxy is queried",
"pr": 2368
},
{
"note": "Subsequent contract addresses after the Forwarder are now modified",
"pr": 2368
}
]
},
{ {
"version": "4.4.0-beta.3", "version": "4.4.0-beta.3",
"changes": [ "changes": [

View File

@ -1,5 +1,5 @@
import { ContractAddresses } from '@0x/contract-addresses'; import { ContractAddresses } from '@0x/contract-addresses';
import { devConstants, web3Factory } from '@0x/dev-utils'; import { devConstants } from '@0x/dev-utils';
import { Web3ProviderEngine } from '@0x/subproviders'; import { Web3ProviderEngine } from '@0x/subproviders';
import { runMigrationsOnceAsync } from './index'; import { runMigrationsOnceAsync } from './index';
@ -9,11 +9,10 @@ import { runMigrationsOnceAsync } from './index';
* called, it returns the cached addresses. * called, it returns the cached addresses.
* @returns The addresses of contracts that were deployed during the migrations. * @returns The addresses of contracts that were deployed during the migrations.
*/ */
export async function migrateOnceAsync(): Promise<ContractAddresses> { export async function migrateOnceAsync(provider: Web3ProviderEngine): Promise<ContractAddresses> {
const txDefaults = { const txDefaults = {
gas: devConstants.GAS_LIMIT, gas: devConstants.GAS_LIMIT,
from: devConstants.TESTRPC_FIRST_ADDRESS, from: devConstants.TESTRPC_FIRST_ADDRESS,
}; };
const provider: Web3ProviderEngine = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true });
return runMigrationsOnceAsync(provider, txDefaults); return runMigrationsOnceAsync(provider, txDefaults);
} }

View File

@ -18,7 +18,6 @@ import { ForwarderContract } from '@0x/contracts-exchange-forwarder';
import { StakingProxyContract, TestStakingContract, ZrxVaultContract } from '@0x/contracts-staking'; import { StakingProxyContract, TestStakingContract, ZrxVaultContract } from '@0x/contracts-staking';
import { Web3ProviderEngine } from '@0x/subproviders'; import { Web3ProviderEngine } from '@0x/subproviders';
import { AbiEncoder, BigNumber, providerUtils } from '@0x/utils'; import { AbiEncoder, BigNumber, providerUtils } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
import { MethodAbi, SupportedProvider, TxData } from 'ethereum-types'; import { MethodAbi, SupportedProvider, TxData } from 'ethereum-types';
import { constants } from './utils/constants'; import { constants } from './utils/constants';
@ -65,7 +64,6 @@ export async function runMigrationsAsync(
txDefaults: TxData, txDefaults: TxData,
): Promise<ContractAddresses> { ): Promise<ContractAddresses> {
const provider = providerUtils.standardizeOrThrow(supportedProvider); const provider = providerUtils.standardizeOrThrow(supportedProvider);
const web3Wrapper = new Web3Wrapper(provider);
const chainId = new BigNumber(await providerUtils.getChainIdAsync(provider)); const chainId = new BigNumber(await providerUtils.getChainIdAsync(provider));
// Proxies // Proxies
@ -176,22 +174,6 @@ export async function runMigrationsAsync(
await exchange.registerAssetProxy(multiAssetProxy.address).awaitTransactionSuccessAsync(txDefaults); await exchange.registerAssetProxy(multiAssetProxy.address).awaitTransactionSuccessAsync(txDefaults);
await exchange.registerAssetProxy(staticCallProxy.address).awaitTransactionSuccessAsync(txDefaults); await exchange.registerAssetProxy(staticCallProxy.address).awaitTransactionSuccessAsync(txDefaults);
// Forwarder
const forwarder = await ForwarderContract.deployFrom0xArtifactAsync(
artifacts.Forwarder,
provider,
txDefaults,
artifacts,
exchange.address,
encodeERC20AssetData(etherToken.address),
);
// Fake the above transactions so our nonce increases and we result with the same addresses
// while AssetProxyOwner is disabled (TODO: @dekz remove)
const dummyTransactionCount = 7;
for (let index = 0; index <= dummyTransactionCount; index++) {
await web3Wrapper.sendTransactionAsync({ to: txDefaults.from, from: txDefaults.from, value: new BigNumber(0) });
}
// CoordinatorRegistry // CoordinatorRegistry
const coordinatorRegistry = await CoordinatorRegistryContract.deployFrom0xArtifactAsync( const coordinatorRegistry = await CoordinatorRegistryContract.deployFrom0xArtifactAsync(
artifacts.CoordinatorRegistry, artifacts.CoordinatorRegistry,
@ -281,6 +263,18 @@ export async function runMigrationsAsync(
await stakingLogic.addAuthorizedAddress(txDefaults.from).awaitTransactionSuccessAsync(txDefaults); await stakingLogic.addAuthorizedAddress(txDefaults.from).awaitTransactionSuccessAsync(txDefaults);
await stakingLogic.addExchangeAddress(exchange.address).awaitTransactionSuccessAsync(txDefaults); await stakingLogic.addExchangeAddress(exchange.address).awaitTransactionSuccessAsync(txDefaults);
// Forwarder
// Deployed after Exchange and Staking is configured as it queries
// in the constructor
const forwarder = await ForwarderContract.deployFrom0xArtifactAsync(
artifacts.Forwarder,
provider,
txDefaults,
artifacts,
exchange.address,
encodeERC20AssetData(etherToken.address),
);
const contractAddresses = { const contractAddresses = {
erc20Proxy: erc20Proxy.address, erc20Proxy: erc20Proxy.address,
erc721Proxy: erc721Proxy.address, erc721Proxy: erc721Proxy.address,

View File

@ -22,7 +22,7 @@ export type AddedRemovedListeners = (addedRemoved: AddedRemovedOrders) => void;
* Constructor options for a SRA Websocket Order Provider * Constructor options for a SRA Websocket Order Provider
*/ */
export interface SRAWebsocketOrderProviderOpts { export interface SRAWebsocketOrderProviderOpts {
// The http endpoint to the SRA service, e.g https://sra.0x.org/v2 // The http endpoint to the SRA service, e.g https://sra.0x.org/v3
httpEndpoint: string; httpEndpoint: string;
// The websocket endpoint to the SRA service, e.g wss://ws.sra.0x.org/ // The websocket endpoint to the SRA service, e.g wss://ws.sra.0x.org/
websocketEndpoint: string; websocketEndpoint: string;
@ -32,7 +32,7 @@ export interface SRAWebsocketOrderProviderOpts {
* Constructor options for a SRA Polling Order Provider * Constructor options for a SRA Polling Order Provider
*/ */
export interface SRAPollingOrderProviderOpts { export interface SRAPollingOrderProviderOpts {
// The http endpoint to the SRA service, e.g https://sra.0x.org/v2 // The http endpoint to the SRA service, e.g https://sra.0x.org/v3
httpEndpoint: string; httpEndpoint: string;
// The interval between polling for each subscription // The interval between polling for each subscription
pollingIntervalMs: number; pollingIntervalMs: number;

View File

@ -25,27 +25,30 @@ describe('MeshOrderProvider', () => {
subscription: subscriptionId, subscription: subscriptionId,
result: [ result: [
{ {
orderHash: '0x96e6eb6174dbf0458686bdae44c9a330d9a9eb563962512a7be545c4ecc13fd4', orderHash: '0xa452cc6e2c7756376f0f2379e7dd81aa9285b26515774d0ad8801a4c243a30a3',
signedOrder: { signedOrder: {
makerAddress: '0x50f84bbee6fb250d6f49e854fa280445369d64d9', chainId: 1337,
exchangeAddress: '0x4eacd0af335451709e1e7b570b8ea68edec8bc97',
makerAddress: '0x8c5c2671b71bad73d8b6fb7e8ef6fe5ec95ff661',
makerAssetData, makerAssetData,
makerAssetAmount: '4424020538752105500000', makerFeeAssetData: '0x',
makerAssetAmount: '19501674723',
makerFee: '0', makerFee: '0',
takerAddress: '0x0000000000000000000000000000000000000000', takerAddress: '0x0000000000000000000000000000000000000000',
takerAssetData, takerAssetData,
takerAssetAmount: '1000000000000000061', takerFeeAssetData: '0x',
takerAssetAmount: '132880707765170593819',
takerFee: '0', takerFee: '0',
senderAddress: '0x0000000000000000000000000000000000000000', senderAddress: '0x0000000000000000000000000000000000000000',
exchangeAddress: '0x4f833a24e1f95d70f028921e27040ca56e09ab0b', feeRecipientAddress: '0x0000000000000000000000000000000000000000',
feeRecipientAddress: '0xa258b39954cef5cb142fd567a46cddb31a670124', expirationTimeSeconds: '1574687060',
expirationTimeSeconds: '1559422407', salt: '1574686820004',
salt: '1559422141994',
signature: signature:
'0x1cf16c2f3a210965b5e17f51b57b869ba4ddda33df92b0017b4d8da9dacd3152b122a73844eaf50ccde29a42950239ba36a525ed7f1698a8a5e1896cf7d651aed203', '0x1b64e67271f10832485356d9ef203b7e2c855067c1253b4e66ee06e85cd46427b157fc4c60f86bd637291f971d1443f65f631b76b887b7f82ebb36499f2f9cf10d03',
}, },
kind: 'ADDED', endState: 'ADDED',
fillableTakerAssetAmount: 1000000000000000061, fillableTakerAssetAmount: '132880707765170593819',
txHash: '0x0000000000000000000000000000000000000000000000000000000000000000', contractEvents: [],
}, },
], ],
}, },
@ -55,7 +58,7 @@ describe('MeshOrderProvider', () => {
...{ ...{
params: { params: {
...addedResponse.params, ...addedResponse.params,
result: [{ ...addedResponse.params.result[0], kind: 'CANCELLED', fillableTakerAssetAmount: 0 }], result: [{ ...addedResponse.params.result[0], endState: 'CANCELLED', fillableTakerAssetAmount: '0' }],
}, },
}, },
}; };
@ -152,7 +155,7 @@ describe('MeshOrderProvider', () => {
const orders = orderStore.getOrderSetForAssets(makerAssetData, takerAssetData); const orders = orderStore.getOrderSetForAssets(makerAssetData, takerAssetData);
expect(orders.size()).toBe(1); expect(orders.size()).toBe(1);
}); });
test('stores removed orders on a subscription update', async () => { test('removes orders on a subscription update', async () => {
const added = JSON.stringify(addedResponse); const added = JSON.stringify(addedResponse);
const removed = JSON.stringify(removedResponse); const removed = JSON.stringify(removedResponse);
stubs.push(sinon.stub(WSClient.prototype, 'getOrdersAsync').callsFake(async () => Promise.resolve([]))); stubs.push(sinon.stub(WSClient.prototype, 'getOrdersAsync').callsFake(async () => Promise.resolve([])));

View File

@ -1,9 +1,10 @@
import { HttpClient, ordersChannelFactory, OrdersChannelHandler } from '@0x/connect'; import { APIOrder, HttpClient, ordersChannelFactory, OrdersChannelHandler } from '@0x/connect';
import * as sinon from 'sinon'; import * as sinon from 'sinon';
import { SRAWebsocketOrderProvider } from '../../src'; import { SRAWebsocketOrderProvider } from '../../src';
import { BaseOrderProvider } from '../../src/order_provider/base_order_provider'; import { BaseOrderProvider } from '../../src/order_provider/base_order_provider';
import { OrderStore } from '../../src/order_store'; import { OrderStore } from '../../src/order_store';
import { utils } from '../../src/utils';
import { createOrder } from '../utils'; import { createOrder } from '../utils';
// tslint:disable-next-line:no-empty // tslint:disable-next-line:no-empty
@ -56,10 +57,11 @@ describe('SRAWebsocketOrderProvider', () => {
expect(stub.callCount).toBe(2); expect(stub.callCount).toBe(2);
}); });
test('adds orders from the subscription', async () => { test('adds orders from the subscription', async () => {
const orders: APIOrder[] = [];
const stub = sinon.stub(HttpClient.prototype, 'getOrdersAsync').callsFake(async () => const stub = sinon.stub(HttpClient.prototype, 'getOrdersAsync').callsFake(async () =>
Promise.resolve({ Promise.resolve({
records: [], records: orders,
total: 0, total: orders.length,
perPage: 1, perPage: 1,
page: 1, page: 1,
}), }),
@ -79,11 +81,12 @@ describe('SRAWebsocketOrderProvider', () => {
if (handler) { if (handler) {
const channel = ''; const channel = '';
const subscriptionOpts = {}; const subscriptionOpts = {};
const orders = [createOrder(makerAssetData, takerAssetData)]; orders.push(createOrder(makerAssetData, takerAssetData));
handler.onUpdate(channel as any, subscriptionOpts as any, orders); handler.onUpdate(channel as any, subscriptionOpts as any, orders);
} }
expect(stub.callCount).toBe(2); expect(stub.callCount).toBe(2);
expect(wsStub.callCount).toBe(1); expect(wsStub.callCount).toBe(1);
await utils.delayAsync(5);
const storedOrders = orderStore.getOrderSetForAssets(makerAssetData, takerAssetData); const storedOrders = orderStore.getOrderSetForAssets(makerAssetData, takerAssetData);
expect(storedOrders.size()).toBe(1); expect(storedOrders.size()).toBe(1);
}); });