alphascript-server
Version:
CRUD operations for mongo and other functionalities to get started quickly in any CMS project
89 lines (73 loc) • 3.66 kB
JavaScript
var api = require('../../');
var Q = require('q');
var chai = require('chai');
var assert = chai.assert;
var expect = chai.expect;
var should = chai.should();
var chaiHttp = require('chai-http');
chai.use(chaiHttp);
module.exports = function (app, callback) {
var agent = chai.request.agent(app);
agent.post('/api/session/login').send({
username: 'admin',
password: '827ccb0eea8a706c4c34a16891f84e7b'
}).then(function (req, res) {
var promises = [];
for (var entity in api.entityMap) {
if (entity !== "simptom") continue;
promises.push(test(agent, entity));
}
Q.all(promises).then(function () {
callback();
}, function (err) {
callback(err);
});
});
};
function test(agent, key) {
var deferred = Q.defer();
var entity = api.entityMap[key];
entity.db = entity.db || "common";
agent.get('/api/' + key + '/list/' + entity.db).then(function (res) {
if (res.statusCode !== 200) return deferred.reject(key + ".list: returned error http code");
console.log(key + ".list: OK");
var beforeAddItems = res.body;
if (!(beforeAddItems instanceof Array)) return deferred.reject(key + ".list: does not return array");
if (!entity.dummy) return deferred.reject(key + ": no dummy data defined");
if (!entity.dummy.good) return deferred.reject(key + ": no good dummy data defined");
agent.post('/api/' + key + '/add/' + entity.db).send(entity.dummy.good).then(function (res) {
if (res.statusCode !== 200) return deferred.reject(key + ".new: returned error http code");
console.log(key + ".new: OK");
var newItem = res.body;
agent.get('/api/' + key + '/list/' + entity.db).then(function (res) {
if (res.statusCode !== 200) return deferred.reject(key + ".list: returned error http code");
var afterAddItems = res.body;
if (!(afterAddItems instanceof Array)) return deferred.reject(key + ".list: does not return array");
if (afterAddItems.length !== beforeAddItems.length + 1) return deferred.reject(key + ".new: did not add record to DB");
if (!(entity.dummy.bad instanceof Array)) return deferred.reject(key + ": no bad dummy data defined");
var promises = entity.dummy.bad.map(function (dummy) {
return agent.post('/api/' + key + '/add/' + entity.db + "/" + newItem._id).send(dummy);
});
Q.allSettled(promises).then(function (outputs) {
outputs.forEach(function (output, i) {
if (output.state === "rejected") console.log(key + ".edit (bad dummy " + i + "): " + output.reason.response.error.text);
else console.log(key + ".edit (bad dummy " + i + "): should not have passed");
});
deferred.resolve();
});
}).catch(function (output) {
deferred.reject(key + ".list: " + output.response.error.text);
});
}).catch(function (output) {
deferred.reject(key + ".new (good dummy): " + output.response.error.text);
});
}).catch(function (output) {
deferred.reject(key + ".list: " + output.response.error.text);
});
return deferred.promise;
}
//router.post('/api/' + entityKey + '/add/:db/:id?', this.entity.redirectToDriver(entityKey, "edit"));
//router.get('/api/' + entityKey + '/fetch/:db', this.entity.redirectToDriver(entityKey, "fetch"));
//router.post('/api/' + entityKey + '/update/:db/:id', this.entity.redirectToDriver(entityKey, "update"));
//router.get('/api/' + entityKey + '/remove/:db/:id', this.entity.redirectToDriver(entityKey, "remove"));
//router.get('/api/' + entityKey + '/versions/:db/:id', this.entity.redirectToDriver(entityKey, "versions"));