218 lines
9.5 KiB
Plaintext
218 lines
9.5 KiB
Plaintext
|
'use strict';
|
||
|
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('../../data/mockgen.js');
|
||
|
var Parser = require('swagger-parser');
|
||
|
/**
|
||
|
* Test for /user/{userID}
|
||
|
*/
|
||
|
Test('/user/{userID}', function (t) {
|
||
|
var apiPath = Path.resolve(__dirname, '../../config/swagger.json');
|
||
|
var App = Express();
|
||
|
App.use(BodyParser.json());
|
||
|
App.use(BodyParser.urlencoded({
|
||
|
extended: true
|
||
|
}));
|
||
|
App.use(Swaggerize({
|
||
|
api: apiPath,
|
||
|
handlers: Path.resolve(__dirname, '../../handlers')
|
||
|
}));
|
||
|
Parser.validate(apiPath, function (err, api) {
|
||
|
t.error(err, 'No parse error');
|
||
|
t.ok(api, 'Valid swagger api');
|
||
|
/**
|
||
|
* summary:
|
||
|
* description: Get a User Profile by ID
|
||
|
* parameters:
|
||
|
* produces:
|
||
|
* responses: 200, default
|
||
|
*/
|
||
|
t.test('test userGET get operation', function (t) {
|
||
|
Mockgen().requests({
|
||
|
path: '/user/{userID}',
|
||
|
operation: 'get'
|
||
|
}, 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)
|
||
|
.get('/api' + 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');
|
||
|
t.ok(res.statusCode === 200, 'Ok response status');
|
||
|
var Validator = require('is-my-json-valid');
|
||
|
var validate = Validator(api.paths['/user/{userID}']['get']['responses']['200']['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();
|
||
|
});
|
||
|
});
|
||
|
});/**
|
||
|
* summary:
|
||
|
* description: Declares and creates a new profile
|
||
|
* parameters: _profile
|
||
|
* produces:
|
||
|
* responses: 201, default
|
||
|
*/
|
||
|
t.test('test userPOST post operation', function (t) {
|
||
|
Mockgen().requests({
|
||
|
path: '/user/{userID}',
|
||
|
operation: 'post'
|
||
|
}, 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)
|
||
|
.post('/api' + 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');
|
||
|
t.ok(res.statusCode === 201, 'Ok response status');
|
||
|
var Validator = require('is-my-json-valid');
|
||
|
var validate = Validator(api.paths['/user/{userID}']['post']['responses']['201']['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();
|
||
|
});
|
||
|
});
|
||
|
});/**
|
||
|
* summary:
|
||
|
* description: Update User
|
||
|
* parameters:
|
||
|
* produces:
|
||
|
* responses: 200, 404, default
|
||
|
*/
|
||
|
t.test('test updateUser patch operation', function (t) {
|
||
|
Mockgen().requests({
|
||
|
path: '/user/{userID}',
|
||
|
operation: 'patch'
|
||
|
}, 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)
|
||
|
.patch('/api' + 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');
|
||
|
t.ok(res.statusCode === 200, 'Ok response status');
|
||
|
var Validator = require('is-my-json-valid');
|
||
|
var validate = Validator(api.paths['/user/{userID}']['patch']['responses']['200']['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();
|
||
|
});
|
||
|
});
|
||
|
});/**
|
||
|
* summary:
|
||
|
* description: Delete User By ID
|
||
|
* parameters:
|
||
|
* produces:
|
||
|
* responses: 204, 404, default
|
||
|
*/
|
||
|
t.test('test userDELETE delete operation', function (t) {
|
||
|
Mockgen().requests({
|
||
|
path: '/user/{userID}',
|
||
|
operation: 'delete'
|
||
|
}, 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)
|
||
|
.delete('/api' + 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');
|
||
|
t.ok(res.statusCode === 204, 'Ok response status');
|
||
|
t.end();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|