forked from mirrors/probot
92 lines
2.6 KiB
JavaScript
92 lines
2.6 KiB
JavaScript
/* eslint prefer-arrow-callback: off */
|
|
|
|
const expect = require('expect');
|
|
const pluginLoaderFactory = require('../lib/plugin');
|
|
|
|
const stubPluginPath = require.resolve('./fixtures/plugin/stub-plugin');
|
|
const basedir = process.cwd();
|
|
const nullLogger = {};
|
|
['trace', 'debug', 'info', 'warn', 'error', 'fatal'].forEach(level => {
|
|
nullLogger[level] = function () { };
|
|
});
|
|
|
|
describe('plugin loader', function () {
|
|
let probot;
|
|
let pluginLoader;
|
|
let autoloader;
|
|
let autoplugins;
|
|
let resolver;
|
|
|
|
beforeEach(function () {
|
|
probot = {
|
|
load: expect.createSpy(),
|
|
logger: nullLogger
|
|
};
|
|
|
|
autoplugins = {
|
|
probotPlugin: expect.createSpy()
|
|
};
|
|
|
|
autoloader = expect.createSpy().andReturn(autoplugins);
|
|
|
|
resolver = expect.createSpy().andReturn(stubPluginPath);
|
|
});
|
|
|
|
describe('factory', function () {
|
|
describe('when no robot provided', function () {
|
|
it('should throw a TypeError', function () {
|
|
expect(pluginLoaderFactory).toThrow(TypeError);
|
|
});
|
|
});
|
|
|
|
describe('when robot provided', function () {
|
|
it('should return an object', function () {
|
|
expect(pluginLoaderFactory(probot)).toBeA(Object);
|
|
});
|
|
});
|
|
|
|
describe('autoload()', function () {
|
|
beforeEach(() => {
|
|
pluginLoader = pluginLoaderFactory(probot, {autoloader});
|
|
});
|
|
|
|
it('should ask the autoloader for probot-related plugins', function () {
|
|
pluginLoader.autoload();
|
|
expect(autoloader).toHaveBeenCalledWith('probot-*');
|
|
});
|
|
|
|
it('should ask the robot to load the plugins', function () {
|
|
pluginLoader.autoload();
|
|
expect(probot.load).toHaveBeenCalledWith(autoplugins.probotPlugin);
|
|
});
|
|
});
|
|
|
|
describe('load()', function () {
|
|
beforeEach(() => {
|
|
pluginLoader = pluginLoaderFactory(probot, {resolver});
|
|
});
|
|
|
|
describe('when supplied no plugin names', function () {
|
|
it('should do nothing', function () {
|
|
pluginLoader.load();
|
|
expect(resolver).toNotHaveBeenCalled();
|
|
expect(probot.load).toNotHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe('when supplied plugin name(s)', function () {
|
|
it('should attempt to resolve plugins by name and basedir', function () {
|
|
pluginLoader.load(['foo', 'bar']);
|
|
expect(resolver).toHaveBeenCalledWith('foo', {basedir})
|
|
.toHaveBeenCalledWith('bar', {basedir});
|
|
});
|
|
|
|
it('should ask the robot to load a plugin at its resolved path', function () {
|
|
pluginLoader.load(['see-stub-for-resolved-path']);
|
|
expect(probot.load).toHaveBeenCalledWith(require(stubPluginPath));
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|