Prevent getFeesAsync method on HttpClient from mutating input

This commit is contained in:
Brandon Millman
2017-12-24 19:02:01 -05:00
parent cbf06b2165
commit 9f3acf8e28
3 changed files with 12 additions and 11 deletions

View File

@@ -112,12 +112,6 @@ export class HttpClient implements Client {
*/
public async getFeesAsync(request: FeesRequest): Promise<FeesResponse> {
assert.doesConformToSchema('request', request, schemas.relayerApiFeesPayloadSchema);
typeConverters.convertBigNumberFieldsToStrings(request, [
'makerTokenAmount',
'takerTokenAmount',
'expirationUnixTimestampSec',
'salt',
]);
const requestOpts = {
payload: request,
};

View File

@@ -18,11 +18,6 @@ export const typeConverters = {
'salt',
]);
},
convertBigNumberFieldsToStrings(obj: object, fields: string[]): void {
_.each(fields, field => {
_.update(obj, field, (value: BigNumber) => value.toString());
});
},
convertStringsFieldsToBigNumbers(obj: object, fields: string[]): void {
_.each(fields, field => {
_.update(obj, field, (value: string) => new BigNumber(value));

View File

@@ -124,6 +124,18 @@ describe('HttpClient', () => {
const fees = await relayerClient.getFeesAsync(request);
expect(fees).to.be.deep.equal(feesResponse);
});
it('does not mutate input', async () => {
fetchMock.post(url, feesResponseJSON);
const makerTokenAmountBefore = new BigNumber(request.makerTokenAmount);
const takerTokenAmountBefore = new BigNumber(request.takerTokenAmount);
const saltBefore = new BigNumber(request.salt);
const expirationUnixTimestampSecBefore = new BigNumber(request.expirationUnixTimestampSec);
await relayerClient.getFeesAsync(request);
expect(makerTokenAmountBefore).to.be.deep.equal(request.makerTokenAmount);
expect(takerTokenAmountBefore).to.be.deep.equal(request.takerTokenAmount);
expect(saltBefore).to.be.deep.equal(request.salt);
expect(expirationUnixTimestampSecBefore).to.be.deep.equal(request.expirationUnixTimestampSec);
});
it('throws an error for invalid JSON response', async () => {
fetchMock.post(url, {test: 'dummy'});
expect(relayerClient.getFeesAsync(request)).to.be.rejected();