fix: do not set path to plugin config defined as a Function or an Array

If a plugin hook was defined as a `Function` or an `Array` the `path` property would be set to the default value.
Even if this bug had no actual negative impact, it should be fixed so the code would perform as intended.
This commit is contained in:
Pierre Vanduynslager 2018-07-06 23:31:53 -04:00
parent 071dccea4b
commit f93eeb799b
2 changed files with 13 additions and 4 deletions

View File

@ -1,4 +1,4 @@
const {isArray, isObject, omit, castArray, isUndefined} = require('lodash');
const {isPlainObject, omit, castArray, isUndefined} = require('lodash');
const AggregateError = require('aggregate-error');
const getError = require('../get-error');
const PLUGINS_DEFINITIONS = require('../definitions/plugins');
@ -15,7 +15,7 @@ module.exports = (options, pluginsPath, logger) => {
pluginConfs = def;
} else {
// If an object is passed and the path is missing, set the default one for single plugins
if (isObject(options[pluginType]) && !options[pluginType].path && !isArray(def)) {
if (isPlainObject(options[pluginType]) && !options[pluginType].path && castArray(def).length === 1) {
options[pluginType].path = def;
}
if (config && !config.validator(options[pluginType])) {

View File

@ -116,11 +116,20 @@ test.serial('Export plugins loaded from the dependency of a shareable config fil
});
test('Use default when only options are passed for a single plugin', t => {
const plugins = getPlugins({generateNotes: {}, analyzeCommits: {}}, {}, t.context.logger);
const analyzeCommits = {};
const success = () => {};
const fail = [() => {}];
const plugins = getPlugins({analyzeCommits, success, fail}, {}, t.context.logger);
// Verify the module returns a function for each plugin
t.is(typeof plugins.generateNotes, 'function');
t.is(typeof plugins.analyzeCommits, 'function');
t.is(typeof plugins.success, 'function');
t.is(typeof plugins.fail, 'function');
// Verify only the plugins defined as an object with no `path` are set to the default value
t.falsy(success.path);
t.falsy(fail.path);
});
test('Merge global options with plugin options', async t => {