generator-swaggerize
Version:
Yeoman generator for openAPI(swagger) application
84 lines (83 loc) • 3.8 kB
JavaScript
var Test = require('tape');
var Express = require('express');
var BodyParser = require('body-parser');
var Swaggerize = require('swaggerize-express');
var Path = require('path');
var Request = require('supertest');
var Mockgen = require('<%=mockgenPath.replace(/\\/g,'/')%>');
var Parser = require('swagger-parser');
/**
* Test for <%=path%>
*/
Test('<%=path%>', function (t) {
var apiPath = Path.resolve(__dirname, '<%=apiPathRel.replace(/\\/g,'/')%>');
var App = Express();
App.use(BodyParser.json());
App.use(BodyParser.urlencoded({
extended: true
}));
App.use(Swaggerize({
api: apiPath,
handlers: Path.resolve(__dirname, '<%=handlerDir.replace(/\\/g,'/')%>')<%if (security) {%>,
security: Path.resolve(__dirname, '<%=securityPath.replace(/\\/g,'/')%>')<%}%>
}));
Parser.validate(apiPath, function (err, api) {
t.error(err, 'No parse error');
t.ok(api, 'Valid swagger api');
<%operations.forEach(function (operation, i) {
var mt = operation.method.toLowerCase();
%>/**
* summary: <%=operation.summary%>
* description: <%=operation.description%>
* parameters: <%=operation.parameters%>
* produces: <%=operation.produces%>
* responses: <%=operation.responses.join(', ')%>
*/
t.test('test <%=operation.name%> <%=operation.method%> operation', function (t) {
Mockgen().requests({
path: '<%=path%>',
operation: '<%=operation.method%>'
}, function (err, mock) {
var request;
t.error(err);
t.ok(mock);
t.ok(mock.request);
//Get the resolved path from mock request
//Mock request Path templates({}) are resolved using path parameters
request = Request(App)
.<%=mt%>('<%=basePath%>' + mock.request.path);
if (mock.request.body) {
//Send the request body
request = request.send(mock.request.body);
} else if (mock.request.formData){
//Send the request form data
request = request.send(mock.request.formData);
//Set the Content-Type as application/x-www-form-urlencoded
request = request.set('Content-Type', 'application/x-www-form-urlencoded');
}
// If headers are present, set the headers.
if (mock.request.headers && mock.request.headers.length > 0) {
Object.keys(mock.request.headers).forEach(function (headerName) {
request = request.set(headerName, mock.request.headers[headerName]);
});
}
request.end(function (err, res) {
t.error(err, 'No error');
<% if (operation.response) {
%>t.ok(res.statusCode === <%=(operation.response === 'default')?200:operation.response%>, 'Ok response status');<%}%>
<% if (operation.validateResp) {
%>var Validator = require('is-my-json-valid');
var validate = Validator(api.paths['<%=path%>']['<%=operation.method%>']['responses']['<%=operation.response%>']['schema']);
var response = res.body;
if (Object.keys(response).length <= 0) {
response = res.text;
}
t.ok(validate(response), 'Valid response');
t.error(validate.errors, 'No validation errors');
<%}%>t.end();
});
});
});<%})%>
});
});
;