.idea
client/bower_components
dist
+coverage
/server/config/local.env.js
-/server/components/worker/generator/input
/server/components/worker/generator/output
-/server/components/worker/generator/jar
+/server/components/worker/generator/input
+/server/components/worker/generator/jar/*
/server/components/worker/generator/validca
/server/components/worker/generator/resources/*.p12
attestGenerator/out
npm-debug.log
+make.sh
var utils = require('../../components/utils');
var path = require('path');
-var appDir = path.dirname(require.main.filename);
+var appDir = path.dirname(require.resolve('../../app'));
// Get list of reports
exports.index = function (req, res) {
--- /dev/null
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+var jwt = require('jsonwebtoken');
+var User = require('../user/user.model');
+var config = require('../../config/environment');
+
+var user = new User({
+ provider: 'local',
+ name: 'Fake User',
+ email: 'test@test.com',
+ password: 'password'
+});
+
+describe('GET /api/referentials', function () {
+
+ beforeEach(function (done) {
+ // Clear users before testing
+ User.remove().exec().then(function () {
+ user.save(function () {
+ done();
+ });
+ });
+ });
+
+ afterEach(function (done) {
+ User.remove().exec().then(function () {
+ done();
+ });
+ });
+
+ it('should return list of validca dirs', function (done) {
+ user.authenticate('password');
+ var token = jwt.sign({_id: user._id}, config.secrets.session, {expiresIn: 60 * 60 * 5});
+ request(app)
+ .get('/api/referentials?access_token=' + token)
+ .expect(200)
+ .expect('Content-Type', /json/)
+ .end(function (err, res) {
+ if (err) return done(err);
+ res.body.should.be.instanceof(Array);
+ done();
+ })
+ })
+});
\ No newline at end of file
--- /dev/null
+%PDF-1.1
+%¥±ë
+
+1 0 obj
+ << /Type /Catalog
+ /Pages 2 0 R
+ >>
+endobj
+
+2 0 obj
+ << /Type /Pages
+ /Kids [3 0 R]
+ /Count 1
+ /MediaBox [0 0 300 144]
+ >>
+endobj
+
+3 0 obj
+ << /Type /Page
+ /Parent 2 0 R
+ /Resources
+ << /Font
+ << /F1
+ << /Type /Font
+ /Subtype /Type1
+ /BaseFont /Times-Roman
+ >>
+ >>
+ >>
+ /Contents 4 0 R
+ >>
+endobj
+
+4 0 obj
+ << /Length 55 >>
+stream
+ BT
+ /F1 18 Tf
+ 0 0 Td
+ (Hello World) Tj
+ ET
+endstream
+endobj
+
+xref
+0 5
+0000000000 65535 f
+0000000018 00000 n
+0000000077 00000 n
+0000000178 00000 n
+0000000457 00000 n
+trailer
+ << /Root 1 0 R
+ /Size 5
+ >>
+startxref
+565
+%%EOF
var User = require('../user/user.model');
var worker = require('../../components/worker');
var utils = require('../../components/utils');
+var errors = require('../../components/errors');
var fs = require('fs');
var path = require('path');
var uuid = require('node-uuid');
var relaunchGenerations = function () {
Report.find({isGenerated: false}, function (err, reports) {
- if (err) {
- console.error(err);
- return;
- }
- reports.forEach(function (report) {
- console.info("Relaunch report id " + report.uuid + " generation");
- launchWorker(report);
- });
+ if (err) return console.error(err);
+ reports.forEach(launchWorker);
});
};
exports.index = function (req, res) {
Report.find(function (err, reports) {
if (err) {
- return handleError(res, err);
+ return errors(500)(res, req, err);
}
return res.status(200).json(reports);
});
var userId = req.user._id;
Report.findById(req.params.id, function (err, report) {
if (err) {
- return handleError(res, err);
+ return errors(500)(res, req, err);
}
if (!report) {
- return res.status(404).send('Not Found');
+ return errors('404')(req, res);
}
//Allow admin users to download all reports
if (report.user !== userId.toString() && req.user.role !== 'admin') {
User.findOne({
_id: userId
}, '-salt -hashedPassword', function (err, user) { // don't ever give out the password or salt
- if (err) return handleError(res, err);
+ if (err) return errors(500)(res, req, err);
if (!req.files) {
return res.status(400).send('File Missing');
Report.create(generated, function (err, report) {
if (err) {
- return handleError(res, err);
+ return errors(500)(res, req, err);
}
// Send generation worker
launchWorker(report);
exports.removeAll = function (req, res) {
Report.find({isGenerated: true}, function (err, reports) {
if (err) {
- return handleError(res, err);
+ return errors(500)(res, req, err);
}
reports.forEach(function (report) {
var uuid = report.uuid;
report.remove(function (err) {
if (err) {
- return handleError(res, err);
+ return errors(500)(res, req, err);
}
// Remove output file
try {
fs.unlinkSync(appDir + "/components/worker/generator/output/" + uuid + ".pdf");
} catch (e) {
- console.error(e);
+ // We don't find the file... continue
}
});
});
// Suppression de tous les rapports dans la base et dans le FS - Utilisé par le cron
exports.purge = function (cb) {
- Report.remove({}, function (err, reportsRemoved) {
+ Report.remove({}, function (err) {
if (err) {
console.error(err);
}
- if (!reportsRemoved) {
- return console.error('purgeAllReports : Reports Not Found');
- }
// Remove all output files
utils.file.deleteFolderRecursive(appDir + "/components/worker/generator/output/", false);
// AND input files
utils.file.deleteFolderRecursive(appDir + "/components/worker/generator/input/", false);
- console.info("Cron status : " + reportsRemoved);
if (typeof cb === 'function') {
cb();
}
});
};
-function handleError(res, err) {
- return res.status(500).send(err);
-}
-
//We relaunch generations
relaunchGenerations();
privUser.save(done);
};
+ var saveUser = function (done) {
+ privUser.save(done);
+ };
+
var makeGenerating = function (done) {
privReport.isGenerated = false;
privReport.save(done);
token: token,
create: createUser,
get: getUser,
- admin: makeUserAdmin
+ admin: makeUserAdmin,
+ save: saveUser
},
report: {
setUserId: setUserId,
.expect(400, done);
});
- it('should create report when file is sended', function (done) {
+ it('should send worker and update report when generation is done', function (done) {
request(app)
.post('/api/reports?access_token=' + localMock.user.token())
.attach('content', appDir + '/api/report/fixtures/minimal.pdf')
- .expect('Content-Type', /json/)
.expect(200)
.end(function (err, res) {
if (err) return done(err);
- res.body.id.should.be.instanceof(String);
- Report.find(function (err, reports) {
+ setTimeout(function () {
+ Report.findById(res.body.id, function (err, report) {
+ if (err) return done(err);
+ report.isGenerated.should.be.true();
+ done();
+ });
+ }, 1500);
+ });
+ });
+
+ it('should create report when file is sended', function (done) {
+ localMock.user.get().referential = {"RGS": "valid"};
+ localMock.user.get().reportCounter = 2;
+ localMock.user.save(function () {
+ request(app)
+ .post('/api/reports?access_token=' + localMock.user.token())
+ .attach('content', appDir + '/api/report/fixtures/minimal.pdf')
+ .expect('Content-Type', /json/)
+ .expect(200)
+ .end(function (err, res) {
if (err) return done(err);
- reports.length.should.be.exactly(2);
- done();
+ res.body.id.should.be.instanceof(String);
+ Report.find(function (err, reports) {
+ if (err) return done(err);
+ reports.length.should.be.exactly(2);
+ done();
+ });
});
- });
+ });
+
});
it('should create input directory for generator', function (done) {
});
it('should be allowed to administrators', function (done) {
+ localMock.user.admin(function () {
+ localMock.report.createEmptyPDF(function () {
+ request(app)
+ .delete('/api/reports?access_token=' + localMock.user.token())
+ .expect(204, done);
+ });
+ });
+ });
+
+ it('should catch error for non existing PDF files', function (done) {
localMock.user.admin(function () {
request(app)
.delete('/api/reports?access_token=' + localMock.user.token())
.expect(204, done);
-
});
});
});
\ No newline at end of file
router.delete('/:id', auth.hasRole('admin'), controller.destroy);
router.get('/me', auth.isAuthenticated(), controller.me);
router.put('/me', auth.isAuthenticated(), controller.updateMe);
-router.put('/:id/password', auth.isAuthenticated(), controller.changePassword);
-router.get('/:id', auth.isAuthenticated(), controller.show);
+router.put('/password', auth.isAuthenticated(), controller.changePassword);
+router.get('/:id', auth.hasRole('admin'), controller.show);
router.post('/:id', auth.hasRole('admin'), controller.update);
-router.post('/', controller.create);
+router.post('/', auth.hasRole('admin'), controller.create);
module.exports = router;
var user = new User(req.body);
var userData = user.toObject();
delete userData._id;
- User.update({_id: user._id}, userData, {upsert: true}, function (err) {
+ User.update({_id: req.params.id}, userData, {upsert: true}, function (err) {
if (err) {
return res.status(500).send(err);
} else {
exports.show = function (req, res, next) {
var userId = req.params.id;
- User.findById(userId, function (err, user) {
+ User.findById(userId, '-salt -hashedPassword', function (err, user) {
if (err) return next(err);
- if (!user) return res.status(401).send('Unauthorized');
- res.json(user.profile);
+ if (!user) return res.status(404).send('Unauthorized');
+ res.status(200).json(user.profile);
});
};
var newPass = String(req.body.newPassword);
User.findById(userId, function (err, user) {
- if (user.authenticate(oldPass)) {
- user.password = newPass;
- user.save(function (err) {
- if (err) return validationError(res, err);
- res.status(200).send('OK');
- });
- } else {
- res.status(403).send('Forbidden');
- }
+ if (!user.authenticate(oldPass)) return res.status(403).send('Forbidden');
+
+ user.password = newPass;
+ user.save(function (err) {
+ if (err) return validationError(res, err);
+ res.status(200).send('OK');
+ });
});
};
*/
exports.updateMe = function (req, res, next) {
var userId = req.user._id;
- User.findOne({
- _id: userId
- }, '-salt -hashedPassword', function (err, user) { // don't ever give out the password or salt
+ User.findOne({_id: userId}, function (err, user) { // don't ever give out the password or salt
if (err) return next(err);
if (!user) return res.status(401).send('Unauthorized');
user.referential = req.body.referential;
- user.save(function (err) {
- if (err) return validationError(res, err);
+ user.save(function () {
res.status(200).send('OK');
});
});
if (!validatePresenceOf(this.hashedPassword))
next(new Error('Invalid password'));
+ if (!validatePresenceOf(this.email))
+ next(new Error('Invalid email'));
else
next();
});
password: 'password'
});
-describe('User Model', function() {
+describe('USER Model', function () {
before(function(done) {
// Clear users before testing
User.remove().exec().then(function() {
--- /dev/null
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+var jwt = require('jsonwebtoken');
+var User = require('../user/user.model');
+var config = require('../../config/environment');
+
+var localMock = (function () {
+ var privUser;
+
+ var token = function () {
+ privUser.authenticate('password');
+ return jwt.sign({_id: privUser._id}, config.secrets.session, {expiresIn: 60 * 60 * 5});
+ };
+
+
+ var generateUserObj = function (isAdmin, username) {
+ return new User({
+ provider: 'local',
+ name: 'Fake User',
+ email: username,
+ password: 'password',
+ role: isAdmin ? 'admin' : undefined
+ });
+ };
+
+ var createUser = function (cb) {
+ // Clear users before testing
+ User.remove().exec().then(function () {
+ privUser = generateUserObj(false, 'test@test.com');
+ privUser.save(cb);
+ });
+ };
+
+ var createNew = function (username, cb) {
+ generateUserObj(false, username).save(function (err, newuser) {
+ cb(newuser);
+ });
+ };
+
+ var deleteCurrent = function (cb) {
+ User.remove().exec().then(function () {
+ cb();
+ });
+ };
+
+ var makeUserAdmin = function (done) {
+ privUser.role = 'admin';
+ privUser.save(done);
+ };
+
+ var beforeEach = function (cb) {
+ createUser(function () {
+ cb();
+ });
+ };
+
+ var afterEach = function (cb) {
+ User.remove().exec().then(function () {
+ cb();
+ });
+ };
+
+ var getId = function () {
+ return privUser._id;
+ };
+
+ privUser = generateUserObj(false, 'test@test.com');
+
+ return {
+ afterEach: afterEach,
+ beforeEach: beforeEach,
+ user: {
+ token: token,
+ create: createUser,
+ admin: makeUserAdmin,
+ createNew: createNew,
+ delete: deleteCurrent,
+ id: getId,
+ get: privUser
+ }
+ }
+})();
+
+describe('GET /api/users', function () {
+
+ beforeEach(localMock.beforeEach);
+
+ afterEach(localMock.afterEach);
+
+ it('should be not autorized for guests', function (done) {
+ request(app)
+ .get('/api/users')
+ .expect(401, done);
+ });
+
+ it('should be forbidden for non admin users', function (done) {
+ request(app)
+ .get('/api/users?access_token=' + localMock.user.token())
+ .expect(403, done);
+ });
+
+ it('should list users for administrators', function (done) {
+ localMock.user.admin(function () {
+ request(app)
+ .get('/api/users?access_token=' + localMock.user.token())
+ .expect(200)
+ .expect('Content-Type', /json/)
+ .end(function (err, res) {
+ if (err) return done(err);
+ res.body.should.be.instanceOf(Array);
+ done();
+ });
+ })
+ })
+});
+
+describe('DELETE /api/users/:id', function () {
+
+ var newUserId;
+
+ beforeEach(function (done) {
+ localMock.user.createNew('test2@test.com', function () {
+ User.findOne({email: 'test2@test.com'}, function (err, user) {
+ newUserId = user._id;
+ localMock.beforeEach(done);
+ });
+ })
+ });
+
+
+ afterEach(localMock.afterEach);
+
+ it('should be not autorized for guests', function (done) {
+ request(app)
+ .delete('/api/users/' + newUserId)
+ .expect(401, done);
+ });
+
+ it('should be forbidden for non admin users', function (done) {
+ request(app)
+ .delete('/api/users/' + newUserId + '?access_token=' + localMock.user.token())
+ .expect(403, done);
+ });
+
+ it('should remove user for administrators', function (done) {
+ localMock.user.admin(function () {
+ request(app)
+ .delete('/api/users/' + newUserId + '?access_token=' + localMock.user.token())
+ .expect(204)
+ .end(function (err, res) {
+ if (err) return done(err);
+ User.findById(newUserId, function (err, user) {
+ should(user).be.null();
+ done();
+ });
+ });
+ })
+ })
+});
+
+describe('GET /api/users/me', function () {
+
+ beforeEach(localMock.beforeEach);
+
+ afterEach(localMock.afterEach);
+
+ it('should be not autorized for guests', function (done) {
+ request(app)
+ .get('/api/users/me')
+ .expect(401, done);
+ });
+
+ it('should return info of current user', function (done) {
+ request(app)
+ .get('/api/users/me?access_token=' + localMock.user.token())
+ .expect(200)
+ .expect('Content-Type', /json/)
+ .end(function (err, res) {
+ if (err) return done(err);
+ res.body.should.be.instanceOf(Object);
+ done();
+ });
+ });
+
+ it('should be unauthorized if the user does not longer exists', function (done) {
+ var token = localMock.user.token();
+ localMock.user.delete(function () {
+ request(app)
+ .get('/api/users/me?access_token=' + token)
+ .expect(401, done);
+ });
+ });
+});
+
+describe('PUT /api/users/me', function () {
+
+ beforeEach(localMock.beforeEach);
+
+ afterEach(localMock.afterEach);
+
+ it('should be not autorized for guests', function (done) {
+ request(app)
+ .put('/api/users/me')
+ .expect(401, done);
+ });
+
+ it('should update current user', function (done) {
+ request(app)
+ .put('/api/users/me?access_token=' + localMock.user.token())
+ .type('json')
+ .send('{"referential":{"RGS":"valid"}}')
+ .expect(200)
+ .end(function (err, res) {
+ if (err) return done(err);
+ done();
+ });
+ });
+});
+
+describe('PUT /api/users/password', function () {
+
+ beforeEach(localMock.beforeEach);
+
+ afterEach(localMock.afterEach);
+
+ it('should be not autorized for guests', function (done) {
+ request(app)
+ .put('/api/users/password')
+ .expect(401, done);
+ });
+
+ it('should change password of current user', function (done) {
+ request(app)
+ .put('/api/users/password?access_token=' + localMock.user.token())
+ .type('json')
+ .send('{"oldPassword":"password", "newPassword":"newpassword"}')
+ .expect(200)
+ .end(function (err) {
+ if (err) return done(err);
+ User.find({}, function (err, user) {
+ should(user[0].authenticate('password')).be.false();
+ done();
+ });
+ });
+ });
+
+ it('should be forbidden if old password is wrong', function (done) {
+ request(app)
+ .put('/api/users/password?access_token=' + localMock.user.token())
+ .type('json')
+ .send('{"oldPassword":"wrong", "newPassword":"newpassword"}')
+ .expect(403, done);
+ });
+
+ it('should fail if request is malformed', function (done) {
+ request(app)
+ .put('/api/users/password?access_token=' + localMock.user.token())
+ .type('json')
+ .send('{"oldPassword":"wrong", "newPassword":{"test": "non}}')
+ .expect(400, done);
+ });
+});
+
+describe('GET /api/users/:id', function () {
+
+ beforeEach(localMock.beforeEach);
+
+ afterEach(localMock.afterEach);
+
+ it('should be not autorized for guests', function (done) {
+ request(app)
+ .get('/api/users/' + localMock.user.id())
+ .expect(401, done);
+ });
+
+ it('should fail for non admin users', function (done) {
+ request(app)
+ .get('/api/users/' + localMock.user.id() + '?access_token=' + localMock.user.token())
+ .expect(403, done);
+ });
+
+ it('should get user with specified ID', function (done) {
+ localMock.user.createNew('testuser@test.com', function (newUser) {
+ localMock.user.admin(function () {
+ request(app)
+ .get('/api/users/' + newUser._id + '?access_token=' + localMock.user.token())
+ .expect(200)
+ .expect('Content-Type', /json/)
+ .end(function (err, res) {
+ if (err) return done(err);
+ res.body.name.should.be.exactly('Fake User');
+ done();
+ });
+ });
+ });
+ });
+
+ it('should fail with wrong ID', function (done) {
+ localMock.user.admin(function () {
+ request(app)
+ .get('/api/users/fakeid?access_token=' + localMock.user.token())
+ .expect(500, done);
+ });
+ });
+});
+
+describe('POST /api/users/:id', function () {
+
+ beforeEach(localMock.beforeEach);
+
+ afterEach(localMock.afterEach);
+
+ it('should be not autorized for guests', function (done) {
+ request(app)
+ .post('/api/users/' + localMock.user.id())
+ .expect(401, done);
+ });
+
+ it('should be not autorized for non admin users', function (done) {
+ request(app)
+ .post('/api/users/' + localMock.user.id() + '?access_token=' + localMock.user.token())
+ .expect(403, done);
+ });
+
+ it('should update user "name" field', function (done) {
+ localMock.user.admin(function () {
+ request(app)
+ .post('/api/users/' + localMock.user.id() + '?access_token=' + localMock.user.token())
+ .type('json')
+ .send({name: 'Username 2'})
+ .expect(200)
+ .expect('Content-Type', /json/)
+ .end(function (err, res) {
+ if (err) return done(err);
+ User.findById(localMock.user.id(), function (err, user) {
+ user.name.should.be.exactly(res.body.name);
+ done();
+ });
+ });
+ });
+ });
+});
+
+describe('POST /api/users', function () {
+
+ beforeEach(localMock.beforeEach);
+
+ afterEach(localMock.afterEach);
+
+ it('should be not autorized for guests', function (done) {
+ request(app)
+ .post('/api/users')
+ .expect(401, done);
+ });
+
+ it('should be not autorized for non admin users', function (done) {
+ request(app)
+ .post('/api/users?access_token=' + localMock.user.token())
+ .expect(403, done);
+ });
+
+ it('should fail when email field is missing', function (done) {
+ localMock.user.admin(function () {
+ request(app)
+ .post('/api/users?access_token=' + localMock.user.token())
+ .type('json')
+ .send({name: 'Username 2', password: 'secret'})
+ .expect(422, done);
+ });
+ });
+
+ it('should fail when password field is missing', function (done) {
+ localMock.user.admin(function () {
+ request(app)
+ .post('/api/users?access_token=' + localMock.user.token())
+ .type('json')
+ .send({name: 'Username 2', email: 'fake@test.com'})
+ .expect(422, done);
+ });
+ });
+
+ it('should fail when found duplicate email', function (done) {
+ localMock.user.admin(function () {
+ request(app)
+ .post('/api/users?access_token=' + localMock.user.token())
+ .type('json')
+ .send({name: 'Username 2', email: 'test@test.com', password: 'secret'})
+ .expect(422, done);
+ });
+ });
+
+ it('should create user', function (done) {
+ localMock.user.admin(function () {
+ request(app)
+ .post('/api/users?access_token=' + localMock.user.token())
+ .type('json')
+ .send({name: 'Username 2', email: 'test2@test.com', password: 'secret'})
+ .expect(200)
+ .end(function (err, res) {
+ User.findById(res.body._id, function (err, user) {
+ user.email.should.be.exactly('test2@test.com');
+ done();
+ })
+ });
+ });
+ });
+});
\ No newline at end of file
--- /dev/null
+'use strict';
+
+var should = require('should');
+var app = require('../app');
+var request = require('supertest');
+var User = require('../api/user/user.model');
+
+
+var user = new User({
+ provider: 'local',
+ name: 'Fake User',
+ email: 'test@test.com',
+ password: 'password'
+});
+
+describe('AUTH module', function () {
+ before(function (done) {
+ User.remove().exec().then(function () {
+ user.save(function () {
+ done();
+ });
+ });
+ });
+
+ after(function (done) {
+ User.remove().exec().then(function () {
+ done();
+ });
+ });
+
+ it('should authenticate the user', function (done) {
+ request(app)
+ .post('/auth/local')
+ .type('json')
+ .send('{"email":"' + user.email + '", "password":"' + user.password + '"}')
+ .expect(200, done);
+ });
+
+ it('should not authenticate the user when password is wrong', function (done) {
+ request(app)
+ .post('/auth/local')
+ .type('json')
+ .send('{"email":"' + user.email + '", "password":"wrong"}')
+ .expect(401, done);
+ });
+
+ it('should not authenticate the user when mail is wrong', function (done) {
+ request(app)
+ .post('/auth/local')
+ .type('json')
+ .send('{"email":"fake", "password":"' + user.password + '"}')
+ .expect(401, done);
+ });
+});
\ No newline at end of file
var router = express.Router();
-router.post('/', function(req, res, next) {
- passport.authenticate('local', function (err, user, info) {
- var error = err || info;
- if (error) return res.status(401).json(error);
- if (!user) return res.status(404).json({message: 'Something went wrong, please try again.'});
+router.post('/', function (req, res, next) {
+ passport.authenticate('local', function (err, user, info) {
+ var error = err || info;
+ if (error) return res.status(401).json(error);
+ if (!user) return res.status(404).json({message: 'Something went wrong, please try again.'});
- var token = auth.signToken(user._id, user.role);
- res.json({token: token});
- })(req, res, next)
+ var token = auth.signToken(user._id, user.role);
+ res.json({token: token});
+ })(req, res, next)
});
module.exports = router;
\ No newline at end of file
* Lancement des tâches automatiques
*/
// Purge des rapports générés - Par défaut -> minuit chaque jour
-cron.launch(utils.properties.get('generator.cron.purge') || '0 0 0 * * *', reportCtrl.removeAll);
+cron.launch(utils.properties.get('generator.cron.purge') || '0 0 0 * * *', reportCtrl.purge);
'use strict';
-module.exports[404] = function pageNotFound(req, res) {
- var viewFilePath = '404';
- var statusCode = 404;
- var result = {
- status: statusCode
- };
+module.exports = function (statusCode) {
+ return function (req, res, message) {
+ var viewFilePath = statusCode.toString();
+ var result = {
+ status: statusCode,
+ message: message
+ };
- res.status(result.status);
- res.render(viewFilePath, function (err) {
- if (err) { return res.json(result, result.status); }
-
- res.render(viewFilePath);
- });
-};
+ res.status(result.status);
+ res.render(viewFilePath, function (err) {
+ if (err) {
+ return res.status(result.status).json(result);
+ }
+ res.render(viewFilePath);
+ });
+ }
+};
\ No newline at end of file
'use strict';
+
+var should = require('should');
+var utils = require('.');
+var path = require('path');
+var appDir = path.dirname(require.resolve('../../app'));
+
+
+describe('UTILS module', function () {
+
+ it('should list directories', function (done) {
+ var dirs = utils.file.listDir(appDir + "/components/worker/generator/input/");
+ dirs.should.be.instanceOf(Array);
+ done();
+ });
+
+ it('should remove all folder recursively', function (done) {
+ // Remove all output files
+ utils.file.deleteFolderRecursive(appDir + "/components/worker/generator/output/", false);
+ // AND input files
+ utils.file.deleteFolderRecursive(appDir + "/components/worker/generator/input/", false);
+ done();
+ })
+
+});
\ No newline at end of file
// All configurations will extend these options
// ============================================
var all = {
- env: process.env.NODE_ENV,
+ env: requiredProcessEnv("NODE_ENV"),
// Root path of server
root: path.normalize(__dirname + '/../../..'),
// MongoDB connection options
mongo: {
uri: 'mongodb://localhost/libervalid-test'
- }
+ },
+ seedDB: false,
};
\ No newline at end of file
// All undefined asset or api routes should return a 404
app.route('/:url(api|auth|components|app|bower_components|assets)/*')
- .get(errors[404]);
+ .get(errors(404));
// All other routes should redirect to the index.html
app.route('/*')