William Cheng 2d7cc778db
Add a new NodeJS Express server generator (#3567)
* create nodejs express esrver

* 1st commit of the express.js module. Express server working, api-docs loads properly. No real paths yet

* 1st commit of the express.js module. Express server working, api-docs loads properly. No real paths yet (#2839)

* Working Express server with successful routing to controllers.

* rewrote controllers and services. Haven't tested yet

* controllers and services have passed tests successfully

* Added documentation

* Added documentation

* Support for openApi v3, using 'express-openapi-validator' for parsing and validation, and an internal router to pass arguments to controllers and services. /controllers/Pet.js and /services/PetService.js should be used for reverse engineering for future codegen script

* update generator and template

* update samples

* more update

* update service, controller

* add vendor extensions

* some updates to adapt to changes in the generator (removing references to swager); some work on handling file uploads; some work on tests

* Update NodeJS server generator and templates based on new output (#3261)

* update generator and template

* update samples

* more update

* update service, controller

* add vendor extensions

* update doc

* Changed routing code to follow the following convention:
Each path operation has a 'x-openapi-router-controller' and 'x-openapi-router-service'. Automated files will be placed under /controllers and /services respectively.
Controller file names will end with 'Controller.js'.
Removed swaggerRouter, replaced it with openapiRouter
Routing works and simple tests show a return of 200 to requests.

* [nodejs-express-server] various updates, fixes (#3319)

* various fix

* remove dot from service

* add space

* better method empty argument

* remove test service (#3379)

* add new doc

* 1. routingTests.js runs through all operations described in openapi.yaml and tries calling them, expecting 200 in return. Currently not all tests pass - not supporting xml, and problems with formData
2. Removed old testing files.
3. Added model files - contain data and structure as defined in openapi.yaml. Model.js has static methods relevant to all model files.
4. Changed openapi.yaml to allow running tests easily.

* 1. routingTests.js runs through all operations described in openapi.yaml and tries calling them, expecting 200 in return. Currently not all tests pass - not supporting xml, and problems with formData (#3442)

2. Removed old testing files.
3. Added model files - contain data and structure as defined in openapi.yaml. Model.js has static methods relevant to all model files.
4. Changed openapi.yaml to allow running tests easily.

* added model classes. Currently as a concept only. Seems like won't be in use

* Updated README.md to be a detailed description of the project.
Removed test files that are not needed.
Removed utils/writer.js which is not needed, and the references to it in the codegen files

* Removed redundant file app.js - this file has no benefit at this point. index.js now calls ExpressServer.js directly. Updated files that used to call app.js. Updated README.md accordingly
Added a path to call the openapi.yaml, and a test file for all endpoints that are not in the openapi.yaml, ensuring that they return 200. Updated README.md accordingly

* Remove test controller (#3575)

* remove test controller

* add back changes to templates

* remove app.js

* update wording
2019-08-09 00:30:47 +08:00

58 lines
1.8 KiB
JavaScript

const {
describe, before, after, it,
} = require('mocha');
const chai = require('chai');
const chaiAsPromised = require('chai-as-promised');
const { get } = require('axios');
const logger = require('./logger');
const config = require('./config');
const ExpressServer = require('../expressServer');
const app = new ExpressServer(config.URL_PORT, config.OPENAPI_YAML);
chai.use(chaiAsPromised);
chai.should();
describe('Server tests, checking launch, terminate, and various error messages', () => {
before(async () => {
try {
await app.launch();
logger.info('express server launched\n');
} catch (error) {
logger.info(error);
await app.close();
throw (error);
}
});
after(async () => {
await app.close()
.catch(error => logger.error(error));
logger.error('express server closed');
});
it('should launch express server successfully', async () => {
const indexResponse = await get(`${config.URL_PATH}:${config.URL_PORT}/`);
indexResponse.status.should.equal(200, 'Expecting a call to root directory of server to return 200 code');
});
it('should fail with a 404 on non-existing page', async () => {
get(`${config.FULL_PATH}/someRandomPage`)
.then(response => response.status.should.equal(404, 'expecting a 404 on a non-existing page request'))
.catch((responseError) => {
responseError.response.status.should.not.equal(undefined);
responseError.response.status.should.equal(404, 'expecting to receive a 404 on requesting a non-existing page');
});
});
it('should load api-doc', async () => {
try {
const response = await get(`http://localhost:${config.URL_PORT}/api-docs`);
response.status.should.equal(200, 'Expecting 200');
} catch (e) {
console.log(e.message);
throw e;
}
});
});