From 78736152948e5525652c70feea61f546a87f3fbb Mon Sep 17 00:00:00 2001 From: Pradeep Kumar Tippa Date: Wed, 18 Nov 2015 11:51:27 +0530 Subject: [PATCH 1/3] Updated index.js to return updated swaggerObject The commit is fix for issue https://github.com/strongloop/loopback-component-explorer/issues/140 --- index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 177f89c..3c3ece3 100644 --- a/index.js +++ b/index.js @@ -10,6 +10,7 @@ var cors = require('cors'); var createSwaggerObject = require('loopback-swagger').generateSwaggerSpec; var SWAGGER_UI_ROOT = require('strong-swagger-ui/index').dist; var STATIC_ROOT = path.join(__dirname, 'public'); +var swaggerObject; module.exports = explorer; explorer.routes = routes; @@ -93,7 +94,7 @@ function routes(loopbackApplication, options) { * @param {Object} opts Options. */ function mountSwagger(loopbackApplication, swaggerApp, opts) { - var swaggerObject = createSwaggerObject(loopbackApplication, opts); + swaggerObject = createSwaggerObject(loopbackApplication, opts); var resourcePath = opts && opts.resourcePath || 'swagger.json'; if (resourcePath[0] !== '/') resourcePath = '/' + resourcePath; From 948274ead734de82a3a8531e8bf628e8db96f079 Mon Sep 17 00:00:00 2001 From: Pradeep Kumar Tippa Date: Mon, 7 Dec 2015 14:38:45 +0530 Subject: [PATCH 2/3] Added test cases for new model existence in swaggerObject --- test/explorer.test.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/test/explorer.test.js b/test/explorer.test.js index 6751d0a..f3351d7 100644 --- a/test/explorer.test.js +++ b/test/explorer.test.js @@ -220,6 +220,33 @@ describe('explorer', function() { }); }); + describe('when creating/adding new models', function() { + var app = loopback(); + it('should allow setting up swagger explorer', function(done) { + configureRestApiAndExplorer(app, '/explorer'); + + request(app) + .get('/explorer/swagger.json') + .expect(200) + .end(done); + }); + + it('should show newly created model', function(done) { + var modelName = 'Customer'; + createNewModel(app, '/explorer',modelName); + + request(app) + .get('/explorer/swagger.json') + .expect(200) + .end(function(err, res) { + if (err) return done(err); + var paths = Object.keys(res.body.paths); + expect(paths.indexOf('/'+modelName+'s')).to.not.equal(-1); + done(); + }); + }); + }); + function givenLoopBackAppWithExplorer(explorerBase) { return function(done) { var app = this.app = loopback(); @@ -237,4 +264,14 @@ describe('explorer', function() { app.set('legacyExplorer', false); app.use(app.get('restApiRoot') || '/', loopback.rest()); } + + function createNewModel(app, explorerBase,modelName) { + var Model = loopback.PersistedModel.extend(modelName); + Model.attachTo(loopback.memory()); + app.model(Model); + + explorer(app, { mountPath: explorerBase }); + app.set('legacyExplorer', false); + app.use(app.get('restApiRoot') || '/', loopback.rest()); + } }); From cbb32f280e1155ee8fec793cb9677673d7781dc2 Mon Sep 17 00:00:00 2001 From: Pradeep Kumar Tippa Date: Thu, 10 Dec 2015 19:58:04 +0530 Subject: [PATCH 3/3] Updated the code to loopback app to listen to 'modelRemoted' - explorer.test.js and index.js got modified as per the comments given by @bajtos --- index.js | 9 +++++++-- test/explorer.test.js | 14 +++----------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/index.js b/index.js index 3c3ece3..2716802 100644 --- a/index.js +++ b/index.js @@ -10,7 +10,6 @@ var cors = require('cors'); var createSwaggerObject = require('loopback-swagger').generateSwaggerSpec; var SWAGGER_UI_ROOT = require('strong-swagger-ui/index').dist; var STATIC_ROOT = path.join(__dirname, 'public'); -var swaggerObject; module.exports = explorer; explorer.routes = routes; @@ -94,8 +93,14 @@ function routes(loopbackApplication, options) { * @param {Object} opts Options. */ function mountSwagger(loopbackApplication, swaggerApp, opts) { - swaggerObject = createSwaggerObject(loopbackApplication, opts); + var swaggerObject = createSwaggerObject(loopbackApplication, opts); + //listening to modelRemoted event for updating the swaggerObject + // with the newly created model to appear in the Swagger UI. + loopbackApplication.on('modelRemoted', function() { + swaggerObject = createSwaggerObject(loopbackApplication, opts); + }); + var resourcePath = opts && opts.resourcePath || 'swagger.json'; if (resourcePath[0] !== '/') resourcePath = '/' + resourcePath; diff --git a/test/explorer.test.js b/test/explorer.test.js index f3351d7..ac7c4d7 100644 --- a/test/explorer.test.js +++ b/test/explorer.test.js @@ -233,7 +233,9 @@ describe('explorer', function() { it('should show newly created model', function(done) { var modelName = 'Customer'; - createNewModel(app, '/explorer',modelName); + var Model = loopback.PersistedModel.extend(modelName); + Model.attachTo(loopback.memory()); + app.model(Model); request(app) .get('/explorer/swagger.json') @@ -264,14 +266,4 @@ describe('explorer', function() { app.set('legacyExplorer', false); app.use(app.get('restApiRoot') || '/', loopback.rest()); } - - function createNewModel(app, explorerBase,modelName) { - var Model = loopback.PersistedModel.extend(modelName); - Model.attachTo(loopback.memory()); - app.model(Model); - - explorer(app, { mountPath: explorerBase }); - app.set('legacyExplorer', false); - app.use(app.get('restApiRoot') || '/', loopback.rest()); - } });