Files
protocol/packages/orderbook/test/orderbook.test.ts
2019-09-16 11:48:51 -04:00

77 lines
3.5 KiB
TypeScript

import { HttpClient } from '@0x/connect';
import * as sinon from 'sinon';
import { Orderbook } from '../src';
import { createOrder } from './utils';
describe('Orderbook', () => {
const httpEndpoint = 'https://localhost';
const makerAssetData = '0xf47261b000000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a23260359';
const takerAssetData = '0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2';
const stubs: sinon.SinonStub[] = [];
afterEach(() => {
stubs.forEach(s => s.restore());
});
describe('#getOrdersAsync', () => {
test('returns the orders stored', async () => {
const records = [createOrder(makerAssetData, takerAssetData)];
stubs.push(
sinon.stub(HttpClient.prototype, 'getOrdersAsync').callsFake(async () =>
Promise.resolve({
records,
total: 1,
perPage: 1,
page: 1,
}),
),
);
const orderbook = Orderbook.getOrderbookForPollingProvider({ httpEndpoint, pollingIntervalMs: 5 });
const orders = await orderbook.getOrdersAsync(makerAssetData, takerAssetData);
expect(orders.length).toBe(1);
});
});
describe('#addOrdersAsync', () => {
test('propagates the order rejection', async () => {
stubs.push(
sinon
.stub(HttpClient.prototype, 'getOrdersAsync')
.callsFake(async () => Promise.resolve({ records: [], total: 0, perPage: 0, page: 1 })),
);
stubs.push(
sinon
.stub(HttpClient.prototype, 'submitOrderAsync')
.callsFake(async () => Promise.reject('INVALID_ORDER')),
);
const orderbook = Orderbook.getOrderbookForPollingProvider({ httpEndpoint, pollingIntervalMs: 5 });
const result = await orderbook.addOrdersAsync([createOrder(makerAssetData, takerAssetData).order]);
expect(result.rejected.length).toBe(1);
expect(result.accepted.length).toBe(0);
});
test('propagates the order accepted', async () => {
stubs.push(
sinon
.stub(HttpClient.prototype, 'getOrdersAsync')
.callsFake(async () => Promise.resolve({ records: [], total: 0, perPage: 0, page: 1 })),
);
stubs.push(sinon.stub(HttpClient.prototype, 'submitOrderAsync').callsFake(async () => Promise.resolve()));
const orderbook = Orderbook.getOrderbookForPollingProvider({ httpEndpoint, pollingIntervalMs: 5 });
const result = await orderbook.addOrdersAsync([createOrder(makerAssetData, takerAssetData).order]);
expect(result.rejected.length).toBe(0);
expect(result.accepted.length).toBe(1);
});
});
describe('#getAvailableAssetDatasAsync', () => {
test('gets the available assets', async () => {
stubs.push(
sinon
.stub(HttpClient.prototype, 'getAssetPairsAsync')
.callsFake(async () => Promise.resolve({ records: [], total: 0, perPage: 0, page: 1 })),
);
const orderbook = Orderbook.getOrderbookForPollingProvider({ httpEndpoint, pollingIntervalMs: 5 });
const result = await orderbook.getAvailableAssetDatasAsync();
expect(result.length).toBe(0);
});
});
});