Prevent getFeesAsync method on HttpClient from mutating input
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user