Merge branch 'development' into fix/mutatedInput
* development: Changes to abi-gen after code review Added constructor ABIs to abi-gen Describe #295 in a CHANGELOG Add #302 description to changelog Fix formatting Apply prettier config Install prettier Remove formatting esilnt rules sendTransactionAsync should return txHash string Added Event generation to abi-gen Publish Add dates to CHANGELOG entries Update subproviders CHANGELOG Support both personal_sign and eth_sign Fix Ledger tests given change from `personal_sign` to `eth_sign` Update subprovider to catch correct RPC method Rename guide Update contribution guide Fix broken links in the abi-gen README Fix typing generation for arrays in which types separated by |s
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import { BigNumber } from 'bignumber.js';
|
||||
|
||||
import {FeesResponse} from '../../../src/types';
|
||||
import { FeesResponse } from '../../../src/types';
|
||||
|
||||
export const feesResponse: FeesResponse = {
|
||||
feeRecipient: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import { BigNumber } from 'bignumber.js';
|
||||
|
||||
export const orderResponse = {
|
||||
maker: '0x9e56625509c2f60af937f23b7b532600390e8c8b',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import { BigNumber } from 'bignumber.js';
|
||||
|
||||
export const orderbookResponse = {
|
||||
bids: [
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import { BigNumber } from 'bignumber.js';
|
||||
|
||||
export const ordersResponse = [
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import { BigNumber } from 'bignumber.js';
|
||||
|
||||
import {TokenPairsItem} from '../../../src/types';
|
||||
import { TokenPairsItem } from '../../../src/types';
|
||||
|
||||
export const tokenPairsResponse: TokenPairsItem[] = [
|
||||
{
|
||||
|
||||
@@ -1,24 +1,21 @@
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import { BigNumber } from 'bignumber.js';
|
||||
import * as chai from 'chai';
|
||||
import * as chaiAsPromised from 'chai-as-promised';
|
||||
import * as dirtyChai from 'dirty-chai';
|
||||
import * as fetchMock from 'fetch-mock';
|
||||
import 'mocha';
|
||||
|
||||
import {HttpClient} from '../src/index';
|
||||
import { HttpClient } from '../src/index';
|
||||
|
||||
import {feesResponse} from './fixtures/standard_relayer_api/fees';
|
||||
import { feesResponse } from './fixtures/standard_relayer_api/fees';
|
||||
import * as feesResponseJSON from './fixtures/standard_relayer_api/fees.json';
|
||||
import {
|
||||
orderResponse,
|
||||
} from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
|
||||
// tslint:disable-next-line:max-line-length
|
||||
import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
|
||||
import * as orderResponseJSON from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.json';
|
||||
import {orderbookResponse} from './fixtures/standard_relayer_api/orderbook';
|
||||
import { orderbookResponse } from './fixtures/standard_relayer_api/orderbook';
|
||||
import * as orderbookJSON from './fixtures/standard_relayer_api/orderbook.json';
|
||||
import {ordersResponse} from './fixtures/standard_relayer_api/orders';
|
||||
import { ordersResponse } from './fixtures/standard_relayer_api/orders';
|
||||
import * as ordersResponseJSON from './fixtures/standard_relayer_api/orders.json';
|
||||
import {tokenPairsResponse} from './fixtures/standard_relayer_api/token_pairs';
|
||||
import { tokenPairsResponse } from './fixtures/standard_relayer_api/token_pairs';
|
||||
import * as tokenPairsResponseJSON from './fixtures/standard_relayer_api/token_pairs.json';
|
||||
|
||||
chai.config.includeStack = true;
|
||||
@@ -50,7 +47,7 @@ describe('HttpClient', () => {
|
||||
expect(tokenPairs).to.be.deep.equal(tokenPairsResponse);
|
||||
});
|
||||
it('throws an error for invalid JSON response', async () => {
|
||||
fetchMock.get(url, {test: 'dummy'});
|
||||
fetchMock.get(url, { test: 'dummy' });
|
||||
expect(relayerClient.getTokenPairsAsync()).to.be.rejected();
|
||||
});
|
||||
});
|
||||
@@ -72,7 +69,7 @@ describe('HttpClient', () => {
|
||||
expect(orders).to.be.deep.equal(ordersResponse);
|
||||
});
|
||||
it('throws an error for invalid JSON response', async () => {
|
||||
fetchMock.get(url, {test: 'dummy'});
|
||||
fetchMock.get(url, { test: 'dummy' });
|
||||
expect(relayerClient.getOrdersAsync()).to.be.rejected();
|
||||
});
|
||||
});
|
||||
@@ -85,7 +82,7 @@ describe('HttpClient', () => {
|
||||
expect(order).to.be.deep.equal(orderResponse);
|
||||
});
|
||||
it('throws an error for invalid JSON response', async () => {
|
||||
fetchMock.get(url, {test: 'dummy'});
|
||||
fetchMock.get(url, { test: 'dummy' });
|
||||
expect(relayerClient.getOrderAsync(orderHash)).to.be.rejected();
|
||||
});
|
||||
});
|
||||
@@ -94,15 +91,16 @@ describe('HttpClient', () => {
|
||||
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||
quoteTokenAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
||||
};
|
||||
// tslint:disable-next-line:max-line-length
|
||||
const url = `${relayUrl}/v0/orderbook?baseTokenAddress=${request.baseTokenAddress}"eTokenAddress=${request.quoteTokenAddress}`;
|
||||
const url = `${relayUrl}/v0/orderbook?baseTokenAddress=${request.baseTokenAddress}"eTokenAddress=${
|
||||
request.quoteTokenAddress
|
||||
}`;
|
||||
it('gets order book', async () => {
|
||||
fetchMock.get(url, orderbookJSON);
|
||||
const orderbook = await relayerClient.getOrderbookAsync(request);
|
||||
expect(orderbook).to.be.deep.equal(orderbookResponse);
|
||||
});
|
||||
it('throws an error for invalid JSON response', async () => {
|
||||
fetchMock.get(url, {test: 'dummy'});
|
||||
fetchMock.get(url, { test: 'dummy' });
|
||||
expect(relayerClient.getOrderbookAsync(request)).to.be.rejected();
|
||||
});
|
||||
});
|
||||
@@ -137,7 +135,7 @@ describe('HttpClient', () => {
|
||||
expect(expirationUnixTimestampSecBefore).to.be.deep.equal(request.expirationUnixTimestampSec);
|
||||
});
|
||||
it('throws an error for invalid JSON response', async () => {
|
||||
fetchMock.post(url, {test: 'dummy'});
|
||||
fetchMock.post(url, { test: 'dummy' });
|
||||
expect(relayerClient.getFeesAsync(request)).to.be.rejected();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -2,16 +2,15 @@ import * as chai from 'chai';
|
||||
import * as dirtyChai from 'dirty-chai';
|
||||
import 'mocha';
|
||||
|
||||
import {orderbookChannelMessageParsers} from '../src/utils/orderbook_channel_message_parsers';
|
||||
import { orderbookChannelMessageParsers } from '../src/utils/orderbook_channel_message_parsers';
|
||||
|
||||
// tslint:disable-next-line:max-line-length
|
||||
import {orderResponse} from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
|
||||
import {orderbookResponse} from './fixtures/standard_relayer_api/orderbook';
|
||||
import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
|
||||
import { orderbookResponse } from './fixtures/standard_relayer_api/orderbook';
|
||||
import {
|
||||
malformedSnapshotOrderbookChannelMessage,
|
||||
snapshotOrderbookChannelMessage,
|
||||
} from './fixtures/standard_relayer_api/snapshot_orderbook_channel_message';
|
||||
import {unknownOrderbookChannelMessage} from './fixtures/standard_relayer_api/unknown_orderbook_channel_message';
|
||||
import { unknownOrderbookChannelMessage } from './fixtures/standard_relayer_api/unknown_orderbook_channel_message';
|
||||
import {
|
||||
malformedUpdateOrderbookChannelMessage,
|
||||
updateOrderbookChannelMessage,
|
||||
@@ -58,15 +57,13 @@ describe('orderbookChannelMessageParsers', () => {
|
||||
expect(badCall).throws('Expected type to be of type string, encountered: 1');
|
||||
});
|
||||
it('throws when snapshot message has malformed payload', () => {
|
||||
const badCall = () =>
|
||||
orderbookChannelMessageParsers.parser(malformedSnapshotOrderbookChannelMessage);
|
||||
// tslint:disable-next-line:max-line-length
|
||||
const errMsg = 'Validation errors: instance.payload requires property "bids", instance.payload requires property "asks"';
|
||||
const badCall = () => orderbookChannelMessageParsers.parser(malformedSnapshotOrderbookChannelMessage);
|
||||
const errMsg =
|
||||
'Validation errors: instance.payload requires property "bids", instance.payload requires property "asks"';
|
||||
expect(badCall).throws(errMsg);
|
||||
});
|
||||
it('throws when update message has malformed payload', () => {
|
||||
const badCall = () =>
|
||||
orderbookChannelMessageParsers.parser(malformedUpdateOrderbookChannelMessage);
|
||||
const badCall = () => orderbookChannelMessageParsers.parser(malformedUpdateOrderbookChannelMessage);
|
||||
expect(badCall).throws(/^Expected message to conform to schema/);
|
||||
});
|
||||
it('throws when input message is not valid JSON', () => {
|
||||
|
||||
@@ -3,9 +3,7 @@ import * as dirtyChai from 'dirty-chai';
|
||||
import * as _ from 'lodash';
|
||||
import 'mocha';
|
||||
|
||||
import {
|
||||
WebSocketOrderbookChannel,
|
||||
} from '../src/ws_orderbook_channel';
|
||||
import { WebSocketOrderbookChannel } from '../src/ws_orderbook_channel';
|
||||
|
||||
chai.config.includeStack = true;
|
||||
chai.use(dirtyChai);
|
||||
@@ -21,26 +19,42 @@ describe('WebSocketOrderbookChannel', () => {
|
||||
limit: 100,
|
||||
};
|
||||
const emptyOrderbookChannelHandler = {
|
||||
onSnapshot: () => { _.noop(); },
|
||||
onUpdate: () => { _.noop(); },
|
||||
onError: () => { _.noop(); },
|
||||
onClose: () => { _.noop(); },
|
||||
onSnapshot: () => {
|
||||
_.noop();
|
||||
},
|
||||
onUpdate: () => {
|
||||
_.noop();
|
||||
},
|
||||
onError: () => {
|
||||
_.noop();
|
||||
},
|
||||
onClose: () => {
|
||||
_.noop();
|
||||
},
|
||||
};
|
||||
describe('#subscribe', () => {
|
||||
it('throws when subscriptionOpts does not conform to schema', () => {
|
||||
const badSubscribeCall = orderbookChannel.subscribe.bind(
|
||||
orderbookChannel, {}, emptyOrderbookChannelHandler);
|
||||
// tslint:disable-next-line:max-line-length
|
||||
expect(badSubscribeCall).throws('Expected subscriptionOpts to conform to schema /RelayerApiOrderbookChannelSubscribePayload\nEncountered: {}\nValidation errors: instance requires property "baseTokenAddress", instance requires property "quoteTokenAddress"');
|
||||
orderbookChannel,
|
||||
{},
|
||||
emptyOrderbookChannelHandler,
|
||||
);
|
||||
expect(badSubscribeCall).throws(
|
||||
'Expected subscriptionOpts to conform to schema /RelayerApiOrderbookChannelSubscribePayload\nEncountered: {}\nValidation errors: instance requires property "baseTokenAddress", instance requires property "quoteTokenAddress"',
|
||||
);
|
||||
});
|
||||
it('throws when handler has the incorrect members', () => {
|
||||
const badSubscribeCall = orderbookChannel.subscribe.bind(orderbookChannel, subscriptionOpts, {});
|
||||
expect(badSubscribeCall)
|
||||
.throws('Expected handler.onSnapshot to be of type function, encountered: undefined');
|
||||
expect(badSubscribeCall).throws(
|
||||
'Expected handler.onSnapshot to be of type function, encountered: undefined',
|
||||
);
|
||||
});
|
||||
it('does not throw when inputs are of correct types', () => {
|
||||
const goodSubscribeCall = orderbookChannel.subscribe.bind(
|
||||
orderbookChannel, subscriptionOpts, emptyOrderbookChannelHandler);
|
||||
orderbookChannel,
|
||||
subscriptionOpts,
|
||||
emptyOrderbookChannelHandler,
|
||||
);
|
||||
expect(goodSubscribeCall).to.not.throw();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user