From 9aacceb0e4549a7a72cae7cbf74ea819db184d80 Mon Sep 17 00:00:00 2001 From: fragosti Date: Wed, 8 Aug 2018 14:00:50 -0700 Subject: Remove tests directory, use swagger api, make json api compliant --- packages/sra-api/package.json | 5 ++- packages/sra-api/src/api.ts | 6 ++-- packages/sra-api/src/json-schemas.ts | 63 ++++++++++++++++++++++++++++++++++++ packages/sra-api/src/parameters.ts | 1 - packages/sra-api/test/api_test.ts | 15 --------- packages/sra-api/tsconfig.json | 2 +- 6 files changed, 68 insertions(+), 24 deletions(-) create mode 100644 packages/sra-api/src/json-schemas.ts delete mode 100644 packages/sra-api/test/api_test.ts (limited to 'packages/sra-api') diff --git a/packages/sra-api/package.json b/packages/sra-api/package.json index 4e0fb1637..a9bc934fe 100644 --- a/packages/sra-api/package.json +++ b/packages/sra-api/package.json @@ -11,12 +11,11 @@ "serve": "redoc-cli serve lib/api.json --watch", "watch_without_deps": "run-p build-json:watch serve", "lint": "tslint --project .", - "test": "yarn run_mocha", + "test": "swagger-cli validate lib/api.json", "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", "test:circleci": "yarn test:coverage", - "run_mocha": "mocha lib/test/**/*_test.js --exit", "clean": "shx rm -rf lib", "build": "tsc && yarn build-json", "build-site": "yarn build && redoc-cli bundle lib/api.json --output public/index.html", @@ -49,9 +48,9 @@ "mocha": "^4.0.1", "npm-run-all": "^4.1.3", "nyc": "^11.0.1", - "openapi-schema-validation": "^0.4.1", "redoc-cli": "^0.6.1", "shx": "^0.2.2", + "swagger-cli": "^2.1.1", "ts-node": "^7.0.0", "tslint": "5.11.0", "typescript": "2.7.1" diff --git a/packages/sra-api/src/api.ts b/packages/sra-api/src/api.ts index 5973e11cd..e578ddc74 100644 --- a/packages/sra-api/src/api.ts +++ b/packages/sra-api/src/api.ts @@ -1,12 +1,10 @@ -import { schemas } from '@0xproject/json-schemas'; import { OpenApiSpec } from '@loopback/openapi-v3-types'; import { examples } from './examples'; +import { schemas } from './json-schemas'; import { md } from './md'; import { generateParameters } from './parameters'; import { generateResponses } from './responses'; -// We need to replace the `$ref`s to be OpenAPI compliant. -const openApiSchemas = JSON.parse(JSON.stringify(schemas).replace(/(\/\w+)/g, match => `#/components/schemas${match}`)); export const api: OpenApiSpec = { openapi: '3.0.0', @@ -298,6 +296,6 @@ export const api: OpenApiSpec = { }, }, components: { - schemas: openApiSchemas, + schemas, }, }; diff --git a/packages/sra-api/src/json-schemas.ts b/packages/sra-api/src/json-schemas.ts new file mode 100644 index 000000000..5b222a43f --- /dev/null +++ b/packages/sra-api/src/json-schemas.ts @@ -0,0 +1,63 @@ +import { schemas as jsonSchemas } from '@0xproject/json-schemas'; + +// Only include schemas we actually need +const { + numberSchema, + addressSchema, + hexSchema, + orderHashSchema, + orderSchema, + signedOrderSchema, + signedOrdersSchema, + ordersSchema, + paginatedCollectionSchema, + relayerApiErrorResponseSchema, + relayerApiFeeRecipientsResponseSchema, + relayerApiOrderSchema, + relayerApiOrdersSchema, + relayerApiOrderConfigPayloadSchema, + relayerApiOrderConfigResponseSchema, + relayerApiOrderBookResponseSchema, + relayerApiAssetDataPairsResponseSchema, + relayerApiAssetDataTradeInfoSchema, + relayerApiOrdersChannelSubscribeSchema, + relayerApiOrdersChannelSubscribePayload, + relayerApiOrdersChannelUpdateSchema, + relayerApiOrdersResponseSchema, + relayerApiAssetDataPairsSchema, +} = jsonSchemas; + +const usedSchemas = { + numberSchema, + addressSchema, + hexSchema, + orderHashSchema, + orderSchema, + signedOrderSchema, + signedOrdersSchema, + ordersSchema, + paginatedCollectionSchema, + relayerApiErrorResponseSchema, + relayerApiFeeRecipientsResponseSchema, + relayerApiOrderSchema, + relayerApiOrdersSchema, + relayerApiOrderConfigPayloadSchema, + relayerApiOrderConfigResponseSchema, + relayerApiOrderBookResponseSchema, + relayerApiAssetDataPairsResponseSchema, + relayerApiAssetDataTradeInfoSchema, + relayerApiOrdersChannelSubscribeSchema, + relayerApiOrdersChannelSubscribePayload, + relayerApiOrdersChannelUpdateSchema, + relayerApiOrdersResponseSchema, + relayerApiAssetDataPairsSchema, +}; + +// We need to replace the `$ref`s to be OpenAPI compliant. +const openApiSchemas = JSON.parse( + JSON.stringify(usedSchemas).replace(/(\/\w+)/g, match => `#/components/schemas${match}`), +); +// The json schema used by OpenAPI does not accept ids +Object.keys(openApiSchemas).forEach(key => delete openApiSchemas[key].id); + +export const schemas = openApiSchemas; diff --git a/packages/sra-api/src/parameters.ts b/packages/sra-api/src/parameters.ts index bfa261df0..7b54fe9a0 100644 --- a/packages/sra-api/src/parameters.ts +++ b/packages/sra-api/src/parameters.ts @@ -25,7 +25,6 @@ export const networkdIdParameter: ParameterObject = { in: 'query', description: 'The id of the Ethereum network', example: 42, - default: 1, schema: { type: 'number', }, diff --git a/packages/sra-api/test/api_test.ts b/packages/sra-api/test/api_test.ts deleted file mode 100644 index 47353ca80..000000000 --- a/packages/sra-api/test/api_test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as chai from 'chai'; -import * as dirtyChai from 'dirty-chai'; -import { validate } from 'openapi-schema-validation'; - -import { api } from '../src/index'; - -chai.config.includeStack = true; -chai.use(dirtyChai); - -describe('SRA OpenAPI Schema', () => { - it('should be a valid OpenAPI schema', () => { - const result = validate(api, 3); - chai.expect(result.errors).to.have.length(0); - }); -}); diff --git a/packages/sra-api/tsconfig.json b/packages/sra-api/tsconfig.json index c56d255d5..e60028885 100644 --- a/packages/sra-api/tsconfig.json +++ b/packages/sra-api/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "lib" }, - "include": ["./src/**/*"] + "include": ["./src/**/*", "./test/*"] } -- cgit v1.2.3