Skip to content

Commit

Permalink
Merge pull request #7221 from Mogztter/patch-1
Browse files Browse the repository at this point in the history
Display plugins versions
  • Loading branch information
jbudz committed May 31, 2016
2 parents 1cf2979 + 2c1d765 commit 00f4538
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 22 deletions.
67 changes: 47 additions & 20 deletions src/cli_plugin/list/__tests__/list.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,14 @@ import mkdirp from 'mkdirp';
import Logger from '../../lib/logger';
import list from '../list';
import { join } from 'path';
import { writeFileSync } from 'fs';
import { writeFileSync, appendFileSync } from 'fs';


function createPlugin(name, version, pluginBaseDir) {
const pluginDir = join(pluginBaseDir, name);
mkdirp.sync(pluginDir);
appendFileSync(join(pluginDir, 'package.json'), '{"version": "' + version + '"}');
}

describe('kibana cli', function () {

Expand Down Expand Up @@ -33,41 +40,61 @@ describe('kibana cli', function () {
});

it('list all of the folders in the plugin folder', function () {
mkdirp.sync(join(pluginDir, 'plugin1'));
mkdirp.sync(join(pluginDir, 'plugin2'));
mkdirp.sync(join(pluginDir, 'plugin3'));
createPlugin('plugin1', '5.0.0-alpha2', pluginDir);
createPlugin('plugin2', '3.2.1', pluginDir);
createPlugin('plugin3', '1.2.3', pluginDir);

list(settings, logger);

expect(logger.log.calledWith('plugin1')).to.be(true);
expect(logger.log.calledWith('plugin2')).to.be(true);
expect(logger.log.calledWith('plugin3')).to.be(true);
expect(logger.log.calledWith('plugin1@5.0.0-alpha2')).to.be(true);
expect(logger.log.calledWith('plugin2@3.2.1')).to.be(true);
expect(logger.log.calledWith('plugin3@1.2.3')).to.be(true);
});

it('ignore folders that start with a period', function () {
mkdirp.sync(join(pluginDir, '.foo'));
mkdirp.sync(join(pluginDir, 'plugin1'));
mkdirp.sync(join(pluginDir, 'plugin2'));
mkdirp.sync(join(pluginDir, 'plugin3'));
mkdirp.sync(join(pluginDir, '.bar'));
createPlugin('.foo', '1.0.0', pluginDir);
createPlugin('plugin1', '5.0.0-alpha2', pluginDir);
createPlugin('plugin2', '3.2.1', pluginDir);
createPlugin('plugin3', '1.2.3', pluginDir);
createPlugin('.bar', '1.0.0', pluginDir);

list(settings, logger);

expect(logger.log.calledWith('.foo')).to.be(false);
expect(logger.log.calledWith('.bar')).to.be(false);
expect(logger.log.calledWith('.foo@1.0.0')).to.be(false);
expect(logger.log.calledWith('.bar@1.0.0')).to.be(false);
});

it('list should only list folders', function () {
mkdirp.sync(join(pluginDir, 'plugin1'));
mkdirp.sync(join(pluginDir, 'plugin2'));
mkdirp.sync(join(pluginDir, 'plugin3'));
createPlugin('plugin1', '1.0.0', pluginDir);
createPlugin('plugin2', '1.0.0', pluginDir);
createPlugin('plugin3', '1.0.0', pluginDir);
writeFileSync(join(pluginDir, 'plugin4'), 'This is a file, and not a folder.');

list(settings, logger);

expect(logger.log.calledWith('plugin1')).to.be(true);
expect(logger.log.calledWith('plugin2')).to.be(true);
expect(logger.log.calledWith('plugin3')).to.be(true);
expect(logger.log.calledWith('plugin1@1.0.0')).to.be(true);
expect(logger.log.calledWith('plugin2@1.0.0')).to.be(true);
expect(logger.log.calledWith('plugin3@1.0.0')).to.be(true);
});

it('list should throw an exception if a plugin does not have a package.json', function () {
createPlugin('plugin1', '1.0.0', pluginDir);
mkdirp.sync(join(pluginDir, 'empty-plugin'));

expect(function () {
list(settings, logger);
}).to.throwError('Unable to read package.json file for plugin empty-plugin');
});

it('list should throw an exception if a plugin have an empty package.json', function () {
createPlugin('plugin1', '1.0.0', pluginDir);
const invalidPluginDir = join(pluginDir, 'invalid-plugin');
mkdirp.sync(invalidPluginDir);
appendFileSync(join(invalidPluginDir, 'package.json'), '');

expect(function () {
list(settings, logger);
}).to.throwError('Unable to read package.json file for plugin invalid-plugin');
});

});
Expand Down
10 changes: 8 additions & 2 deletions src/cli_plugin/list/list.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { statSync, readdirSync } from 'fs';
import { statSync, readdirSync, readFileSync } from 'fs';
import { join } from 'path';

export default function list(settings, logger) {
Expand All @@ -7,7 +7,13 @@ export default function list(settings, logger) {
const stat = statSync(join(settings.pluginDir, filename));

if (stat.isDirectory() && filename[0] !== '.') {
logger.log(filename);
try {
const packagePath = join(settings.pluginDir, filename, 'package.json');
const { version } = JSON.parse(readFileSync(packagePath, 'utf8'));
logger.log(filename + '@' + version);
} catch (e) {
throw new Error('Unable to read package.json file for plugin ' + filename);
}
}
});
logger.log(''); //intentional blank line for aesthetics
Expand Down

0 comments on commit 00f4538

Please sign in to comment.