add file resources for apib tests and env dependent tmp file usage for tests

pull/32/head
HardiReady 2018-03-30 20:21:28 +02:00
parent eda2389eda
commit 29c53c03a5
16 changed files with 59 additions and 45 deletions

3
.gitignore vendored
View File

@ -47,7 +47,8 @@ Thumbs.db
# Internal Data
public/
mongodb-data/
resource/
api/resource/
api/apib/dredd/data/tmp-resource
backup/
# System

View File

@ -45,15 +45,12 @@ Create a new squad
BLUFOR
-----BOUNDARY
Content-Disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg
Content-Disposition: form-data; name="image"; filename="image.png"
Content-Type: image/png
Content-Transfer-Encoding: base64
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIA
AhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFAEB
AAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AL+AD//Z
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEX/TQBcNTh/AAAAAXRSTlMA
QObYZgAAAApJREFUeJxjYgAAAAYAAzY3fKgAAAAASUVORK5CYII=
-----BOUNDARY--
+ Response 201
@ -80,15 +77,12 @@ Update squad, identified by its id
OPFOR
-----BOUNDARY
Content-Disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg
Content-Disposition: form-data; name="image"; filename="image.png"
Content-Type: image/png
Content-Transfer-Encoding: base64
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIA
AhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFAEB
AAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AL+AD//Z
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEX/TQBcNTh/AAAAAXRSTlMA
QObYZgAAAApJREFUeJxjYgAAAAYAAzY3fKgAAAAASUVORK5CYII=
-----BOUNDARY--
+ Response 200

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

View File

@ -1,5 +1,6 @@
module.exports = {
port: 8091,
resourceLocation: __dirname + '/../resource',
database: {
uri: 'mongodb://localhost:27017/',
@ -19,10 +20,11 @@ module.exports = {
dredd: {
env: 'dreddTest',
port: 3001,
resourceLocation: __dirname + '/../apib/dredd/data/tmp-resource',
},
unit: {
env: 'unitTest',
port: 3010,
port: 3002,
},
},
};

View File

@ -0,0 +1,12 @@
'use strict';
const config = require('../config/config');
const resourceLocation = () => {
if (process.env.NODE_ENV === config.test.dredd.env) {
return config.test.dredd.resourceLocation
}
return config.resourceLocation;
};
exports.resourceLocation = resourceLocation;

View File

@ -12,7 +12,7 @@
"lint": "eslint '**/*.js'",
"test": "mocha --require ./test/config/spec_helper.js",
"start-test": "DEBUG='cc:*' NODE_ENV=unitTest node server.js",
"start-api-test": "DEBUG='cc:*' NODE_ENV=dreddTest node server.js",
"start-api-test": "rm -rf ./apib/dredd/data/tmp-resource && cp -r ./apib/dredd/data/resource ./apib/dredd/data/tmp-resource && DEBUG='cc:*' NODE_ENV=dreddTest node server.js",
"api:compile-docs": "$(npm bin)/hercule apib/dev-doc.apib -o apib/documentation.apib",
"api:publish-docs": "$(npm bin)/aglio --theme-variables slate -i ./apib/documentation.apib -o ../public/api-docs.html",
"api:test-docs": "npm run api:docs && ./apib/dredd/populate-data.sh && $(npm bin)/dredd",

View File

@ -15,6 +15,7 @@ const checkHl = require('../middleware/permission-check').checkHl;
const routerHandling = require('../middleware/router-handling');
const idValidator = require('../middleware/validators').idValidator;
const resourceLocation = require('../middleware/resource-location').resourceLocation().concat('/decoration/');
// Mongoose Model using mongoDB
const DecorationModel = require('../models/decoration');
@ -65,7 +66,7 @@ decoration.route('/')
}
res.status(codes.created);
res.locals.items = decoration;
fs.appendFile(__dirname + '/../resource/decoration/' + decoration.id + '.png',
fs.appendFile(resourceLocation + decoration._id + '.png',
new Buffer(req.file.buffer),
(err) => {
if (err) next(err);
@ -109,7 +110,7 @@ decoration.route('/:id')
req.body.$inc = {__v: 1};
if (req.file) {
const file = __dirname + '/../resource/decoration/' + req.body._id + '.png';
const file = resourceLocation + req.body._id + '.png';
fs.unlink(file, (err) => {
if (err) next(err);
fs.appendFile(file, new Buffer(req.file.buffer), (err) => {
@ -146,15 +147,12 @@ decoration.route('/:id')
AwardingsModel.find({decorationId: req.params.id}).remove().exec();
// delete graphic
fs.unlink(__dirname + '/../resource/decoration/' + req.params.id + '.png',
fs.unlink(resourceLocation + req.params.id + '.png',
(err) => {
if (err) next(err);
});
// we don't set res.locals.items and thus it will send a 204 (no content) at the end. see last handler
// user.use(..)
res.locals.processed = true;
next(err); // this works because err is in normal case undefined and that is the same as no parameter
next(err);
});
});
})

View File

@ -15,6 +15,7 @@ const checkHl = require('../middleware/permission-check').checkHl;
const routerHandling = require('../middleware/router-handling');
const idValidator = require('../middleware/validators').idValidator;
const resourceLocation = require('../middleware/resource-location').resourceLocation().concat('/rank/');
// Mongoose Model using mongoDB
const RankModel = require('../models/rank');
@ -58,7 +59,7 @@ ranks.route('/')
}
res.status(codes.created);
res.locals.items = rank;
fs.appendFile(__dirname + '/../resource/rank/' + rank.id + '.png', new Buffer(req.file.buffer),
fs.appendFile(resourceLocation + rank._id + '.png', new Buffer(req.file.buffer),
(err) => {
if (err) next(err);
});
@ -102,7 +103,7 @@ ranks.route('/:id')
req.body.$inc = {__v: 1};
if (req.file) {
const file = __dirname + '/../resource/rank/' + req.body._id + '.png';
const file = resourceLocation + req.body._id + '.png';
fs.unlink(file, (err) => {
if (err) next(err);
fs.appendFile(file, new Buffer(req.file.buffer),

View File

@ -14,6 +14,9 @@ const UserModel = require('../models/user');
const signatures = new express.Router();
// routes **********************
/**
* @deprecated
*/
signatures.route('/:id')
// does not use idValidator since it works by username
.get((req, res, next) => {

View File

@ -15,6 +15,7 @@ const checkHl = require('../middleware/permission-check').checkHl;
const routerHandling = require('../middleware/router-handling');
const idValidator = require('../middleware/validators').idValidator;
const resourceLocation = require('../middleware/resource-location').resourceLocation().concat('/squad/');
// Mongoose Model using mongoDB
const SquadModel = require('../models/squad');
@ -58,10 +59,10 @@ squads.route('/')
}
res.status(codes.created);
res.locals.items = squad;
fs.appendFile(__dirname + '/../resource/squad/' + squad.id + '.png', new Buffer(req.file.buffer), (err) => {
if (err) next(err);
fs.appendFile(resourceLocation.concat(squad._id).concat('.png'),
new Buffer(req.file.buffer), (err) => {
next(err);
});
next();
});
} else {
const err = new Error('no image file provided');
@ -105,7 +106,8 @@ squads.route('/:id')
req.body.$inc = {__v: 1};
if (req.file) {
const file = __dirname + '/../resource/squad/' + req.body._id + '.png';
const file = resourceLocation.concat(req.params.id)
.concat('.png');
fs.unlink(file, (err) => {
if (err) next(err);
fs.appendFile(file, new Buffer(req.file.buffer), (err) => {
@ -139,14 +141,13 @@ squads.route('/:id')
}
// delete graphic
fs.unlink(__dirname + '/../resource/squad/' + req.params.id + '.png', (err) => {
if (err) next(err);
fs.unlink(resourceLocation.concat(req.params.id)
.concat('.png'), (err) => {
// we don't set res.locals.items and thus it will send a 204 (no content) at the end. see last handler
res.locals.processed = true;
next(err);
});
// we don't set res.locals.items and thus it will send a 204 (no content) at the end. see last handler
// user.use(..)
res.locals.processed = true;
next(err); // this works because err is in normal case undefined and that is the same as no parameter
});
})

View File

@ -14,6 +14,7 @@ const offsetlimitMiddleware = require('../middleware/limitoffset-middleware-mong
const filterHandlerCreator = require('../middleware/filter-handler-mongo');
const routerHandling = require('../middleware/router-handling');
const idValidator = require('../middleware/validators').idValidator;
const resourceLocation = require('../middleware/resource-location').resourceLocation().concat('/signature/');
// Mongoose Model using mongoDB
const UserModel = require('../models/user');
@ -172,12 +173,12 @@ users.route('/:id')
AwardingModel.find({userId: req.params.id}).remove().exec();
// check if signature exists and delete compressed and uncompressed file
const fileMinified = __dirname + '/../resource/signature/' + req.params.id + '.png';
const fileMinified = resourceLocation + req.params.id + '.png';
if (fs.existsSync(fileMinified)) {
fs.unlink(fileMinified, (err) => {
});
}
const file = __dirname + '/../resource/signature/big/' + req.params.id + '.png';
const file = resourceLocation + 'big/' + req.params.id + '.png';
if (fs.existsSync(file)) {
fs.unlink(file, (err) => {
});

View File

@ -17,6 +17,7 @@ const checkMT = require('../middleware/permission-check').checkMT;
const routerHandling = require('../middleware/router-handling');
const idValidator = require('../middleware/validators').idValidator;
const resourceLocation = require('../middleware/resource-location').resourceLocation().concat('/logs/');
// log paser tool
const parseWarLog = require('../tools/log-parse-tool');
@ -99,7 +100,7 @@ wars.route('/')
LogBudgetModel.create(statsResult.budget, () => {
LogTransportModel.create(statsResult.transport, () => {
LogPointsModel.create(statsResult.points, () => {
const folderName = __dirname + '/../resource/logs/' + war._id;
const folderName = resourceLocation.concat(war._id);
mkdirp(folderName, (err) => {
if (err) return next(err);
@ -189,7 +190,7 @@ wars.route('/:id')
LogPointsModel.find({war: item._id}).remove().exec();
// check if logfiles exist and delete from fs
const warDir = __dirname + '/../resource/logs/' + req.params.id;
const warDir = resourceLocation + req.params.id;
if (fs.existsSync(warDir)) {
const cleanLog = warDir + '/clean.log';

View File

@ -24,7 +24,6 @@ const checkAdmin = require('./middleware/permission-check').checkAdmin;
const signatureCronJob = require('./cron-job/cron').cronJobSignature;
const backupCronJob = require('./cron-job/cron').cronJobBackup;
// router modules
const authenticateRouter = require('./routes/authenticate');
const accountRouter = require('./routes/account');
@ -116,6 +115,7 @@ switch (process.env.NODE_ENV) {
const MongodbMemoryServer = require('mongodb-memory-server').default;
const mongoServer = new MongodbMemoryServer();
mongoose.Promise = Promise;
app.resourcePath = ''
mongoServer.getConnectionString().then((mongoUri) => {
mongoose.connect(mongoUri);

View File

@ -17,7 +17,7 @@ const codes = require('../routes/http-codes');
// standard input/output file extension
const fileExt = '.png';
const resourceDir = __dirname + '/../resource/';
const resourceDir = require('../middleware/resource-location').resourceLocation();
let createSignature = (userId, res, next) => {