|
|
|
@ -776,7 +776,10 @@ describe('User', function () {
|
|
|
|
|
name: 'test_copy.png',
|
|
|
|
|
type: 'image/png',
|
|
|
|
|
};
|
|
|
|
|
User.uploadPicture(uid, picture, function (err, uploadedPicture) {
|
|
|
|
|
User.uploadCroppedPicture({
|
|
|
|
|
uid: uid,
|
|
|
|
|
file: picture,
|
|
|
|
|
}, function (err, uploadedPicture) {
|
|
|
|
|
assert.ifError(err);
|
|
|
|
|
assert.equal(uploadedPicture.url, '/assets/uploads/profile/' + uid + '-profileavatar.png');
|
|
|
|
|
assert.equal(uploadedPicture.path, path.join(nconf.get('base_dir'), 'public', 'uploads', 'profile', uid + '-profileavatar.png'));
|
|
|
|
@ -794,7 +797,10 @@ describe('User', function () {
|
|
|
|
|
name: 'test.png',
|
|
|
|
|
type: 'image/png',
|
|
|
|
|
};
|
|
|
|
|
User.uploadPicture(uid, picture, function (err) {
|
|
|
|
|
User.uploadCroppedPicture({
|
|
|
|
|
uid: uid,
|
|
|
|
|
file: picture,
|
|
|
|
|
}, function (err) {
|
|
|
|
|
assert.equal(err.message, '[[error:profile-image-uploads-disabled]]');
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
@ -808,7 +814,11 @@ describe('User', function () {
|
|
|
|
|
name: 'test.png',
|
|
|
|
|
type: 'image/png',
|
|
|
|
|
};
|
|
|
|
|
User.uploadPicture(uid, picture, function (err) {
|
|
|
|
|
|
|
|
|
|
User.uploadCroppedPicture({
|
|
|
|
|
uid: uid,
|
|
|
|
|
file: picture,
|
|
|
|
|
}, function (err) {
|
|
|
|
|
assert.equal(err.message, '[[error:file-too-big, 256]]');
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
@ -820,89 +830,48 @@ describe('User', function () {
|
|
|
|
|
size: 7189,
|
|
|
|
|
name: 'test',
|
|
|
|
|
};
|
|
|
|
|
User.uploadPicture(uid, picture, function (err) {
|
|
|
|
|
User.uploadCroppedPicture({
|
|
|
|
|
uid: uid,
|
|
|
|
|
file: picture,
|
|
|
|
|
}, function (err) {
|
|
|
|
|
assert.equal(err.message, '[[error:invalid-image]]');
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should return error if no plugins listening for filter:uploadImage when uploading from url', function (done) {
|
|
|
|
|
var url = nconf.get('url') + '/assets/logo.png';
|
|
|
|
|
User.uploadFromUrl(uid, url, function (err) {
|
|
|
|
|
assert.equal(err.message, '[[error:no-plugin]]');
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should return error if the extension is invalid when uploading from url', function (done) {
|
|
|
|
|
var url = nconf.get('url') + '/favicon.ico';
|
|
|
|
|
|
|
|
|
|
function filterMethod(data, callback) {
|
|
|
|
|
callback(null, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
plugins.registerHook('test-plugin', { hook: 'filter:uploadImage', method: filterMethod });
|
|
|
|
|
|
|
|
|
|
User.uploadFromUrl(uid, url, function (err) {
|
|
|
|
|
assert.equal(err.message, '[[error:invalid-image-extension]]');
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should return error if url is invalid when uploading from url', function (done) {
|
|
|
|
|
function filterMethod(data, callback) {
|
|
|
|
|
callback(null, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
plugins.registerHook('test-plugin', { hook: 'filter:uploadImage', method: filterMethod });
|
|
|
|
|
|
|
|
|
|
User.uploadFromUrl(uid, 'http://scanme.nmap.org:2234/index.html', function (err) {
|
|
|
|
|
assert.equal(err.message, '[[error:invalid-url]]');
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
it('should return error if the file is too big when uploading from url', function (done) {
|
|
|
|
|
var url = nconf.get('url') + '/assets/logo.png';
|
|
|
|
|
meta.config.maximumProfileImageSize = 1;
|
|
|
|
|
|
|
|
|
|
function filterMethod(data, callback) {
|
|
|
|
|
callback(null, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
plugins.registerHook('test-plugin', { hook: 'filter:uploadImage', method: filterMethod });
|
|
|
|
|
|
|
|
|
|
User.uploadFromUrl(uid, url, function (err) {
|
|
|
|
|
assert.equal(err.message, '[[error:file-too-big, ' + meta.config.maximumProfileImageSize + ']]');
|
|
|
|
|
done();
|
|
|
|
|
describe('user.uploadCroppedPicture', function () {
|
|
|
|
|
var goodImage = 'data:image/gif;base64,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';
|
|
|
|
|
var badImage = 'data:audio/mp3;base64,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';
|
|
|
|
|
it('should error if both file and imageData are missing', function (done) {
|
|
|
|
|
User.uploadCroppedPicture({}, function (err) {
|
|
|
|
|
assert.equal('[[error:invalid-data]]', err.message);
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should error with invalid data', function (done) {
|
|
|
|
|
var socketUser = require('../src/socket.io/user');
|
|
|
|
|
it('should error if file size is too big', function (done) {
|
|
|
|
|
var temp = meta.config.maximumProfileImageSize;
|
|
|
|
|
meta.config.maximumProfileImageSize = 1;
|
|
|
|
|
User.uploadCroppedPicture({
|
|
|
|
|
uid: 1,
|
|
|
|
|
imageData: goodImage,
|
|
|
|
|
}, function (err) {
|
|
|
|
|
assert.equal('[[error:file-too-big, 1]]', err.message);
|
|
|
|
|
|
|
|
|
|
socketUser.uploadProfileImageFromUrl({ uid: uid }, { uid: uid, url: '' }, function (err) {
|
|
|
|
|
assert.equal(err.message, '[[error:invalid-data]]');
|
|
|
|
|
done();
|
|
|
|
|
// Restore old value
|
|
|
|
|
meta.config.maximumProfileImageSize = temp;
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should upload picture when uploading from url', function (done) {
|
|
|
|
|
var socketUser = require('../src/socket.io/user');
|
|
|
|
|
var url = nconf.get('url') + '/assets/logo.png';
|
|
|
|
|
meta.config.maximumProfileImageSize = '';
|
|
|
|
|
|
|
|
|
|
function filterMethod(data, callback) {
|
|
|
|
|
callback(null, { url: url });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
plugins.registerHook('test-plugin', { hook: 'filter:uploadImage', method: filterMethod });
|
|
|
|
|
|
|
|
|
|
socketUser.uploadProfileImageFromUrl({ uid: uid }, { uid: uid, url: url }, function (err, uploadedPicture) {
|
|
|
|
|
assert.ifError(err);
|
|
|
|
|
assert.equal(uploadedPicture, url);
|
|
|
|
|
done();
|
|
|
|
|
it('should not allow image data with bad MIME type to be passed in', function (done) {
|
|
|
|
|
User.uploadCroppedPicture({
|
|
|
|
|
uid: 1,
|
|
|
|
|
imageData: badImage,
|
|
|
|
|
}, function (err) {
|
|
|
|
|
assert.equal('[[error:invalid-image]]', err.message);
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|