77 lines
3.5 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
});
|