Get schema tests running (not crashiing)

This commit is contained in:
fragosti
2018-07-31 16:37:51 -07:00
parent 162fe797fc
commit 4aff9515d8
6 changed files with 125 additions and 164 deletions

View File

@@ -3,8 +3,8 @@ export const paginatedCollectionSchema = {
type: 'object',
properties: {
total: { $ref: '/Number' },
per_page: { $ref: '/Number' },
perPage: { $ref: '/Number' },
page: { $ref: '/Number' },
},
required: ['total', 'per_page', 'page'],
required: ['total', 'perPage', 'page'],
};

View File

@@ -9,6 +9,7 @@ import { orderFillRequestsSchema } from '../schemas/order_fill_requests_schema';
import { orderHashSchema } from '../schemas/order_hash_schema';
import { orderSchema, signedOrderSchema } from '../schemas/order_schemas';
import { ordersSchema } from '../schemas/orders_schema';
import { paginatedCollectionSchema } from '../schemas/paginated_collection_schema';
import {
relayerApiAssetDataPairsResponseSchema,
relayerApiAssetDataTradeInfoSchema,
@@ -22,6 +23,9 @@ import {
relayerApiOrdersChannelSubscribeSchema,
} from '../schemas/relayer_api_orders_channel_subscribe_schema';
import { relayerApiOrdersChannelUpdateSchema } from '../schemas/relayer_api_orders_channel_update_response_schema';
import { relayerApiOrdersResponseSchema } from '../schemas/relayer_api_orders_response_schema';
import { relayerApiOrdersSchema } from '../schemas/relayer_api_orders_schema';
import { relayerApiOrderSchema } from '../schemas/relayer_api_order_schema';
import { signedOrdersSchema } from '../schemas/signed_orders_schema';
import { tokenSchema } from '../schemas/token_schema';
import { jsNumber, txDataSchema } from '../schemas/tx_data_schema';
@@ -47,13 +51,17 @@ export const schemas = {
tokenSchema,
jsNumber,
txDataSchema,
paginatedCollectionSchema,
relayerApiErrorResponseSchema,
relayerApiOrderSchema,
relayerApiOrdersSchema,
relayerApiOrderConfigPayloadSchema,
relayerApiOrderConfigResponseSchema,
relayerApiOrderBookResponseSchema,
relayerApiAssetPairsResponseSchema,
relayerApiAssetTradeInfoSchema,
relayerApiAssetDataPairsResponseSchema,
relayerApiAssetDataTradeInfoSchema,
relayerApiOrdersChannelSubscribeSchema,
relayerApiOrdersChannelSubscribePayload,
relayerApiOrdersChannelUpdateSchema,
relayerApiOrdersResponseSchema,
};

View File

@@ -26,14 +26,15 @@ const {
tokenSchema,
jsNumber,
txDataSchema,
paginatedCollectionSchema,
relayerApiErrorResponseSchema,
relayerApiOrderBookResponseSchema,
relayerApiTokenPairsResponseSchema,
relayerApiFeesPayloadSchema,
relayerApiFeesResponseSchema,
relayerApiOrderbookChannelSubscribeSchema,
relayerApiOrderbookChannelUpdateSchema,
relayerApiOrderbookChannelSnapshotSchema,
relayerApiAssetDataPairsResponseSchema,
relayerApiOrderConfigPayloadSchema,
relayerApiOrderConfigResponseSchema,
relayerApiOrdersChannelSubscribeSchema,
relayerApiOrdersChannelUpdateSchema,
relayerApiOrdersResponseSchema,
} = schemas;
describe('Schema', () => {
@@ -328,7 +329,7 @@ describe('Schema', () => {
asks: [signedOrder, signedOrder],
},
];
validateAgainstSchema(testCases, relayerApiOrderBookResponseSchema);
validateAgainstSchema(testCases, relayerApiOrdersResponseSchema);
});
it('should fail for invalid order fill requests', () => {
const testCases = [
@@ -349,16 +350,16 @@ describe('Schema', () => {
},
];
const shouldFail = true;
validateAgainstSchema(testCases, relayerApiOrderBookResponseSchema, shouldFail);
validateAgainstSchema(testCases, relayerApiOrdersResponseSchema, shouldFail);
});
});
describe('#relayerApiOrderbookChannelSubscribeSchema', () => {
it('should validate valid orderbook channel websocket subscribe message', () => {
describe('#relayerApiOrdersChannelSubscribeSchema', () => {
it('should validate valid orders channel websocket subscribe message', () => {
const testCases = [
{
type: 'subscribe',
channel: 'orderbook',
requestId: 1,
channel: 'orders',
requestId: 'randomId',
payload: {
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
@@ -368,22 +369,22 @@ describe('Schema', () => {
},
{
type: 'subscribe',
channel: 'orderbook',
requestId: 1,
channel: 'orders',
requestId: 'randomId',
payload: {
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
},
},
];
validateAgainstSchema(testCases, relayerApiOrderbookChannelSubscribeSchema);
validateAgainstSchema(testCases, relayerApiOrdersChannelSubscribeSchema);
});
it('should fail for invalid orderbook channel websocket subscribe message', () => {
it('should fail for invalid orders channel websocket subscribe message', () => {
const checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32';
const testCases = [
{
type: 'subscribe',
channel: 'orderbook',
channel: 'orders',
payload: {
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
@@ -393,8 +394,8 @@ describe('Schema', () => {
},
{
type: 'foo',
channel: 'orderbook',
requestId: 1,
channel: 'orders',
requestId: 'randomId',
payload: {
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
@@ -403,7 +404,7 @@ describe('Schema', () => {
{
type: 'subscribe',
channel: 'bar',
requestId: 1,
requestId: 'randomId',
payload: {
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
@@ -411,8 +412,8 @@ describe('Schema', () => {
},
{
type: 'subscribe',
channel: 'orderbook',
requestId: 1,
channel: 'orders',
requestId: 'randomId',
payload: {
baseTokenAddress: checksummedAddress,
quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
@@ -420,8 +421,8 @@ describe('Schema', () => {
},
{
type: 'subscribe',
channel: 'orderbook',
requestId: 1,
channel: 'orders',
requestId: 'randomId',
payload: {
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
quoteTokenAddress: checksummedAddress,
@@ -429,24 +430,24 @@ describe('Schema', () => {
},
{
type: 'subscribe',
channel: 'orderbook',
requestId: 1,
channel: 'orders',
requestId: 'randomId',
payload: {
quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
},
},
{
type: 'subscribe',
channel: 'orderbook',
requestId: 1,
channel: 'orders',
requestId: 'randomId',
payload: {
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
},
},
{
type: 'subscribe',
channel: 'orderbook',
requestId: 1,
channel: 'orders',
requestId: 'randomId',
payload: {
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
@@ -456,8 +457,8 @@ describe('Schema', () => {
},
{
type: 'subscribe',
channel: 'orderbook',
requestId: 1,
channel: 'orders',
requestId: 'randomId',
payload: {
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
@@ -467,126 +468,26 @@ describe('Schema', () => {
},
];
const shouldFail = true;
validateAgainstSchema(testCases, relayerApiOrderbookChannelSubscribeSchema, shouldFail);
validateAgainstSchema(testCases, relayerApiOrdersChannelSubscribeSchema, shouldFail);
});
});
describe('#relayerApiOrderbookChannelSnapshotSchema', () => {
it('should validate valid orderbook channel websocket snapshot message', () => {
const testCases = [
{
type: 'snapshot',
channel: 'orderbook',
requestId: 2,
payload: {
bids: [],
asks: [],
},
},
{
type: 'snapshot',
channel: 'orderbook',
requestId: 2,
payload: {
bids: [signedOrder],
asks: [signedOrder],
},
},
];
validateAgainstSchema(testCases, relayerApiOrderbookChannelSnapshotSchema);
});
it('should fail for invalid orderbook channel websocket snapshot message', () => {
const testCases = [
{
type: 'foo',
channel: 'orderbook',
requestId: 2,
payload: {
bids: [signedOrder],
asks: [signedOrder],
},
},
{
type: 'snapshot',
channel: 'bar',
requestId: 2,
payload: {
bids: [signedOrder],
asks: [signedOrder],
},
},
{
type: 'snapshot',
channel: 'orderbook',
payload: {
bids: [signedOrder],
asks: [signedOrder],
},
},
{
type: 'snapshot',
channel: 'orderbook',
requestId: '2',
payload: {
bids: [signedOrder],
asks: [signedOrder],
},
},
{
type: 'snapshot',
channel: 'orderbook',
requestId: 2,
payload: {
bids: [signedOrder],
},
},
{
type: 'snapshot',
channel: 'orderbook',
requestId: 2,
payload: {
asks: [signedOrder],
},
},
{
type: 'snapshot',
channel: 'orderbook',
requestId: 2,
payload: {
bids: [signedOrder],
asks: [{}],
},
},
{
type: 'snapshot',
channel: 'orderbook',
requestId: 2,
payload: {
bids: [{}],
asks: [signedOrder],
},
},
];
const shouldFail = true;
validateAgainstSchema(testCases, relayerApiOrderbookChannelSnapshotSchema, shouldFail);
});
});
describe('#relayerApiOrderbookChannelUpdateSchema', () => {
it('should validate valid orderbook channel websocket update message', () => {
describe('#relayerApiOrdersChannelUpdateSchema', () => {
it('should validate valid orders channel websocket update message', () => {
const testCases = [
{
type: 'update',
channel: 'orderbook',
channel: 'orders',
requestId: 2,
payload: signedOrder,
},
];
validateAgainstSchema(testCases, relayerApiOrderbookChannelUpdateSchema);
validateAgainstSchema(testCases, relayerApiOrdersChannelUpdateSchema);
});
it('should fail for invalid orderbook channel websocket update message', () => {
it('should fail for invalid orders channel websocket update message', () => {
const testCases = [
{
type: 'foo',
channel: 'orderbook',
channel: 'orders',
requestId: 2,
payload: signedOrder,
},
@@ -598,13 +499,13 @@ describe('Schema', () => {
},
{
type: 'update',
channel: 'orderbook',
channel: 'orders',
requestId: 2,
payload: {},
},
];
const shouldFail = true;
validateAgainstSchema(testCases, relayerApiOrderbookChannelUpdateSchema, shouldFail);
validateAgainstSchema(testCases, relayerApiOrdersChannelUpdateSchema, shouldFail);
});
});
});
@@ -684,7 +585,7 @@ describe('Schema', () => {
validateAgainstSchema(testCases, relayerApiErrorResponseSchema, shouldFail);
});
});
describe('#relayerApiFeesPayloadSchema', () => {
describe('#relayerApiOrderConfigPayloadSchema', () => {
it('should validate valid fees payloads', () => {
const testCases = [
{
@@ -699,7 +600,7 @@ describe('Schema', () => {
salt: '67006738228878699843088602623665307406148487219438534730168799356281242528500',
},
];
validateAgainstSchema(testCases, relayerApiFeesPayloadSchema);
validateAgainstSchema(testCases, relayerApiOrderConfigPayloadSchema);
});
it('should fail for invalid fees payloads', () => {
const checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32';
@@ -725,10 +626,10 @@ describe('Schema', () => {
},
];
const shouldFail = true;
validateAgainstSchema(testCases, relayerApiFeesPayloadSchema, shouldFail);
validateAgainstSchema(testCases, relayerApiOrderConfigPayloadSchema, shouldFail);
});
});
describe('#relayerApiFeesResponseSchema', () => {
describe('#relayerApiOrderConfigResponseSchema', () => {
it('should validate valid fees responses', () => {
const testCases = [
{
@@ -737,7 +638,7 @@ describe('Schema', () => {
feeRecipient: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
},
];
validateAgainstSchema(testCases, relayerApiFeesResponseSchema);
validateAgainstSchema(testCases, relayerApiOrderConfigResponseSchema);
});
it('should fail for invalid fees responses', () => {
const checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32';
@@ -755,11 +656,11 @@ describe('Schema', () => {
},
];
const shouldFail = true;
validateAgainstSchema(testCases, relayerApiFeesResponseSchema, shouldFail);
validateAgainstSchema(testCases, relayerApiOrderConfigResponseSchema, shouldFail);
});
});
describe('#relayerApiTokenPairsResponseSchema', () => {
it('should validate valid tokenPairs response', () => {
describe('#relayerAssetDataPairsResponseSchema', () => {
it('should validate valid assetPairs response', () => {
const testCases = [
[],
[
@@ -789,9 +690,9 @@ describe('Schema', () => {
},
],
];
validateAgainstSchema(testCases, relayerApiTokenPairsResponseSchema);
validateAgainstSchema(testCases, relayerApiAssetDataPairsResponseSchema);
});
it('should fail for invalid tokenPairs responses', () => {
it('should fail for invalid assetPairs responses', () => {
const checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32';
const testCases = [
[
@@ -832,7 +733,7 @@ describe('Schema', () => {
],
];
const shouldFail = true;
validateAgainstSchema(testCases, relayerApiTokenPairsResponseSchema, shouldFail);
validateAgainstSchema(testCases, relayerApiAssetDataPairsResponseSchema, shouldFail);
});
});
describe('#jsNumberSchema', () => {

View File

@@ -4,15 +4,14 @@
"engines": {
"node": ">=6.12"
},
"description": "Standard Relayer API Swagger Spec",
"description": "Standard Relayer API Open API Spec",
"main": "lib/src/index.js",
"types": "lib/src/index.d.ts",
"scripts": {
"serve": "redoc-cli serve lib/api.json --watch",
"develop": "run-p build-json:watch serve",
"watch_without_deps": "run-p build-json:watch serve",
"lint": "tslint --project .",
"test": "yarn run_mocha",
"redoc-cli": "redoc-cli",
"rebuild_and_test": "run-s clean build test",
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
@@ -33,7 +32,9 @@
"url": "https://github.com/0xProject/0x-monorepo/issues"
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/sra-api/README.md",
"dependencies": {},
"dependencies": {
"@0xproject/json-schemas": "1.0.1-rc.3"
},
"devDependencies": {
"@0xproject/tslint-config": "^1.0.4",
"@loopback/openapi-v3-types": "^0.8.2",

View File

@@ -1,3 +1,4 @@
import { schemas } from '@0xproject/json-schemas';
import { OpenApiSpec } from '@loopback/openapi-v3-types';
export const api: OpenApiSpec = {
@@ -14,6 +15,55 @@ export const api: OpenApiSpec = {
// TODO: Use relayer registry information here?
],
paths: {
'/orders': {
get: {
summary: 'List all pets',
operationId: 'listPets2',
tags: ['pets'],
parameters: [
{
name: 'limit',
in: 'query',
description: 'How many items to return at one time (max 100)',
required: false,
schema: {
type: 'integer',
format: 'int32',
},
},
],
responses: {
'200': {
description: 'An paged array of pets',
headers: {
'x-next': {
description: 'A link to the next page of responses',
schema: {
type: 'string',
},
},
},
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/Pets',
},
},
},
},
default: {
description: 'unexpected error',
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/Error',
},
},
},
},
},
},
},
'/pets': {
get: {
summary: 'List all pets',
@@ -141,6 +191,7 @@ export const api: OpenApiSpec = {
},
},
},
// Orderbook: schemas.relayerApiOrderBookResponseSchema,
Pets: {
type: 'array',
items: {

View File

@@ -606,7 +606,7 @@
"@0xproject/json-schemas@^0.8.1", "@0xproject/json-schemas@^0.8.3":
version "0.8.3"
resolved "https://registry.yarnpkg.com/@0xproject/json-schemas/-/json-schemas-0.8.3.tgz#455e6219a6bd05e990392165192a983a9ab89f26"
resolved "https://registry.npmjs.org/@0xproject/json-schemas/-/json-schemas-0.8.3.tgz#455e6219a6bd05e990392165192a983a9ab89f26"
dependencies:
"@0xproject/typescript-typings" "^0.4.3"
"@types/node" "9.6.0"
@@ -5216,9 +5216,9 @@ ethereumjs-wallet@~0.6.0:
utf8 "^2.1.1"
uuid "^2.0.1"
ethers@0xproject/ethers.js#eip-838-reasons, ethers@3.0.22:
version "3.0.18"
resolved "https://codeload.github.com/0xproject/ethers.js/tar.gz/b91342bd200d142af0165d6befddf783c8ae8447"
ethers@3.0.22:
version "3.0.22"
resolved "https://registry.npmjs.org/ethers/-/ethers-3.0.22.tgz#7fab1ea16521705837aa43c15831877b2716b436"
dependencies:
aes-js "3.0.0"
bn.js "^4.4.0"