This repository has been archived on 2022-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
DevOpsOpenHack/apis/userprofile/tests/user/{userID}.js_

218 lines
9.5 KiB
Plaintext
Raw Permalink Normal View History

2022-11-03 20:41:13 +00:00
'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();
});
});
});
});
});