Skip to content

Commit

Permalink
Merge 6434ff0 into d2a1b10
Browse files Browse the repository at this point in the history
  • Loading branch information
kola-1 committed Aug 18, 2019
2 parents d2a1b10 + 6434ff0 commit 53aaf86
Show file tree
Hide file tree
Showing 6 changed files with 109 additions and 2 deletions.
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
"db:unmigrate": "./node_modules/.bin/sequelize db:migrate:undo:all",
"start": "set DEBUG=http:* && node ./dist/index.js",
"start:dev": "set DEBUG=http:* && nodemon src/index.js --exec babel-node",
"test": "set DEBUG=http:* && cross-env NODE_ENV=test nyc --reporter=html --reporter=text mocha --require @babel/register --timeout 120000 --require @babel/polyfill src/test --exit",
"test": "set DEBUG=http:* && cross-env NODE_ENV=test nyc --reporter=html --reporter=text mocha --require @babel/register --timeout 120000 --require @babel/polyfill src/test/** --exit",
"coverage": "nyc report --reporter=text-lcov | coveralls"
},
"repository": {
"type": "git",
"url": "git+https://github.com/andela/storm-backend.git"
},
"author": "",
"author": "Kola Akindoju <kolaakindoju@gmail.com>",
"license": "ISC",
"bugs": {
"url": "https://github.com/andela/storm-backend/issues"
Expand All @@ -39,6 +39,8 @@
"pg-hstore": "^2.3.3",
"sequelize": "^5.15.0",
"sequelize-cli": "^5.5.0",
"swagger-jsdoc": "^3.4.0",
"swagger-ui-express": "^4.0.7",
"trim-request-body": "^1.0.1"
},
"devDependencies": {
Expand Down
41 changes: 41 additions & 0 deletions src/config/swaggerDoc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import swaggerJsDoc from 'swagger-jsdoc';
import swaggerUi from 'swagger-ui-express';
import './env';

const swaggerDefinition = {
openapi: '3.0.1',
info: {
title: 'Barefoot Nomad API documentation',
version: '1.0.0',
description: 'Barefoot Nomad auto generated swagger documentation',
contact: {
email: 'kolaakindoju@gmail.com'
}
},
servers: [
{
url: process.env.DOC_BASE_URL || 'http://localhost:3000'
}
],
components: {
securitySchemes: {
bearerAuth: {
type: 'http',
scheme: 'bearer',
bearerFormat: 'JWT'
}
}
}
};

const options = {
swaggerDefinition,
apis: ['src/routes/*.js'],
};


const specs = swaggerJsDoc(options);

module.exports = (router) => {
router.get('/docs', swaggerUi.setup(specs));
};
12 changes: 12 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,26 @@ import express from 'express';
import trimmer from 'trim-request-body';
import cors from 'cors';
import debug from 'debug';
import swaggerUi from 'swagger-ui-express';
import messages from './utils/messages';
import response from './utils/response';
import './config/env';
import routes from './routes';
import swaggerDoc from './config/swaggerDoc';

// Instance of express app
const app = express();

const infoLog = debug('http:info');
const router = express.Router();

// Pass router to routes
routes(router);

// Pass router to swagger middleware
swaggerDoc(router);

app.use('/api/v1', router, swaggerUi.serve);

// Allow cross origin access
app.use(cors());
Expand Down
40 changes: 40 additions & 0 deletions src/routes/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import messages from '../utils/messages';
import response from '../utils/response';

const routes = (router) => {
router
.route('/')
/**
* @swagger
* /api/v1:
* get:
* tags:
* - name: Welcome Message Endpoint
* summary: Welcome message endpoint
* description: Endpoint returns welcome message
* responses:
* 200:
* description: Successful operation
* content:
* application/json:
* schema:
* $ref: '#/components/schemas/welcomeResponse'
* components:
* schemas:
* welcomeResponse:
* type: object
* properties:
* status:
* type: string
* data:
* type: object
* properties:
* message:
* type: string
*/
.get((req, res) => response(res, 200, 'success', {
message: messages.apiV1Welcome,
}));
};

export default routes;
11 changes: 11 additions & 0 deletions src/test/routes/index.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import {
app, messages, chai, expect
} from '../testHelpers/config';

describe('Index route', () => {
it('should return 200 if successful', async () => {
const response = await chai.request(app).get('/api/v1');
expect(response.status).to.equal(200);
expect(response.body.data.message).to.equal(messages.apiV1Welcome);
});
});
1 change: 1 addition & 0 deletions src/utils/messages.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const messages = {
welcome: 'Welcome to Barefoot Nomad',
apiV1Welcome: 'Welcome to Barefoot Nomad API (version 1)',
notFound: 'Sorry, we cannot find this endpoint',
};

Expand Down

0 comments on commit 53aaf86

Please sign in to comment.