diff --git a/index.js b/index.js index 177f89c..2716802 100644 --- a/index.js +++ b/index.js @@ -95,6 +95,12 @@ function routes(loopbackApplication, options) { function mountSwagger(loopbackApplication, swaggerApp, 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 6751d0a..ac7c4d7 100644 --- a/test/explorer.test.js +++ b/test/explorer.test.js @@ -220,6 +220,35 @@ 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'; + var Model = loopback.PersistedModel.extend(modelName); + Model.attachTo(loopback.memory()); + app.model(Model); + + 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();