mongoose-restapi-ui
Version:
Rest api library for your mongoose apps, with react ui: mongoose-restapi-ui-component react library
1,026 lines (1,022 loc) • 124 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
t[p[i]] = s[p[i]];
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var mocha_typescript_1 = require("mocha-typescript");
var mock = require('mock-require');
var express = require("express");
var express_1 = require("express");
var RestApiPath_1 = require("../src/models/RestApiPath");
var mongoose_1 = require("mongoose");
var permissionSchema_1 = require("../src/models/permissionSchema");
var roleSchema_1 = require("../src/models/roleSchema");
var bodyParser = require("body-parser");
var mongoose = require("mongoose");
var chai = require('chai');
var chaiHttp = require('chai-http');
chai.use(chaiHttp);
chai.should();
var RestApiPathTest = /** @class */ (function () {
function RestApiPathTest() {
}
RestApiPathTest_1 = RestApiPathTest;
RestApiPathTest.before = function (done) {
global.Promise = require("q").Promise;
//use q library for mongoose promise
mongoose.Promise = global.Promise;
var MONGODB_CONNECTION = "mongodb://localhost:27017/test_mongoose_api_ui_restapipath";
RestApiPathTest_1.connection = mongoose.createConnection(MONGODB_CONNECTION);
RestApiPathTest_1.permission = RestApiPathTest_1.connection.model('perm', permissionSchema_1.default);
RestApiPathTest_1.role = RestApiPathTest_1.connection.model('rol', roleSchema_1.default);
RestApiPathTest_1.model = RestApiPathTest_1.connection.model('test1', new mongoose.Schema({
string: String,
number: Number,
date: Date,
array: [{ number: Number }]
}));
var model = RestApiPathTest_1.model;
var item = new model({ string: 'string', number: 1, date: new Date(), array: [{ number: 1 }] });
RestApiPathTest_1.id = item._id;
item.save(function (err) {
if (err)
return done(err);
done();
});
};
RestApiPathTest.after = function (done) {
RestApiPathTest_1.connection.dropDatabase(function (err) {
RestApiPathTest_1.connection.close(function (error) {
if (err)
return done(err);
if (error)
return done(error);
done(error);
});
});
};
RestApiPathTest.prototype["constructor populates objects to getters"] = function () {
var router = express_1.Router();
var objectTest = new RestApiPath_1.default(router, RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest.router.should.equal(router);
objectTest.route.should.equal(RestApiPathTest_1.route);
objectTest.model.should.equal(RestApiPathTest_1.model);
objectTest.options.name.should.equal('name');
objectTest.paths.length.should.equal(6);
objectTest.paths[0].name.should.equal('string');
objectTest.paths[1].name.should.equal('number');
objectTest.paths[2].name.should.equal('date');
objectTest.paths[3].name.should.equal('array');
objectTest.paths[4].name.should.equal('_id');
objectTest.paths[5].name.should.equal('__v');
objectTest.numberFullPaths.length.should.equal(3);
objectTest.numberFullPaths[0].should.equal('number');
objectTest.numberFullPaths[1].should.equal('array.number');
objectTest.stringFullPaths.length.should.equal(1);
objectTest.stringFullPaths[0].should.equal('string');
objectTest.dateFullPaths.length.should.equal(1);
objectTest.dateFullPaths[0].should.equal('date');
objectTest.arrayFullPaths.length.should.equal(0);
objectTest.objectIdFullPaths.should.exist;
objectTest.booleanFullPaths.should.exist;
objectTest.fullPathTypes.should.exist;
objectTest.setEndPoints([], null, null);
};
RestApiPathTest.prototype["constructor with strings has no mapped attributes"] = function () {
var router = express_1.Router();
var model = RestApiPathTest_1.connection.model('testsimple', new mongoose.Schema({
_id: String,
string: String
}, { versionKey: false }));
var objectTest = new RestApiPath_1.default(router, RestApiPathTest_1.route, model, {});
objectTest.router.should.equal(router);
objectTest.route.should.equal(RestApiPathTest_1.route);
objectTest.options.name.should.equal('name');
objectTest.paths.length.should.equal(2);
objectTest.paths[0].name.should.equal('_id');
objectTest.numberFullPaths.length.should.equal(0);
objectTest.stringFullPaths.length.should.equal(2);
objectTest.stringFullPaths[0].should.equal('_id');
objectTest.stringFullPaths[1].should.equal('string');
objectTest.dateFullPaths.length.should.equal(0);
objectTest.arrayFullPaths.length.should.equal(0);
objectTest.objectIdFullPaths.should.exist;
objectTest.booleanFullPaths.should.exist;
objectTest.fullPathTypes.should.exist;
objectTest.setEndPoints([], null, null);
};
RestApiPathTest.prototype["generates correct label from array"] = function () {
var router = express_1.Router();
var model = RestApiPathTest_1.connection.model('testarraysimple', new mongoose.Schema({
array: [{ number: { type: Number, label: true } }]
}, { versionKey: false }));
var objectTest = new RestApiPath_1.default(router, RestApiPathTest_1.route, model, {});
var path = objectTest.paths[0];
path.type.should.be.equal('Array');
if (path.type === 'Array' && path.complex) {
path.label.should.be.equal('number');
path.complex.should.be.true;
path.children.length.should.be.equal(2);
path.children[0].name.should.be.equal('number');
path.children[0].type.should.be.equal('Number');
path.children[1].name.should.be.equal('_id');
}
else {
path.should.equal('array path must be complex');
}
};
RestApiPathTest.prototype["array labels works"] = function () {
var router = express_1.Router();
var model = mongoose.model('some', new mongoose.Schema({
array: [{ path1: { type: String, label: true }, path2: { type: String, label: true } }]
}));
var objectTest = new RestApiPath_1.default(router, RestApiPathTest_1.route, model, {});
var res = objectTest.paths.find(function (path) { return path.name === 'array'; });
res.label.should.exist;
res.label.should.equal('path1');
};
RestApiPathTest.prototype["object labels works"] = function () {
var router = express_1.Router();
var model = mongoose.model('some1', new mongoose.Schema({
obj: { path1: { type: String, label: true }, path2: { type: String, label: true } }
}));
var objectTest = new RestApiPath_1.default(router, RestApiPathTest_1.route, model, {});
var res = objectTest.paths.find(function (path) { return path.name === 'obj'; });
res.label.should.exist;
res.label.should.equal('path1');
};
RestApiPathTest.prototype["schema from schema works"] = function () {
var router = express_1.Router();
var model = mongoose.model('some2', new mongoose.Schema({
obj: new mongoose.Schema({ path1: { type: String }, path2: { type: String } })
}));
var objectTest = new RestApiPath_1.default(router, RestApiPathTest_1.route, model, {});
var res = objectTest.paths.find(function (path) { return path.name === 'obj'; });
res.should.exist;
};
RestApiPathTest.prototype["schema from schema label works"] = function () {
var router = express_1.Router();
var model = mongoose.model('some3', new mongoose.Schema({
obj: new mongoose.Schema({ path1: { type: String, label: true }, path2: { type: String, label: true } })
}));
var objectTest = new RestApiPath_1.default(router, RestApiPathTest_1.route, model, {});
var res = objectTest.paths.find(function (path) { return path.name === 'obj'; });
res.label.should.exist;
res.label.should.equal('path1');
};
RestApiPathTest.prototype["edit permission works propertly with his priority hierarchy"] = function () {
var router = express_1.Router();
var hasEditPermission = function (err, res, callback) {
callback('1');
};
var hasAddPermission = function (err, callback) {
callback('2');
};
var objectTest = new RestApiPath_1.default(router, RestApiPathTest_1.route, RestApiPathTest_1.model, { hasEditPermission: hasEditPermission, hasAddPermission: hasAddPermission });
objectTest.options.hasAddPermission(null, function (err, doc) {
err.should.equals('2', 'add should be equal to his function provided');
});
objectTest.options.hasUpdatePermission(null, null, function (err) {
err.should.equals('1', 'update should be equal to edit, no provided function');
});
objectTest.options.hasDeletePermission(null, null, function (err) {
err.should.equals('1', 'delete should be equal to edit, no provided function');
});
var objectTest2 = new RestApiPath_1.default(router, RestApiPathTest_1.route, RestApiPathTest_1.model, { hasEditPermission: hasEditPermission, hasDeletePermission: hasEditPermission, hasUpdatePermission: hasEditPermission });
if (objectTest2.options.hasAddPermission)
'this'.should.equals('be unreachable ');
objectTest2.options.hasUpdatePermission(null, null, function (err) {
err.should.equals('1', 'update should be equal to his function');
});
objectTest2.options.hasDeletePermission(null, null, function (err) {
err.should.equals('1', 'delete should be equal to his function');
});
};
RestApiPathTest.prototype["generates correct numberMapping"] = function () {
var newModel = mongoose.model('testTree3', new mongoose_1.Schema({
_arrayNumber: [{ type: Number }],
arrayNumber: [{ type: Number }],
}));
var objectTest = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, newModel, {});
};
RestApiPathTest.prototype["generates correct tree from model"] = function () {
var newModel = mongoose.model('testTree', new mongoose_1.Schema({
ref: { type: mongoose_1.Schema.Types.ObjectId, ref: 'totest' },
arrayNumber: [{ type: Number }],
arrayRef: [{ type: mongoose_1.Schema.Types.ObjectId, ref: 'totest2' }],
complex: {
number: Number,
string: String
}
}));
var objectTest = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, newModel, {});
objectTest.refFullPaths.length.should.equal(2);
};
RestApiPathTest.prototype["generates correct tree from model without Object.assign"] = function () {
var _assign = Object.assign;
Object.assign = null;
var RestApiPath = mock.reRequire('../src/models/RestApiPath').default;
var newModel = mongoose.model('testTree2', new mongoose_1.Schema({
ref: { type: mongoose_1.Schema.Types.ObjectId, ref: 'totest' },
arrayNumber: [{ type: Number }],
arrayRef: [{ type: mongoose_1.Schema.Types.ObjectId, ref: 'totest2' }],
complex: {
number: Number,
string: String
}
}));
var objectTest = new RestApiPath(express_1.Router(), RestApiPathTest_1.route, newModel, {});
objectTest.refFullPaths.length.should.equal(2);
Object.assign = _assign;
};
/*
@test "getItemWithPermissions handle correctly the errors"(done) {
let hasAdminPermission = (req, doc, callback) => {
callback('some error')
}
let objectTest = new RestApiPath(Router(), RestApiPathTest.route, RestApiPathTest.model, { hasAdminPermission })
const s: any = { user: { _id: RestApiPathTest.id }, doc: { _id: RestApiPathTest.id }, permission: 0 }
objectTest.getItemWithPermissions(s, RestApiPathTest.permission, (err) => {
err.should.be.equal('some error')
hasAdminPermission = (req, doc, callback) => {
callback(null, false)
}
let hasDeletePermission = (req, doc, callback) => {
callback('some error')
}
objectTest = new RestApiPath(Router(), RestApiPathTest.route, RestApiPathTest.model, { hasAdminPermission, hasDeletePermission })
objectTest.getItemWithPermissions(s, RestApiPathTest.permission, (err) => {
err.should.be.equal('some error')
let hasUpdatePermission = (req, doc, callback) => {
callback('some error')
}
hasDeletePermission = (req, doc, callback) => {
callback(null, false)
}
objectTest = new RestApiPath(Router(), RestApiPathTest.route, RestApiPathTest.model, { hasAdminPermission, hasDeletePermission, hasUpdatePermission })
objectTest.getItemWithPermissions(s, RestApiPathTest.permission, (err) => {
err.should.be.equal('some error')
hasUpdatePermission = (req, doc, callback) => {
callback(null, true)
}
objectTest = new RestApiPath(Router(), RestApiPathTest.route, RestApiPathTest.model, { hasAdminPermission, hasDeletePermission, hasUpdatePermission })
objectTest.getItemWithPermissions(s, RestApiPathTest.permission, (err, res) => {
if (err) return done(err)
if (!res) return done('object must exist')
hasUpdatePermission = (req, doc, callback) => {
callback(null, false)
}
objectTest = new RestApiPath(Router(), RestApiPathTest.route, RestApiPathTest.model, { hasAdminPermission, hasDeletePermission, hasUpdatePermission })
objectTest.getItemWithPermissions(s, RestApiPathTest.permission, (err, res) => {
if (err) return done(err)
if (res) return done('object must not exist')
objectTest = new RestApiPath(Router(), RestApiPathTest.route, RestApiPathTest.model, { hasAdminPermission, hasDeletePermission, hasUpdatePermission })
objectTest.getQuery = (req, perm, callback) => {
callback(new Error('some error'))
}
objectTest.getItemWithPermissions(s, RestApiPathTest.permission, (err) => {
err.message.should.be.equal('some error')
objectTest = new RestApiPath(Router(), RestApiPathTest.route, RestApiPathTest.model, { hasAdminPermission, hasDeletePermission, hasUpdatePermission })
objectTest.getQuery = (req, perm, callback) => {
callback(null, null)
}
objectTest.getItemWithPermissions(s, RestApiPathTest.permission, (err, res) => {
if (err) return done(err)
if (res) return done('object must be null')
done()
})
})
})
})
})
})
})
}
@test "getQuery handle correctly the errors"(done) {
let getQuery = (req, callback) => {
callback('some error')
}
const r = Router()
r.use((req: any, res, next) => {
req.user = {
_id: 'a',
roles: []
}
next()
})
let objectTest = new RestApiPath(r, RestApiPathTest.route, RestApiPathTest.model, { getQuery })
const s: any = { user: { _id: RestApiPathTest.id } }
objectTest.options.getQuery(s, (err) => {
err.should.be.equal('some error')
})
getQuery = (req, callback) => {
callback(null, null)
}
objectTest = new RestApiPath(Router(), RestApiPathTest.route, RestApiPathTest.model, { getQuery })
const perm = mongoose.model('p', permissionSchema)
perm.find = (object, proj, callback) => {
callback('some error')
}
objectTest.options.getQuery(s, (err) => {
err.should.be.equal('some error')
})
RestApiPathTest.permission.insertMany([{ user: RestApiPathTest.id, object: RestApiPathTest.id, table: RestApiPathTest.model.modelName }], (err) => {
if (err) return done(err)
objectTest = new RestApiPath(Router(), RestApiPathTest.route, RestApiPathTest.model, { getQuery })
objectTest.options.getQuery(s, (err, query) => {
if (err) return done(err)
JSON.stringify(query).should.be.equal(JSON.stringify({ _id: { $in: [RestApiPathTest.id] } }))
getQuery = (req, callback) => {
callback(null, 'some query')
}
objectTest = new RestApiPath(Router(), RestApiPathTest.route, RestApiPathTest.model, { getQuery })
objectTest.options.getQuery(s, (err, query) => {
if (err) return done(err)
JSON.stringify(query).should.be.equal(JSON.stringify({ $and: ['some query', { _id: { $in: [RestApiPathTest.id] } }] }))
done()
})
})
})
}*/
RestApiPathTest.prototype["get all objects"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get("" + RestApiPathTest_1.route)
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(200);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with permission but without user"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
var p = {};
objectTest1.setEndPoints([], p, p);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get("" + RestApiPathTest_1.route)
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(500);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with filter"] = function (done) {
var getFilterByPermissions = function (req, callback) {
callback(null, { string: 'string' });
};
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, { getFilterByPermissions: getFilterByPermissions });
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "?$page=1&$any=string&$sortBy=string&$sort=asc")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(200);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with filter from not schema"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "?query=algo")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(400);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with filterPermissionsError"] = function (done) {
var getFilterByPermissions = function (req, callback) {
callback('some error');
};
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, { getFilterByPermissions: getFilterByPermissions });
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get("" + RestApiPathTest_1.route)
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(500);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with sort"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "?$sortBy=hector")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(200);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with sort and direction"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "?$sortBy=hector&$sort=asc")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(200);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with sort and multiple directions"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "?$sortBy=hector&$sort=asc&$sort=desc")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(200);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with multiple sort"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "?$sortBy=hector&$sortBy=jose&$sortBy=jose")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(200);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with multiple sort and single direction"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "?$sortBy=hector&$sortBy=jose&$sortBy=jose&$sort=asc")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(200);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with multiple sort and directions"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "?$sortBy=hector&$sortBy=jose&$sort=asc&$sort=desc")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(200);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with multiple sort and not all directions"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "?$sortBy=hector&$sortBy=jose&$sortBy=estela&$sort=asc&$sort=desc")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(200);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects with page and rowsperpage"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "?$page=1&$rowsPerPage=1")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(200);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects handle error"] = function (done) {
mock('../src/models/query', './query.error.mock');
var RestApiPath = mock.reRequire('../src/models/RestApiPath').default;
mock.stop('../src/models/query');
var r = express_1.Router();
r.use(function (req, res, next) {
req.user = {
_id: RestApiPathTest_1.id,
roles: []
};
next();
});
var objectTest1 = new RestApiPath(r, RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], RestApiPathTest_1.permission, RestApiPathTest_1.role);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get("" + RestApiPathTest_1.route)
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(500);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects handle error from count"] = function (done) {
mock('../src/models/query', './query_count.error.mock');
var RestApiPath = mock.reRequire('../src/models/RestApiPath').default;
mock.stop('../src/models/query');
var objectTest1 = new RestApiPath(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get("" + RestApiPathTest_1.route)
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(500);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects handle cursor count error"] = function (done) {
mock('../src/models/query', './query.error.cursor.count.mock');
var RestApiPath = mock.reRequire('../src/models/RestApiPath').default;
mock.stop('../src/models/query');
var objectTest1 = new RestApiPath(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([]);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get("" + RestApiPathTest_1.route)
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(500);
done();
});
});
});
};
RestApiPathTest.prototype["get all objects handle cursor find error"] = function (done) {
mock('../src/models/query', './query.error.cursor.find.mock');
var RestApiPath = mock.reRequire('../src/models/RestApiPath').default;
mock.stop('../src/models/query');
var objectTest1 = new RestApiPath(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([]);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get("" + RestApiPathTest_1.route)
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(500);
done();
});
});
});
};
RestApiPathTest.prototype["get an object by id"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "/2")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(404);
done();
});
});
});
};
RestApiPathTest.prototype["get an object by id with filter (not auth)"] = function (done) {
var getFilterByPermissions = function (req, callback) {
callback(null, { string: 'string2' });
};
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, { getFilterByPermissions: getFilterByPermissions });
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "/" + RestApiPathTest_1.id)
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(403);
done();
});
});
});
};
RestApiPathTest.prototype["get an object by id with filter (with auth)"] = function (done) {
var getFilterByPermissions = function (req, callback) {
callback(null, { string: 'string' });
};
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, { getFilterByPermissions: getFilterByPermissions });
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "/" + RestApiPathTest_1.id)
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(200);
done();
});
});
});
};
RestApiPathTest.prototype["get an object by id that not exist"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "/1")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(404);
done();
});
});
});
};
RestApiPathTest.prototype["get an object by id getItem handle error"] = function (done) {
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, {});
var originalGetItem = objectTest1.getItem;
objectTest1.getItem = function (conditions, callback) {
callback('no passed');
return null;
};
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "/1")
.send('')
.end(function (err, res) {
server.close(function (err) {
objectTest1.getItem = originalGetItem;
res.should.have.status(500);
done();
});
});
});
};
RestApiPathTest.prototype["get an object by id getItem handle error from getFilterByPermissions"] = function (done) {
var getFilterByPermissions = function (req, cb) { return cb('no passed'); };
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, { getFilterByPermissions: getFilterByPermissions });
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "/" + RestApiPathTest_1.id)
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(500);
done();
});
});
});
};
RestApiPathTest.prototype["get an object by id getItem handle error from find by name"] = function (done) {
var findOne = function (query, cb) {
cb('some error');
};
var findById = function (query, cb) {
cb('some error');
};
var model = {
findOne: findOne,
findById: findById,
schema: { paths: [] }
};
var objectTest1 = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, model, {});
objectTest1.setEndPoints([], null, null);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.get(RestApiPathTest_1.route + "/1")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(500);
done();
});
});
});
};
RestApiPathTest.prototype.hasAddPermission = function (done) {
var hasAddPermission = function (req, callback) {
callback(null, false);
};
var r = express_1.Router();
r.use(function (req, res, next) {
req.user = {
_id: 'a',
roles: []
};
next();
});
var objectTest1 = new RestApiPath_1.default(r, RestApiPathTest_1.route, RestApiPathTest_1.model, { hasAddPermission: hasAddPermission });
objectTest1.setEndPoints([], RestApiPathTest_1.permission, RestApiPathTest_1.role);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.post("" + RestApiPathTest_1.route)
.send('{}')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(403);
done();
});
});
});
};
RestApiPathTest.prototype["check hasAddPermission message works"] = function (done) {
var hasAddPermission = function (req, callback) {
callback(null, false, 'some error');
};
var r = express_1.Router();
r.use(function (req, res, next) {
req.user = {
_id: 'a',
roles: []
};
next();
});
var objectTest1 = new RestApiPath_1.default(r, RestApiPathTest_1.route, RestApiPathTest_1.model, { hasAddPermission: hasAddPermission });
objectTest1.setEndPoints([], RestApiPathTest_1.permission, RestApiPathTest_1.role);
var app1 = express();
app1.use('/', objectTest1.router);
var server = app1.listen(3001, function () {
chai.request(server)
.post("" + RestApiPathTest_1.route)
.send('{}')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(403);
//res.should.have.statusText('some error')
done();
});
});
});
};
RestApiPathTest.prototype["check hasAddPermission handle error"] = function (done) {
var hasAddPermission = function (req, callback) {
callback('some error');
};
var r = express_1.Router();
r.use(function (req, res, next) {
req.user = {
_id: 'a',
roles: []
};
next();
});
var objectTest = new RestApiPath_1.default(r, RestApiPathTest_1.route, RestApiPathTest_1.model, { hasAddPermission: hasAddPermission });
objectTest.setEndPoints([], RestApiPathTest_1.permission, RestApiPathTest_1.role);
var app = express();
app.use('/', objectTest.router);
RestApiPathTest_1.model.findById(RestApiPathTest_1.id, function (err, res) {
var server = app.listen(3003, function () {
chai.request(server)
.post("/test")
.send('{}')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(500);
done();
});
});
});
});
};
RestApiPathTest.prototype["check post save handle error"] = function (done) {
RestApiPathTest_1.model.findById(RestApiPathTest_1.id, function (err, object) {
if (err)
return done(err);
var _id = object._id, attrs = __rest(object, ["_id"]);
var hasAddPermission = function (req, callback) { return callback(null, true); };
var objectTest = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, { hasAddPermission: hasAddPermission });
var originalSave = objectTest.model.prototype.save;
objectTest.model.prototype.save = function (callback) { return callback('some error'); };
objectTest.setEndPoints([], null, null);
var app = express();
app.use('/', objectTest.router);
var server = app.listen(3003, function () {
chai.request(server)
.post("/test")
.send(JSON.stringify(attrs))
.end(function (err, res) {
server.close(function (err) {
objectTest.model.prototype.save = originalSave;
res.should.have.status(500);
done();
});
});
});
});
};
RestApiPathTest.prototype["check post without body"] = function (done) {
RestApiPathTest_1.model.findById(RestApiPathTest_1.id, function (err, object) {
if (err)
return done(err);
var hasAddPermission = function (req, callback) { return callback(null, true); };
var objectTest = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, { hasAddPermission: hasAddPermission });
objectTest.setEndPoints([], null, null);
var app = express();
app.use('/', objectTest.router);
var server = app.listen(3003, function () {
chai.request(server)
.post("/test")
.send('')
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(400);
done();
});
});
});
});
};
RestApiPathTest.prototype["check post save permission handle error"] = function (done) {
RestApiPathTest_1.model.findById(RestApiPathTest_1.id, function (err, object) {
if (err)
return done(err);
var _id = object._id, attrs = __rest(object, ["_id"]);
var hasAddPermission = function (req, callback) { return callback(null, true); };
var objectTest = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, { hasAddPermission: hasAddPermission });
var p = /** @class */ (function () {
function P() {
this.save = function (cb) { return cb(new Error('controlled error')); };
}
return P;
}());
objectTest.setEndPoints([], p, p);
var app = express();
app.use(function (req, res, next) {
req.user = { _id: 1 };
next();
});
app.use('/', objectTest.router);
var server = app.listen(3003, function () {
chai.request(server)
.post("/test")
.send(JSON.stringify(attrs))
.end(function (err, res) {
server.close(function (err) {
res.should.have.status(500);
done();
});
});
});
});
};
RestApiPathTest.prototype["check put without body"] = function (done) {
RestApiPathTest_1.model.findById(RestApiPathTest_1.id, function (err, object) {
if (err)
return done(err);
var hasAddPermission = function (req, callback) { return callback(null, true); };
var objectTest = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, { hasAddPermission: hasAddPermission });
var originalSave = objectTest.model.prototype.save;
objectTest.model.prototype.save = function (callback) { return callback('some error'); };
objectTest.setEndPoints([], null, null);
var app = express();
app.use('/', objectTest.router);
var server = app.listen(3003, function () {
chai.request(server)
.put("/test/" + RestApiPathTest_1.id)
.send('')
.end(function (err, res) {
server.close(function (err) {
objectTest.model.prototype.save = originalSave;
res.should.have.status(400);
done();
});
});
});
});
};
RestApiPathTest.prototype["check patch without body"] = function (done) {
RestApiPathTest_1.model.findById(RestApiPathTest_1.id, function (err, object) {
if (err)
return done(err);
var hasAddPermission = function (req, callback) { return callback(null, true); };
var objectTest = new RestApiPath_1.default(express_1.Router(), RestApiPathTest_1.route, RestApiPathTest_1.model, { hasAddPermission: hasAddPermission });
var originalSave = objectTest.model.prototype.save;
objectTest.model.prototype.save = function (callback) { return callback('some error'); };
objectTest.setEndPoints([], null, null);
var app = express();
app.use('/', objectTest.router);
var server = app.listen(3003, function () {
chai.request(server)
.patch("/test/" + RestApiPathTest_1.id)
.send('')
.end(function (err, res) {
server.close(function (err) {
objectTest.model.prototype.save = originalSave;