plugins/install tests

v1.18.x
barisusakli 8 years ago
parent 2a97e5478f
commit 50a2a7abbe

@ -1,15 +1,15 @@
'use strict'; 'use strict';
var winston = require('winston'), var winston = require('winston');
async = require('async'), var async = require('async');
path = require('path'), var path = require('path');
fs = require('fs'), var fs = require('fs');
nconf = require('nconf'), var nconf = require('nconf');
os = require('os'), var os = require('os');
db = require('../database'), var db = require('../database');
meta = require('../meta'), var meta = require('../meta');
pubsub = require('../pubsub'); var pubsub = require('../pubsub');
module.exports = function (Plugins) { module.exports = function (Plugins) {
@ -68,13 +68,15 @@ module.exports = function (Plugins) {
}; };
function toggleInstall(id, version, callback) { function toggleInstall(id, version, callback) {
Plugins.isInstalled(id, function (err, installed) { var type;
if (err) { var installed;
return callback(err);
}
var type = installed ? 'uninstall' : 'install';
async.waterfall([ async.waterfall([
function (next) { function (next) {
Plugins.isInstalled(id, next);
},
function (_installed, next) {
installed = _installed;
type = installed ? 'uninstall' : 'install';
Plugins.isActive(id, next); Plugins.isActive(id, next);
}, },
function (active, next) { function (active, next) {
@ -89,22 +91,15 @@ module.exports = function (Plugins) {
function (next) { function (next) {
var command = installed ? ('npm uninstall ' + id) : ('npm install ' + id + '@' + (version || 'latest')); var command = installed ? ('npm uninstall ' + id) : ('npm install ' + id + '@' + (version || 'latest'));
runNpmCommand(command, next); runNpmCommand(command, next);
} },
], function (err) { function (next) {
if (err) { Plugins.get(id, next);
return callback(err); },
} function (pluginData, next) {
Plugins.get(id, function (err, pluginData) {
if (err) {
return callback(err);
}
Plugins.fireHook('action:plugin.' + type, id); Plugins.fireHook('action:plugin.' + type, id);
callback(null, pluginData); next(null, pluginData);
}); }
}); ], callback);
});
} }
function runNpmCommand(command, callback) { function runNpmCommand(command, callback) {
@ -113,7 +108,7 @@ module.exports = function (Plugins) {
return callback(err); return callback(err);
} }
winston.info('[plugins] ' + stdout); winston.info('[plugins] ' + stdout);
callback(err); callback();
}); });
} }

@ -96,5 +96,60 @@ describe('Plugins', function () {
}); });
}); });
describe('install/activate/uninstall', function () {
var latest;
var pluginName = 'nodebb-plugin-imgur';
it('should install a plugin', function (done) {
plugins.toggleInstall(pluginName, '1.0.16', function (err, pluginData) {
assert.ifError(err);
latest = pluginData.latest;
assert.equal(pluginData.name, pluginName);
assert.equal(pluginData.id, pluginName);
assert.equal(pluginData.url, 'https://github.com/barisusakli/nodebb-plugin-imgur#readme');
assert.equal(pluginData.description, 'A Plugin that uploads images to imgur');
assert.equal(pluginData.active, false);
assert.equal(pluginData.installed, true);
done();
});
});
it('should activate plugin', function (done) {
plugins.toggleActive(pluginName, function (err) {
assert.ifError(err);
plugins.isActive(pluginName, function (err, isActive) {
assert.ifError(err);
assert(isActive);
done();
});
});
});
it('should upgrade plugin', function (done) {
plugins.upgrade(pluginName, 'latest', function (err, isActive) {
assert.ifError(err);
assert(isActive);
plugins.loadPluginInfo(path.join(nconf.get('base_dir'), 'node_modules', pluginName), function (err, pluginInfo) {
assert.ifError(err);
assert.equal(pluginInfo.version, latest);
done();
});
});
});
it('should uninstall a plugin', function (done) {
plugins.toggleInstall(pluginName, 'latest', function (err, pluginData) {
assert.ifError(err);
assert.equal(pluginData.installed, false);
assert.equal(pluginData.active, false);
done();
});
});
});
}); });

Loading…
Cancel
Save