cordova-check-plugins
Version:
A CLI tool to check for updates / manage updating Cordova plugins.
235 lines (190 loc) • 11.5 kB
JavaScript
/**********
* Modules
**********/
// Core
var path = require('path');
var fs = require('fs');
// helper
var fileHelper = require('./helper/file.js')();
var toolHelper = require('./helper/tool.js')();
var reporter = require('./helper/reporter.js');
//lib
var credentialsToObfuscate = [
process.env.GITHUB_PASSWORD,
process.env.GITHUB_ACCESS_TOKEN
];
var logger = require('../lib/logger.js')();
logger.setCredentialsToObfuscate(credentialsToObfuscate);
jasmine.DEFAULT_TIMEOUT_INTERVAL = 240000;
toolHelper.setStaticArgs(
' --nospinner'+
' --github-username="'+process.env.GITHUB_USERNAME+'"'+
' --github-password="'+process.env.GITHUB_PASSWORD+'"'+
' --obfuscate-credentials="'+credentialsToObfuscate.join(' ')+'"');
describe("A spec for updating plugins", function() {
beforeAll(function(done) {
fileHelper.resetPlatforms(done);
});
beforeEach(function(done) {
fileHelper.reset(done);
});
it("should save update changes to the config.xml when the '--nosave' CLI option is NOT supplied", function(done) {
fileHelper.addPlugin('cordova-plugin-file', function(err, stdout, stderr){
fileHelper.forceLocalPluginVersion('cordova-plugin-file', '1.0.0');
expect(fileHelper.readConfigXml().match('<plugin name="cordova-plugin-file"')).toBeFalsy();
toolHelper.run('--update=cordova-plugin-file', function(err, stdout, stderr, output){
expect(fileHelper.readConfigXml().match('<plugin name="cordova-plugin-file"')).toBeTruthy();
done();
});
});
});
it("should NOT save update changes to the config.xml when the '--nosave' CLI option is supplied", function(done) {
fileHelper.addPlugin('cordova-plugin-file', function(err, stdout, stderr){
fileHelper.forceLocalPluginVersion('cordova-plugin-file', '1.0.0');
expect(fileHelper.readConfigXml().match('<plugin name="cordova-plugin-file"')).toBeFalsy();
toolHelper.run('--update=cordova-plugin-file --nosave', function(err, stdout, stderr, output){
expect(fileHelper.readConfigXml().match('<plugin name="cordova-plugin-file"')).toBeFalsy();
done();
});
});
});
it("should NOT force the update of dependent plugins when the '--force' CLI option is NOT supplied", function(done) {
fileHelper.addPlugin('cordova-plugin-file-transfer', function(err, stdout, stderr){
fileHelper.forceLocalPluginVersion('cordova-plugin-file', '1.0.0');
toolHelper.run('--update=cordova-plugin-file', function(err, stdout, stderr, output){
expect(err).toBeFalsy();
expect(stdout).toContain("Error: The plugin 'cordova-plugin-file' is required by (cordova-plugin-file-transfer)");
expect(stdout).toContain("Failed to update all specified plugins");
done();
});
});
});
it("should force the update of dependent plugins when the '--force' CLI option is supplied", function(done) {
fileHelper.addPlugin('cordova-plugin-file-transfer', function(err, stdout, stderr){
fileHelper.forceLocalPluginVersion('cordova-plugin-file', '1.0.0');
toolHelper.run('--force --update=cordova-plugin-file', function(err, stdout, stderr, output){
expect(err).toBeFalsy();
expect(stdout).toContain("Updated 'cordova-plugin-file'");
expect(stdout).toContain("Successfully updated all specified plugins");
done();
});
});
});
it("should not update any outdated plugins when the '--update=none' CLI option is supplied", function(done) {
fileHelper.addPlugins([
'cordova.plugins.diagnostic',
'cordova-plugin-device'
], function(results){
fileHelper.forceLocalPluginVersion('cordova.plugins.diagnostic', '2.0.0');
fileHelper.forceLocalPluginVersion('cordova-plugin-device', '1.0.0');
toolHelper.run('--update=none', function(err, stdout, stderr, output){
expect(output.section.newerTarget['cordova.plugins.diagnostic']).toBeDefined();
expect(output.section.newerTarget['cordova-plugin-device']).toBeDefined();
fileHelper.listPlugins(function(plugins){
expect(plugins['cordova.plugins.diagnostic'].version === '2.0.0').toBeTruthy();
expect(plugins['cordova-plugin-device'].version === '1.0.0').toBeTruthy();
done();
});
});
});
});
it("should automatically update all outdated plugins when the '--update=auto' CLI option is supplied", function(done) {
fileHelper.addPlugins([
'cordova.plugins.diagnostic',
'cordova-plugin-device'
], function(results){
fileHelper.forceLocalPluginVersion('cordova.plugins.diagnostic', '2.0.0');
fileHelper.forceLocalPluginVersion('cordova-plugin-device', '1.0.0');
toolHelper.run('--update=auto', function(err, stdout, stderr, output){
expect(output.section.newerTarget['cordova.plugins.diagnostic']).toBeDefined();
expect(output.section.newerTarget['cordova-plugin-device']).toBeDefined();
fileHelper.listPlugins(function(plugins){
expect(plugins['cordova.plugins.diagnostic'].version === '2.0.0').toBeFalsy();
expect(stdout).toContain("Updated 'cordova.plugins.diagnostic' from 2.0.0 to "+plugins['cordova.plugins.diagnostic'].version);
expect(plugins['cordova-plugin-device'].version === '1.0.0').toBeFalsy();
expect(stdout).toContain("Updated 'cordova-plugin-device' from 1.0.0 to "+plugins['cordova-plugin-device'].version);
done();
});
});
});
});
it("should update the specified outdated plugin when the '--update=pluginId' CLI option is supplied", function(done) {
fileHelper.addPlugins([
'cordova.plugins.diagnostic',
'cordova-plugin-device'
], function(results){
fileHelper.forceLocalPluginVersion('cordova.plugins.diagnostic', '2.0.0');
fileHelper.forceLocalPluginVersion('cordova-plugin-device', '1.0.0');
toolHelper.run('--update=cordova.plugins.diagnostic', function(err, stdout, stderr, output){
expect(output.section.newerTarget['cordova.plugins.diagnostic']).toBeDefined();
expect(output.section.newerTarget['cordova-plugin-device']).toBeDefined();
fileHelper.listPlugins(function(plugins){
expect(plugins['cordova.plugins.diagnostic'].version === '2.0.0').toBeFalsy();
expect(stdout).toContain("Updated 'cordova.plugins.diagnostic' from 2.0.0 to "+plugins['cordova.plugins.diagnostic'].version);
expect(plugins['cordova-plugin-device'].version === '1.0.0').toBeTruthy();
done();
});
});
});
});
it("should update the specified outdated plugins when the '--update=\"pluginId_1 pluginId_2\"' CLI option is supplied", function(done) {
fileHelper.addPlugins([
'cordova.plugins.diagnostic',
'cordova-plugin-device',
'cordova-plugin-device-orientation'
], function(results){
fileHelper.forceLocalPluginVersion('cordova.plugins.diagnostic', '2.0.0');
fileHelper.forceLocalPluginVersion('cordova-plugin-device', '1.0.0');
fileHelper.forceLocalPluginVersion('cordova-plugin-device-orientation', '1.0.0');
toolHelper.run('--update="cordova.plugins.diagnostic cordova-plugin-device"', function(err, stdout, stderr, output){
expect(output.section.newerTarget['cordova.plugins.diagnostic']).toBeDefined();
expect(output.section.newerTarget['cordova-plugin-device']).toBeDefined();
expect(output.section.newerTarget['cordova-plugin-device-orientation']).toBeDefined();
fileHelper.listPlugins(function(plugins){
expect(plugins['cordova.plugins.diagnostic'].version === '2.0.0').toBeFalsy();
expect(stdout).toContain("Updated 'cordova.plugins.diagnostic' from 2.0.0 to "+plugins['cordova.plugins.diagnostic'].version);
expect(plugins['cordova-plugin-device'].version === '1.0.0').toBeFalsy();
expect(stdout).toContain("Updated 'cordova-plugin-device' from 1.0.0 to "+plugins['cordova-plugin-device'].version);
expect(plugins['cordova-plugin-device-orientation'].version === '1.0.0').toBeTruthy();
done();
});
});
});
});
it("should log a warning but continue when the '--update=\"pluginId_1 pluginId_2\"' CLI option is supplied, where pluginId_1 corresponds to a plugin which is not installed in the project", function(done) {
fileHelper.addPlugins([
'cordova.plugins.diagnostic'
], function(results){
fileHelper.forceLocalPluginVersion('cordova.plugins.diagnostic', '2.0.0');
toolHelper.run('--update="cordova-plugin-device cordova.plugins.diagnostic"', function(err, stdout, stderr, output){
expect(err).toBeFalsy();
expect(stdout).toContain("Cannot update plugin 'cordova-plugin-device' as it is not installed in the project");
expect(output.section.newerTarget['cordova.plugins.diagnostic']).toBeDefined();
fileHelper.listPlugins(function(plugins){
expect(plugins['cordova.plugins.diagnostic'].version === '2.0.0').toBeFalsy();
expect(stdout).toContain("Updated 'cordova.plugins.diagnostic' from 2.0.0 to "+plugins['cordova.plugins.diagnostic'].version);
done();
});
});
});
});
it("should log a warning but continue when the '--update=\"pluginId_1 pluginId_2\"' CLI option is supplied, where pluginId_1 corresponds to a plugin which is installed in the project but is not outdated", function(done) {
fileHelper.addPlugins([
'cordova.plugins.diagnostic',
'cordova-plugin-device'
], function(results){
fileHelper.forceLocalPluginVersion('cordova.plugins.diagnostic', '2.0.0');
toolHelper.run('--update="cordova-plugin-device cordova.plugins.diagnostic"', function(err, stdout, stderr, output){
expect(err).toBeFalsy();
expect(stdout).toContain("Cannot update plugin 'cordova-plugin-device' as no newer target version is available");
expect(output.section.newerTarget['cordova.plugins.diagnostic']).toBeDefined();
expect(output.section.upToDate['cordova-plugin-device']).toBeDefined();
fileHelper.listPlugins(function(plugins){
expect(plugins['cordova.plugins.diagnostic'].version === '2.0.0').toBeFalsy();
expect(stdout).toContain("Updated 'cordova.plugins.diagnostic' from 2.0.0 to "+plugins['cordova.plugins.diagnostic'].version);
done();
});
});
});
});
});