x-mock
Version:
Mock response generator for OAS.
197 lines (177 loc) • 6.79 kB
JavaScript
const Assert = require('assert');
const Xmock = require('../lib');
const Path = require('path');
describe('Response Mock generator', () => {
let apiPath = Path.resolve(__dirname, 'fixture/petstore.json');
let mixins = [
{
'dogname': function () {
return 'Fido'
}
}
]
let xmock = Xmock(apiPath, { mixins });
it('should generate response mock for path /store/order/{orderId}', (done) => {
xmock.response({
path: '/store/order/{orderId}',
operation: 'get',
response: '200'
}, (err, mock) => {
Assert.ok(!err, 'No error');
Assert.ok(mock, 'Generated mock');
let resp = mock;
Assert.ok(resp, 'Generated response');
Assert.ok(Number.isInteger(resp.id), 'id is integer');
Assert.ok(Number.isInteger(resp.petId), 'petId is integer');
Assert.ok([1, 3, 5].indexOf(resp.quantity) != -1, 'quantity is integer enum');
Assert.ok(typeof resp.shipDate === 'string', 'shipDate is string');
Assert.ok(['placed', 'approved', 'delivered'].indexOf(resp.status) !== -1, 'status is enum');
Assert.ok(typeof resp.complete === 'boolean', 'complete is boolean');
done();
});
});
it('should generate response mock for path /pet/findByStatus', (done) => {
xmock.response({
path: '/pet/findByStatus',
operation: 'get',
response: '200'
}, (err, mock) => {
Assert.ok(!err, 'No error');
Assert.ok(mock, 'Generated mock');
let resp = mock;
Assert.ok(resp, 'Generated response');
Assert.ok(Array.isArray(resp), 'response is Pet array');
let pet = resp[0];
Assert.ok(pet, 'Ok Pet response');
Assert.ok(Number.isInteger(pet.id), 'id is integer');
//TODO add asserts for pending props
done();
});
});
it('should generate response mock for path /pet/{petId}', (done) => {
xmock.response({
path: '/pet/{petId}',
operation: 'get',
response: '200'
}, (err, mock) => {
Assert.ok(!err, 'No error');
Assert.ok(mock, 'Generated mock');
let resp = mock;
Assert.ok(resp, 'Generated response');
//TODO add asserts for pending props
done();
});
});
it('should generate response mock for path /pet/{petId}/uploadImage', (done) => {
xmock.response({
path: '/pet/{petId}/uploadImage',
operation: 'post',
response: '200'
}, (err, mock) => {
Assert.ok(!err, 'No error');
Assert.ok(mock, 'Generated mock');
let resp = mock;
Assert.ok(resp, 'Generated response');
//TODO add asserts for pending props
done();
});
});
it('should generate response mock for path /store/inventory', (done) => {
xmock.response({
path: '/store/inventory',
operation: 'get',
response: '200'
}, (err, mock) => {
Assert.ok(!err, 'No error');
Assert.ok(mock, 'Generated mock');
let resp = mock;
Assert.ok(resp, 'Generated response');
//TODO add asserts for pending props
done();
});
});
it('should generate response mock for path /store/order', (done) => {
xmock.response({
path: '/store/order',
operation: 'post',
response: '200'
}, (err, mock) => {
Assert.ok(!err, 'No error');
Assert.ok(mock, 'Generated mock');
let resp = mock;
Assert.ok(resp, 'Generated response');
//TODO add asserts for pending props
done();
});
});
it('should generate response mock for path /user/login', (done) => {
xmock.response({
path: '/user/login',
operation: 'get',
response: '200'
}, (err, mock) => {
Assert.ok(!err, 'No error');
Assert.ok(mock, 'Generated mock');
let resp = mock;
Assert.ok(resp, 'Generated response');
//TODO add asserts for pending props
done();
});
});
it('should generate missing operation error for /user/login PUT 200', (done) => {
xmock.response({
path: '/user/login',
operation: 'put',
response: '200'
}, (err, mock) => {
Assert.ok(err, 'Should get an error');
// Assert.ok(err.id, 'Error object should have an id')
Assert.ok(err.name, 'Error object should have a name')
Assert.ok(err.message, 'Error object should have a message')
Assert.ok(!mock, 'No mock should be generated');
done();
});
});
it('should generate missing response error for /user/login GET 700', (done) => {
xmock.response({
path: '/user/login',
operation: 'get',
response: '700'
}, (err, mock) => {
Assert.ok(err, 'Should get an error');
// Assert.ok(err.id, 'Error object should have an id')
Assert.ok(err.name, 'Error object should have a name')
Assert.ok(err.message, 'Error object should have a message')
Assert.ok(!mock, 'No mock should be generated');
done();
});
});
it('should generate missing path error for /no/path GET 200', (done) => {
xmock.response({
path: '/no/path',
operation: 'get',
response: '200'
}, (err, mock) => {
Assert.ok(err, 'Should get an error');
// Assert.ok(err.id, 'Error object should have an id')
Assert.ok(err.name, 'Error object should have a name')
Assert.ok(err.message, 'Error object should have a message')
Assert.ok(!mock, 'No mock should be generated');
done();
});
});
it('should generate missing schema error for /pet POST 405', (done) => {
xmock.response({
path: '/pet',
operation: 'post',
response: '405'
}, (err, mock) => {
Assert.ok(err, 'Should get an error');
// Assert.ok(err.id, 'Error object should have an id')
Assert.ok(err.name, 'Error object should have a name')
Assert.ok(err.message, 'Error object should have a message')
Assert.ok(!mock, 'No mock should be generated');
done();
});
});
});