Merge pull request #2582 from 0xProject/feat/asset-swapper/use-quote-server

asset-swapper: Use @0x/quote-server, not local typedefs; and adapt to renamed taker request parameters
This commit is contained in:
F. Eugene Aumson
2020-06-19 13:05:10 -04:00
committed by GitHub
10 changed files with 301 additions and 76 deletions

View File

@@ -1,5 +1,6 @@
import { tokenUtils } from '@0x/dev-utils';
import { assetDataUtils } from '@0x/order-utils';
import { TakerRequest } from '@0x/quote-server';
import { StatusCodes } from '@0x/types';
import { BigNumber } from '@0x/utils';
import * as chai from 'chai';
@@ -35,11 +36,11 @@ describe('QuoteRequestor', async () => {
// Set up RFQT responses
// tslint:disable-next-line:array-type
const mockedRequests: MockedRfqtFirmQuoteResponse[] = [];
const expectedParams = {
sellToken: takerToken,
buyToken: makerToken,
sellAmount: '10000',
buyAmount: undefined,
const expectedParams: TakerRequest = {
sellTokenAddress: takerToken,
buyTokenAddress: makerToken,
sellAmountBaseUnits: new BigNumber('10000'),
buyAmountBaseUnits: undefined,
takerAddress,
};
// Successful response
@@ -54,7 +55,7 @@ describe('QuoteRequestor', async () => {
endpoint: 'https://1337.0.0.1',
requestApiKey: apiKey,
requestParams: expectedParams,
responseData: successfulOrder1,
responseData: { signedOrder: successfulOrder1 },
responseCode: StatusCodes.Success,
});
// Test out a bad response code, ensure it doesnt cause throw
@@ -73,6 +74,14 @@ describe('QuoteRequestor', async () => {
responseData: { makerAssetData: '123' },
responseCode: StatusCodes.Success,
});
// ensure that a non-JSON response doesn't throw an error when trying to parse
mockedRequests.push({
endpoint: 'https://421.1.0.1',
requestApiKey: apiKey,
requestParams: expectedParams,
responseData: 'this is not JSON!',
responseCode: StatusCodes.Success,
});
// A successful response code and valid order, but for wrong maker asset data
const wrongMakerAssetDataOrder = testOrderFactory.generateTestSignedOrder({
makerAssetData: assetDataUtils.encodeERC20AssetData(otherToken1),
@@ -83,7 +92,7 @@ describe('QuoteRequestor', async () => {
endpoint: 'https://422.0.0.1',
requestApiKey: apiKey,
requestParams: expectedParams,
responseData: wrongMakerAssetDataOrder,
responseData: { signedOrder: wrongMakerAssetDataOrder },
responseCode: StatusCodes.Success,
});
// A successful response code and valid order, but for wrong taker asset data
@@ -96,7 +105,7 @@ describe('QuoteRequestor', async () => {
endpoint: 'https://423.0.0.1',
requestApiKey: apiKey,
requestParams: expectedParams,
responseData: wrongTakerAssetDataOrder,
responseData: { signedOrder: wrongTakerAssetDataOrder },
responseCode: StatusCodes.Success,
});
// A successful response code and good order but its unsigned
@@ -111,7 +120,7 @@ describe('QuoteRequestor', async () => {
endpoint: 'https://424.0.0.1',
requestApiKey: apiKey,
requestParams: expectedParams,
responseData: unsignedOrder,
responseData: { signedOrder: unsignedOrder },
responseCode: StatusCodes.Success,
});
// A successful response code and good order but for the wrong takerAddress
@@ -126,7 +135,7 @@ describe('QuoteRequestor', async () => {
endpoint: 'https://425.0.0.1',
requestApiKey: apiKey,
requestParams: expectedParams,
responseData: orderWithNullTaker,
responseData: { signedOrder: orderWithNullTaker },
responseCode: StatusCodes.Success,
});
@@ -141,7 +150,7 @@ describe('QuoteRequestor', async () => {
endpoint: 'https://37.0.0.1',
requestApiKey: apiKey,
requestParams: expectedParams,
responseData: successfulOrder2,
responseData: { signedOrder: successfulOrder2 },
responseCode: StatusCodes.Success,
});
@@ -150,6 +159,7 @@ describe('QuoteRequestor', async () => {
'https://1337.0.0.1': [[makerToken, takerToken]],
'https://420.0.0.1': [[makerToken, takerToken]],
'https://421.0.0.1': [[makerToken, takerToken]],
'https://421.1.0.1': [[makerToken, takerToken]],
'https://422.0.0.1': [[makerToken, takerToken]],
'https://423.0.0.1': [[makerToken, takerToken]],
'https://424.0.0.1': [[makerToken, takerToken]],
@@ -169,7 +179,9 @@ describe('QuoteRequestor', async () => {
intentOnFilling: true,
},
);
expect(resp.sort()).to.eql([successfulOrder1, successfulOrder2].sort());
expect(resp.sort()).to.eql(
[{ signedOrder: successfulOrder1 }, { signedOrder: successfulOrder2 }].sort(),
);
});
});
});
@@ -181,19 +193,19 @@ describe('QuoteRequestor', async () => {
// Set up RFQT responses
// tslint:disable-next-line:array-type
const mockedRequests: MockedRfqtIndicativeQuoteResponse[] = [];
const expectedParams = {
sellToken: takerToken,
buyToken: makerToken,
sellAmount: '10000',
buyAmount: undefined,
const expectedParams: TakerRequest = {
sellTokenAddress: takerToken,
buyTokenAddress: makerToken,
sellAmountBaseUnits: new BigNumber('10000'),
buyAmountBaseUnits: undefined,
takerAddress,
};
// Successful response
const successfulQuote1 = {
makerAssetData,
takerAssetData,
makerAssetAmount: new BigNumber(expectedParams.sellAmount),
takerAssetAmount: new BigNumber(expectedParams.sellAmount),
makerAssetAmount: new BigNumber(expectedParams.sellAmountBaseUnits),
takerAssetAmount: new BigNumber(expectedParams.sellAmountBaseUnits),
expirationTimeSeconds: makeThreeMinuteExpiry(),
};
mockedRequests.push({
@@ -275,19 +287,19 @@ describe('QuoteRequestor', async () => {
// Set up RFQT responses
// tslint:disable-next-line:array-type
const mockedRequests: MockedRfqtIndicativeQuoteResponse[] = [];
const expectedParams = {
sellToken: takerToken,
buyToken: makerToken,
buyAmount: '10000',
sellAmount: undefined,
const expectedParams: TakerRequest = {
sellTokenAddress: takerToken,
buyTokenAddress: makerToken,
buyAmountBaseUnits: new BigNumber('10000'),
sellAmountBaseUnits: undefined,
takerAddress,
};
// Successful response
const successfulQuote1 = {
makerAssetData,
takerAssetData,
makerAssetAmount: new BigNumber(expectedParams.buyAmount),
takerAssetAmount: new BigNumber(expectedParams.buyAmount),
makerAssetAmount: new BigNumber(expectedParams.buyAmountBaseUnits),
takerAssetAmount: new BigNumber(expectedParams.buyAmountBaseUnits),
expirationTimeSeconds: makeThreeMinuteExpiry(),
};
mockedRequests.push({