UNPKG

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
"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;