'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 */ Test('/user', 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: List all user profiles * parameters: * produces: * responses: 200, default */ t.test('test getAllUsers get operation', function (t) { Mockgen().requests({ path: '/user', 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']['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(); }); }); }); }); });