var cpUpload = upload.fields([{name: 'content', maxCount: 1}, {name: 'signatures'}]);
router.post('/', cpUpload, auth.isAuthenticated(), controller.create);
-router.delete('/:id', auth.isAuthenticated(), controller.destroy);
-router.delete('/', auth.hasRole('admin'), controller.purge);
+router.delete('/', auth.hasRole('admin'), controller.removeAll);
module.exports = router;
\ No newline at end of file
};
-// Updates an existing report in the DB.
-exports.update = function (req, res) {
- if (req.body._id) {
- delete req.body._id;
- }
- Report.findById(req.params.id, function (err, report) {
- if (err) {
- return handleError(res, err);
- }
- if (!report) {
- return res.status(404).send('Not Found');
- }
- var updated = _.merge(report, req.body);
- updated.save(function (err) {
- if (err) {
- return handleError(res, err);
- }
- return res.status(200).json(report);
- });
- });
-};
-
-// Deletes a report from the DB.
-exports.destroy = function (req, res) {
- Report.findById(req.params.id, function (err, report) {
- if (err) {
- return handleError(res, err);
- }
- if (!report) {
- return res.status(404).send('Not Found');
- }
- report.remove(function (err) {
- if (err) {
- return handleError(res, err);
- }
- return res.status(204).send('No Content');
- });
- });
-};
-
// Deletes all report from the DB as a user
-exports.purge = function (req, res) {
+exports.removeAll = function (req, res) {
Report.find({isGenerated: true}, function (err, reports) {
if (err) {
return handleError(res, err);
}
- if (!reports) {
- return res.status(404).send('Not Found');
- }
reports.forEach(function (report) {
var uuid = report.uuid;
report.remove(function (err) {
};
// Suppression de tous les rapports dans la base et dans le FS - Utilisé par le cron
-exports.removeAll = function () {
+exports.purge = function (cb) {
Report.remove({}, function (err, reportsRemoved) {
if (err) {
console.error(err);
// AND input files
utils.file.deleteFolderRecursive(appDir + "/components/worker/generator/input/", false);
console.info("Cron status : " + reportsRemoved);
+ if (typeof cb === 'function') {
+ cb();
+ }
});
};
--- /dev/null
+'use strict';
+
+var should = require('should');
+var Report = require('../report/report.model');
+var reportController = require('../report/report.controller');
+
+describe('REPORTS Purge', function () {
+ it('should not call callback if not provided', function (done) {
+ reportController.purge();
+ done();
+ });
+
+ it('should delete all reports (generated or not) and files', function (done) {
+ reportController.purge(function () {
+ Report.find({}, function (err, reports) {
+ if (err) return done(err);
+ reports.length.should.be.exactly(0);
+ done();
+ })
+
+ })
+ })
+});
\ No newline at end of file
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);
.end(function (err, res) {
if (err) return done(err);
Report.findById(res.body.id, function (err, report) {
+ report.isGenerated.should.be.false();
var file = appDir + '/components/worker/generator/input/' + report.uuid + '/minimal.pdf';
var ex;
try {
});
});
+ });
+ it('should handle multiple signature files', function (done) {
+ request(app)
+ .post('/api/reports?access_token=' + localMock.user.token())
+ .attach('content', appDir + '/api/report/fixtures/minimal.pdf')
+ .attach('signatures', appDir + '/api/report/fixtures/minimal.pdf')
+ .attach('signatures', appDir + '/api/report/fixtures/minimal.pdf')
+ .expect(200)
+ .end(function (err, res) {
+ if (err) return done(err);
+ Report.findById(res.body.id, function (err, report) {
+ if (err) return done(err);
+ report.signatures.length.should.be.exactly(2);
+ done();
+ });
+ });
});
+});
+
+describe('DELETE /api/reports', function () {
+ beforeEach(localMock.beforeEach);
+
+ afterEach(localMock.afterEach);
+
+ it('should be unauthorized to guest users', function (done) {
+ request(app)
+ .delete('/api/reports')
+ .expect(401, done);
+ });
+
+ it('should be forbidden to users', function (done) {
+ request(app)
+ .delete('/api/reports?access_token=' + localMock.user.token())
+ .expect(403, done);
+ });
+
+ it('should be allowed to administrators', 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
var fs = require('fs');
var path = require('path');
var PropertiesReader = require('properties-reader');
-var appDir = path.dirname(require.main.filename);
// Fonctions utilitaires de fichiers
exports.file = {
var curPath = pathFile + "/" + file;
if (fs.lstatSync(curPath).isDirectory()) { // recurse
that.deleteFolderRecursive(curPath, true);
- if (!deleteItself) fs.rmdirSync(curPath);
} else { // delete file
fs.unlinkSync(curPath);
}
--- /dev/null
+'use strict';
+