UNPKG

prodio

Version:

Simplified project management

138 lines (134 loc) 4.45 kB
var assert = require('assert'); var Plugger = require('../').Plugger; var DEFAULTS = require('../').DEFAULTS; var path = require('path'); var semver = require('semver'); describe('Plugger', function(){ /* Should load a single plugin Should load all plugins from a folder Should order the plugins by priority Check that requirements are fulfilled Check that exclusions are fulfilled */ describe('Constructor', function(){ it('Can create an instance', function(done){ var plugger = new Plugger(); assert(plugger instanceof Plugger, 'Got a plugger instance'); done(); }); it('Can take custom parameters', function(done){ var plugger = new Plugger({foo: 'bar'}); assert(plugger.options.foo === 'bar', 'Option foo === bar'); assert(plugger.options.path === DEFAULTS.path, 'Option foo === bar'); done(); }); }); describe('Standalone loading', function(){ var plugger; beforeEach(function(done){ plugger = new Plugger({ path: path.resolve(__dirname, 'plugins') }); done(); }); it('Can load a plugin', function(done){ plugger.load('test1', function(err, plugin){ assert(!err, err); assert(plugin, 'Got the plugin'); done(); }); }); it('Can load a plugin with a plugger.json file', function(done){ plugger.load('test4', function(err, plugin){ assert(!err, err); assert(plugin, 'Got the plugin'); done(); }); }); it('Can load multiple plugins', function(done){ plugger.load(['test1', 'test2'], function(errs, plugins){ if(errs && errs.length){ /* if(errs instanceof Array){ errs.forEach(function(err){ console.log(err); }); }else{ console.log(errs); } //*/ assert(!errs, errs[0]); } assert(plugins, 'Got the plugins'); assert(plugins.length===3, 'Got '+plugins.length+' plugins'); done(); }); }); it('Throws an error when it loads a bad plugin', function(done){ plugger.load('testbad', function(err, plugins){ assert(err, 'Got the error'); assert(!plugins.length, 'No plugin'); done(); }); }); it('Throws an error when there is no plugin', function(done){ plugger.load('testnone', function(err, plugins){ assert(err && err.length, 'Got the error'); assert(!plugins.length, 'No plugin'); done(); }); }); it('Orders the plugins based on priority', function(done){ plugger.load(['test1', 'test2'], function(errs, plugins){ assert(plugins, 'Got the plugins'); assert(plugins.length===3, 'Got 3 plugins'); assert(plugins[0].plugin() === 'Test 2', 'Did\'t load 2 first'); assert(plugins[1].plugin() === 'Test 3', 'Did\'t load 3 second'); assert(plugins[2].plugin() === 'Test 1', 'Did\'t load 1 last'); done(); }); }); }); describe('Pluggin Versioning', function(){ var plugger; beforeEach(function(done){ plugger = new Plugger({ path: path.resolve(__dirname, 'plugins') }); done(); }); it('Provides version on all plugins', function(done){ plugger.load(['test1', 'test2'], function(errs, plugins){ assert(plugins, 'Got the plugins'); plugins.forEach(function(plugin){ assert(plugin.version, 'Plugin has a version'); assert(semver.valid(plugin.version), 'Version is a valid SemVer'); }); done(); }); }); }); describe('Loading plugins from folder', function(){ var plugger; beforeEach(function(done){ plugger = new Plugger({ path: path.resolve(__dirname, 'plugins') }); done(); }); it('Loads plugins from a folder', function(done){ plugger.load(function(errs, plugins){ assert(plugins, 'Loaded plugins'); assert(plugins.length>1, 'Loaded multiple plugins'); done(); }); }); it('Skips any plugins that error', function(done){ plugger.load(function(errs, plugins){ assert(errs && errs.length===1, '1 error for badplugin.js'); done(); }); }); }); });