Remove default query parameters

This commit is contained in:
fragosti 2018-08-17 13:58:55 -07:00
parent 48ec78d3aa
commit f2d1d95355
8 changed files with 2880 additions and 37 deletions

View File

@ -26,13 +26,6 @@ import {
import { relayerResponseJsonParsers } from './utils/relayer_response_json_parsers'; import { relayerResponseJsonParsers } from './utils/relayer_response_json_parsers';
const TRAILING_SLASHES_REGEX = /\/+$/; const TRAILING_SLASHES_REGEX = /\/+$/;
const DEFAULT_PAGED_REQUEST_OPTS: PagedRequestOpts = {
page: 1,
perPage: 100,
};
const DEFAULT_REQUEST_OPTS: RequestOpts = {
networkId: 1,
};
/** /**
* This class includes all the functionality related to interacting with a set of HTTP endpoints * This class includes all the functionality related to interacting with a set of HTTP endpoints
@ -73,7 +66,7 @@ export class HttpClient implements Client {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema);
} }
const httpRequestOpts = { const httpRequestOpts = {
params: _.defaults({}, requestOpts, DEFAULT_REQUEST_OPTS, DEFAULT_PAGED_REQUEST_OPTS), params: requestOpts,
}; };
const responseJson = await this._requestAsync('/asset_pairs', HttpRequestType.Get, httpRequestOpts); const responseJson = await this._requestAsync('/asset_pairs', HttpRequestType.Get, httpRequestOpts);
const assetDataPairs = relayerResponseJsonParsers.parseAssetDataPairsJson(responseJson); const assetDataPairs = relayerResponseJsonParsers.parseAssetDataPairsJson(responseJson);
@ -91,7 +84,7 @@ export class HttpClient implements Client {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema);
} }
const httpRequestOpts = { const httpRequestOpts = {
params: _.defaults({}, requestOpts, DEFAULT_REQUEST_OPTS, DEFAULT_PAGED_REQUEST_OPTS), params: requestOpts,
}; };
const responseJson = await this._requestAsync(`/orders`, HttpRequestType.Get, httpRequestOpts); const responseJson = await this._requestAsync(`/orders`, HttpRequestType.Get, httpRequestOpts);
const orders = relayerResponseJsonParsers.parseOrdersJson(responseJson); const orders = relayerResponseJsonParsers.parseOrdersJson(responseJson);
@ -108,7 +101,7 @@ export class HttpClient implements Client {
} }
assert.doesConformToSchema('orderHash', orderHash, schemas.orderHashSchema); assert.doesConformToSchema('orderHash', orderHash, schemas.orderHashSchema);
const httpRequestOpts = { const httpRequestOpts = {
params: _.defaults({}, requestOpts, DEFAULT_REQUEST_OPTS), params: requestOpts,
}; };
const responseJson = await this._requestAsync(`/order/${orderHash}`, HttpRequestType.Get, httpRequestOpts); const responseJson = await this._requestAsync(`/order/${orderHash}`, HttpRequestType.Get, httpRequestOpts);
const order = relayerResponseJsonParsers.parseAPIOrderJson(responseJson); const order = relayerResponseJsonParsers.parseAPIOrderJson(responseJson);
@ -130,7 +123,7 @@ export class HttpClient implements Client {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema);
} }
const httpRequestOpts = { const httpRequestOpts = {
params: _.defaults({}, request, requestOpts, DEFAULT_REQUEST_OPTS, DEFAULT_PAGED_REQUEST_OPTS), params: _.defaults({}, request, requestOpts),
}; };
const responseJson = await this._requestAsync('/orderbook', HttpRequestType.Get, httpRequestOpts); const responseJson = await this._requestAsync('/orderbook', HttpRequestType.Get, httpRequestOpts);
const orderbook = relayerResponseJsonParsers.parseOrderbookResponseJson(responseJson); const orderbook = relayerResponseJsonParsers.parseOrderbookResponseJson(responseJson);
@ -147,7 +140,7 @@ export class HttpClient implements Client {
} }
assert.doesConformToSchema('request', request, clientSchemas.orderConfigRequestSchema); assert.doesConformToSchema('request', request, clientSchemas.orderConfigRequestSchema);
const httpRequestOpts = { const httpRequestOpts = {
params: _.defaults({}, requestOpts, DEFAULT_REQUEST_OPTS), params: requestOpts,
payload: request, payload: request,
}; };
const responseJson = await this._requestAsync('/order_config', HttpRequestType.Post, httpRequestOpts); const responseJson = await this._requestAsync('/order_config', HttpRequestType.Post, httpRequestOpts);
@ -163,7 +156,7 @@ export class HttpClient implements Client {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema);
} }
const httpRequestOpts = { const httpRequestOpts = {
params: _.defaults({}, requestOpts, DEFAULT_REQUEST_OPTS, DEFAULT_PAGED_REQUEST_OPTS), params: requestOpts,
}; };
const feeRecipients = await this._requestAsync('/fee_recipients', HttpRequestType.Get, httpRequestOpts); const feeRecipients = await this._requestAsync('/fee_recipients', HttpRequestType.Get, httpRequestOpts);
assert.doesConformToSchema('feeRecipients', feeRecipients, schemas.relayerApiFeeRecipientsResponseSchema); assert.doesConformToSchema('feeRecipients', feeRecipients, schemas.relayerApiFeeRecipientsResponseSchema);
@ -176,7 +169,7 @@ export class HttpClient implements Client {
public async submitOrderAsync(signedOrder: SignedOrder, requestOpts?: RequestOpts): Promise<void> { public async submitOrderAsync(signedOrder: SignedOrder, requestOpts?: RequestOpts): Promise<void> {
assert.doesConformToSchema('signedOrder', signedOrder, schemas.signedOrderSchema); assert.doesConformToSchema('signedOrder', signedOrder, schemas.signedOrderSchema);
const httpRequestOpts = { const httpRequestOpts = {
params: _.defaults({}, requestOpts, DEFAULT_REQUEST_OPTS), params: requestOpts,
payload: signedOrder, payload: signedOrder,
}; };
await this._requestAsync('/order', HttpRequestType.Post, httpRequestOpts); await this._requestAsync('/order', HttpRequestType.Post, httpRequestOpts);

View File

@ -0,0 +1,7 @@
export const requestOptsSchema = {
id: '/RequestOpts',
type: 'object',
properties: {
networkId: { type: 'number' },
},
};

View File

@ -3,7 +3,7 @@
"page": 1, "page": 1,
"perPage": 10, "perPage": 10,
"records": [ "records": [
"0x6eC92694ea172ebC430C30fa31De87620967A082", "0x6ec92694ea172ebc430c30fa31de87620967a082",
"0x9e56625509c2f60af937f23b7b532600390e8c8b", "0x9e56625509c2f60af937f23b7b532600390e8c8b",
"0xa2b31dacf30a9c50ca473337c01d8a201ae33e32" "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32"
] ]

View File

@ -5,7 +5,7 @@ export const feeRecipientsResponse: FeeRecipientsResponse = {
page: 1, page: 1,
perPage: 10, perPage: 10,
records: [ records: [
'0x6eC92694ea172ebC430C30fa31De87620967A082', '0x6ec92694ea172ebc430c30fa31de87620967a082',
'0x9e56625509c2f60af937f23b7b532600390e8c8b', '0x9e56625509c2f60af937f23b7b532600390e8c8b',
'0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
], ],

View File

@ -43,8 +43,7 @@ describe('HttpClient', () => {
describe('#getAssetPairsAsync', () => { describe('#getAssetPairsAsync', () => {
const url = `${relayUrl}/asset_pairs`; const url = `${relayUrl}/asset_pairs`;
it('gets assetData pairs with default options when none are provided', async () => { it('gets assetData pairs with default options when none are provided', async () => {
const urlWithQuery = `${url}?page=1&perPage=100`; fetchMock.get(url, assetDataPairsResponseJSON);
fetchMock.get(urlWithQuery, assetDataPairsResponseJSON);
const assetDataPairs = await relayerClient.getAssetPairsAsync(); const assetDataPairs = await relayerClient.getAssetPairsAsync();
expect(assetDataPairs).to.be.deep.equal(assetDataPairsResponse); expect(assetDataPairs).to.be.deep.equal(assetDataPairsResponse);
}); });
@ -54,8 +53,9 @@ describe('HttpClient', () => {
assetDataA: assetData, assetDataA: assetData,
page: 3, page: 3,
perPage: 50, perPage: 50,
networkdId: 42,
}; };
const urlWithQuery = `${url}?assetDataA=${assetData}&page=3&perPage=50`; const urlWithQuery = `${url}?assetDataA=${assetData}&networkdId=42&page=3&perPage=50`;
fetchMock.get(urlWithQuery, assetDataPairsResponseJSON); fetchMock.get(urlWithQuery, assetDataPairsResponseJSON);
const assetDataPairs = await relayerClient.getAssetPairsAsync(assetPairsRequestOpts); const assetDataPairs = await relayerClient.getAssetPairsAsync(assetPairsRequestOpts);
expect(assetDataPairs).to.be.deep.equal(assetDataPairsResponse); expect(assetDataPairs).to.be.deep.equal(assetDataPairsResponse);
@ -68,8 +68,7 @@ describe('HttpClient', () => {
describe('#getOrdersAsync', () => { describe('#getOrdersAsync', () => {
const url = `${relayUrl}/orders`; const url = `${relayUrl}/orders`;
it('gets orders with default options when none are provided', async () => { it('gets orders with default options when none are provided', async () => {
const urlWithQuery = `${url}?page=1&perPage=100`; fetchMock.get(url, ordersResponseJSON);
fetchMock.get(urlWithQuery, ordersResponseJSON);
const orders = await relayerClient.getOrdersAsync(); const orders = await relayerClient.getOrdersAsync();
expect(orders).to.be.deep.equal(ordersResponse); expect(orders).to.be.deep.equal(ordersResponse);
}); });
@ -79,8 +78,9 @@ describe('HttpClient', () => {
assetDataAddress, assetDataAddress,
page: 3, page: 3,
perPage: 50, perPage: 50,
networkdId: 42,
}; };
const urlWithQuery = `${url}?assetDataAddress=${assetDataAddress}&page=3&perPage=50`; const urlWithQuery = `${url}?assetDataAddress=${assetDataAddress}&networkdId=42&page=3&perPage=50`;
fetchMock.get(urlWithQuery, ordersResponseJSON); fetchMock.get(urlWithQuery, ordersResponseJSON);
const orders = await relayerClient.getOrdersAsync(ordersRequest); const orders = await relayerClient.getOrdersAsync(ordersRequest);
expect(orders).to.be.deep.equal(ordersResponse); expect(orders).to.be.deep.equal(ordersResponse);
@ -112,7 +112,7 @@ describe('HttpClient', () => {
it('gets orderbook with default page options when none are provided', async () => { it('gets orderbook with default page options when none are provided', async () => {
const urlWithQuery = `${url}?baseAssetData=${ const urlWithQuery = `${url}?baseAssetData=${
request.baseAssetData request.baseAssetData
}&page=1&perPage=100&quoteAssetData=${request.quoteAssetData}`; }&quoteAssetData=${request.quoteAssetData}`;
fetchMock.get(urlWithQuery, orderbookJSON); fetchMock.get(urlWithQuery, orderbookJSON);
const orderbook = await relayerClient.getOrderbookAsync(request); const orderbook = await relayerClient.getOrderbookAsync(request);
expect(orderbook).to.be.deep.equal(orderbookResponse); expect(orderbook).to.be.deep.equal(orderbookResponse);
@ -120,11 +120,12 @@ describe('HttpClient', () => {
it('gets orderbook with specified page options', async () => { it('gets orderbook with specified page options', async () => {
const urlWithQuery = `${url}?baseAssetData=${ const urlWithQuery = `${url}?baseAssetData=${
request.baseAssetData request.baseAssetData
}&page=3&perPage=50&quoteAssetData=${request.quoteAssetData}`; }&networkId=42&page=3&perPage=50&quoteAssetData=${request.quoteAssetData}`;
fetchMock.get(urlWithQuery, orderbookJSON); fetchMock.get(urlWithQuery, orderbookJSON);
const pagedRequestOptions = { const pagedRequestOptions = {
page: 3, page: 3,
perPage: 50, perPage: 50,
networkId: 42,
}; };
const orderbook = await relayerClient.getOrderbookAsync(request, pagedRequestOptions); const orderbook = await relayerClient.getOrderbookAsync(request, pagedRequestOptions);
expect(orderbook).to.be.deep.equal(orderbookResponse); expect(orderbook).to.be.deep.equal(orderbookResponse);
@ -146,7 +147,7 @@ describe('HttpClient', () => {
exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093', exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093',
}; };
const url = `${relayUrl}/order_config`; const url = `${relayUrl}/order_config`;
it('gets fees', async () => { it('gets order config', async () => {
fetchMock.post(url, orderConfigResponseJSON); fetchMock.post(url, orderConfigResponseJSON);
const fees = await relayerClient.getOrderConfigAsync(request); const fees = await relayerClient.getOrderConfigAsync(request);
expect(fees).to.be.deep.equal(orderConfigResponse); expect(fees).to.be.deep.equal(orderConfigResponse);
@ -168,17 +169,18 @@ describe('HttpClient', () => {
}); });
describe('#getFeeRecipientsAsync', () => { describe('#getFeeRecipientsAsync', () => {
const url = `${relayUrl}/fee_recipients`; const url = `${relayUrl}/fee_recipients`;
it('gets orderbook with default page options when none are provided', async () => { it('gets fee recipients with default page options when none are provided', async () => {
fetchMock.get(url, feeRecipientsResponseJSON); fetchMock.get(url, feeRecipientsResponseJSON);
const feeRecipients = await relayerClient.getFeeRecipientsAsync(); const feeRecipients = await relayerClient.getFeeRecipientsAsync();
expect(feeRecipients).to.be.deep.equal(feeRecipientsResponse); expect(feeRecipients).to.be.deep.equal(feeRecipientsResponse);
}); });
it('gets orderbook with specified page options', async () => { it('gets fee reciipient with specified page options', async () => {
const urlWithQuery = `${url}?&page=3&perPage=50`; const urlWithQuery = `${url}?networkId=42&page=3&perPage=50`;
fetchMock.get(url, feeRecipientsResponseJSON); fetchMock.get(urlWithQuery, feeRecipientsResponseJSON);
const pagedRequestOptions = { const pagedRequestOptions = {
page: 3, page: 3,
perPage: 50, perPage: 50,
networkId: 42,
}; };
const feeRecipients = await relayerClient.getFeeRecipientsAsync(pagedRequestOptions); const feeRecipients = await relayerClient.getFeeRecipientsAsync(pagedRequestOptions);
expect(feeRecipients).to.be.deep.equal(feeRecipientsResponse); expect(feeRecipients).to.be.deep.equal(feeRecipientsResponse);
@ -189,3 +191,6 @@ describe('HttpClient', () => {
}); });
}); });
}); });
// https://example.com/fee_recipients?networkId=42&page=3&perPage=50
// https://example.com/fee_recipients?networkId=42&page=3&perPage=50

View File

@ -5,15 +5,13 @@ export const relayerApiFeeRecipientsResponseSchema = {
{ $ref: '/paginatedCollectionSchema' }, { $ref: '/paginatedCollectionSchema' },
{ {
properties: { properties: {
records: { $ref: '/relayerApiFeeRecipientsSchema' }, records: {
id: '/relayerApiFeeRecipientsSchema',
type: 'array',
items: { $ref: '/addressSchema' },
},
}, },
required: ['records'], required: ['records'],
}, },
], ],
}; };
export const relayerApiFeeRecipientsSchema = {
id: '/relayerApiFeeRecipientsSchema',
type: 'array',
items: { $ref: '/addressSchema' },
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long