diff --git a/.eslintrc.yml b/.eslintrc.yml
index 026e063f..d1db9bc9 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -461,10 +461,10 @@ rules:
- always
operator-linebreak:
- error
- - before
+ - after
padded-blocks:
- error
- - classes: always
+ - never
quote-props:
- error
- as-needed
@@ -489,7 +489,9 @@ rules:
- error
space-before-function-paren:
- error
- - never
+ - anonymous: always
+ named: always
+ asyncArrow: never
space-in-parens:
- error
- never
diff --git a/lib/child-writer/index.js b/lib/child-writer/index.js
index d81b2c2f..c61d9c91 100644
--- a/lib/child-writer/index.js
+++ b/lib/child-writer/index.js
@@ -86,7 +86,6 @@ exports.write = (image, drive, options) => {
* terminateServer();
*/
const terminateServer = () => {
-
// Turns out we need to destroy all sockets for
// the server to actually close. Otherwise, it
// just stops receiving any further connections,
@@ -137,7 +136,6 @@ exports.write = (image, drive, options) => {
return robot.parseMessage(robot.buildMessage(robot.COMMAND.LOG, {
message
}));
-
});
if (_.isError(parsedMessage)) {
@@ -146,7 +144,6 @@ exports.write = (image, drive, options) => {
}
try {
-
// These are lighweight accessor methods for
// the properties of the parsed message
const messageCommand = robot.getCommand(parsedMessage);
@@ -158,7 +155,6 @@ exports.write = (image, drive, options) => {
if (messageCommand === robot.COMMAND.ERROR) {
emitError(robot.recomposeErrorMessage(parsedMessage));
} else if (messageCommand === robot.COMMAND.LOG) {
-
// If the message data is an object and it contains a
// message string then log the message string only.
if (_.isPlainObject(messageData) && _.isString(messageData.message)) {
@@ -166,11 +162,9 @@ exports.write = (image, drive, options) => {
} else {
console.log(messageData);
}
-
} else {
emitter.emit(messageCommand, messageData);
}
-
} catch (error) {
emitError(error);
}
@@ -194,7 +188,6 @@ exports.write = (image, drive, options) => {
// This function causes the `close` event to be emitted
child.kill();
-
});
child.on('error', emitError);
diff --git a/lib/child-writer/renderer-utils.js b/lib/child-writer/renderer-utils.js
index dfa1e56f..2c7a4174 100644
--- a/lib/child-writer/renderer-utils.js
+++ b/lib/child-writer/renderer-utils.js
@@ -47,5 +47,4 @@ exports.getApplicationEntryPoint = () => {
// from `/root`, therefore we pass an absolute path,
// in order to be on the safe side.
return path.join(CONSTANTS.PROJECT_ROOT, relativeEntryPoint);
-
};
diff --git a/lib/child-writer/writer-proxy.js b/lib/child-writer/writer-proxy.js
index c74a250d..d645eca8 100644
--- a/lib/child-writer/writer-proxy.js
+++ b/lib/child-writer/writer-proxy.js
@@ -64,14 +64,12 @@ const OPTIONS_INDEX_START = 2;
*/
const etcherArguments = process.argv.slice(OPTIONS_INDEX_START);
-return permissions.isElevated().then((elevated) => {
-
+permissions.isElevated().then((elevated) => {
if (!elevated) {
console.log('Attempting to elevate');
const commandArguments = _.attempt(() => {
if (os.platform() === 'linux' && process.env.APPIMAGE && process.env.APPDIR) {
-
// Translate the current arguments to point to the AppImage
// Relative paths are resolved from `/tmp/.mount_XXXXXX/usr`
const translatedArguments = _.chain(process.argv)
@@ -125,7 +123,6 @@ return permissions.isElevated().then((elevated) => {
ipc.connectTo(process.env.IPC_SERVER_ID, () => {
ipc.of[process.env.IPC_SERVER_ID].on('error', reject);
ipc.of[process.env.IPC_SERVER_ID].on('connect', () => {
-
const child = childProcess.spawn(executable, etcherArguments, {
env: {
@@ -160,7 +157,6 @@ return permissions.isElevated().then((elevated) => {
* })));
*/
const emitMessage = (data) => {
-
// Output from stdout/stderr coming from the CLI might be buffered,
// causing several progress lines to come up at once as single message.
// Trying to parse multiple JSON objects separated by new lines will
@@ -168,7 +164,6 @@ return permissions.isElevated().then((elevated) => {
_.each(utils.splitObjectLines(data.toString()), (object) => {
ipc.of[process.env.IPC_SERVER_ID].emit('message', object);
});
-
};
child.stdout.on('data', emitMessage);
diff --git a/lib/cli/etcher.js b/lib/cli/etcher.js
index fe694b17..aa0c6b0c 100644
--- a/lib/cli/etcher.js
+++ b/lib/cli/etcher.js
@@ -94,7 +94,6 @@ permissions.isElevated().then((elevated) => {
unmountOnSuccess: options.unmount,
validateWriteOnSuccess: options.check
}, (state) => {
-
if (robot.isEnabled(process.env)) {
robot.printMessage('progress', {
type: state.type,
@@ -105,7 +104,6 @@ permissions.isElevated().then((elevated) => {
} else {
progressBars[state.type].update(state);
}
-
}).then((results) => {
return {
imagePath,
@@ -115,7 +113,6 @@ permissions.isElevated().then((elevated) => {
});
});
}).then((results) => {
-
return Bluebird.try(() => {
if (robot.isEnabled(process.env)) {
return robot.printMessage('done', {
@@ -136,9 +133,7 @@ permissions.isElevated().then((elevated) => {
}).then(() => {
process.exit(EXIT_CODES.SUCCESS);
});
-
}).catch((error) => {
-
return Bluebird.try(() => {
if (robot.isEnabled(process.env)) {
return robot.printError(error);
@@ -153,5 +148,4 @@ permissions.isElevated().then((elevated) => {
process.exit(EXIT_CODES.GENERAL_ERROR);
});
-
});
diff --git a/lib/cli/writer.js b/lib/cli/writer.js
index f8a966bd..8d979838 100644
--- a/lib/cli/writer.js
+++ b/lib/cli/writer.js
@@ -65,7 +65,6 @@ const UNMOUNT_ON_SUCCESS_TIMEOUT_MS = 2000;
*/
exports.writeImage = (imagePath, drive, options, onProgress) => {
return Bluebird.try(() => {
-
// Unmounting a drive in Windows means we can't write to it anymore
if (os.platform() === 'win32') {
return Bluebird.resolve();
@@ -103,14 +102,12 @@ exports.writeImage = (imagePath, drive, options, onProgress) => {
writer.on('done', resolve);
});
}).tap(() => {
-
// Make sure the device stream file descriptor is closed
// before returning control the the caller. Not closing
// the file descriptor (and waiting for it) results in
// `EBUSY` errors when attempting to unmount the drive
// right afterwards in some Windows 7 systems.
return fs.closeAsync(driveFileDescriptor).then(() => {
-
if (!options.unmountOnSuccess) {
return Bluebird.resolve();
}
@@ -122,7 +119,6 @@ exports.writeImage = (imagePath, drive, options, onProgress) => {
return Bluebird.delay(UNMOUNT_ON_SUCCESS_TIMEOUT_MS)
.return(drive.device)
.then(mountutils.unmountDiskAsync);
-
});
});
});
diff --git a/lib/gui/app.js b/lib/gui/app.js
index f07547b6..d24a6c87 100644
--- a/lib/gui/app.js
+++ b/lib/gui/app.js
@@ -184,7 +184,6 @@ app.run(() => {
app.run(($timeout) => {
driveScanner.on('drives', (drives) => {
-
// Safely trigger a digest cycle.
// In some cases, AngularJS doesn't acknowledge that the
// available drives list has changed, and incorrectly
@@ -195,7 +194,6 @@ app.run(($timeout) => {
});
driveScanner.on('error', (error) => {
-
// Stop the drive scanning loop in case of errors,
// otherwise we risk presenting the same error over
// and over again to the user, while also heavily
@@ -241,7 +239,6 @@ app.run(($window) => {
// This circumvents the 'beforeunload' event unlike
// electron.remote.app.quit() which does not.
electron.remote.process.exit(EXIT_CODES.SUCCESS);
-
}
analytics.logEvent('Close rejected while flashing');
@@ -252,7 +249,6 @@ app.run(($window) => {
app.run(($rootScope) => {
$rootScope.$on('$stateChangeSuccess', (event, toState, toParams, fromState) => {
-
// Ignore first navigation
if (!fromState.name) {
return;
@@ -278,8 +274,7 @@ app.config(($provide) => {
});
});
-app.controller('HeaderController', function(OSOpenExternalService) {
-
+app.controller('HeaderController', function (OSOpenExternalService) {
/**
* @summary Open help page
* @function
@@ -297,10 +292,9 @@ app.controller('HeaderController', function(OSOpenExternalService) {
const supportUrl = selectionState.getImageSupportUrl() || DEFAULT_SUPPORT_URL;
OSOpenExternalService.open(supportUrl);
};
-
});
-app.controller('StateController', function($rootScope, $scope) {
+app.controller('StateController', function ($rootScope, $scope) {
const unregisterStateChange = $rootScope.$on('$stateChangeSuccess', (event, toState, toParams, fromState) => {
this.previousName = fromState.name;
this.currentName = toState.name;
@@ -335,5 +329,4 @@ app.controller('StateController', function($rootScope, $scope) {
* }
*/
this.currentName = null;
-
});
diff --git a/lib/gui/components/drive-selector/controllers/drive-selector.js b/lib/gui/components/drive-selector/controllers/drive-selector.js
index 27a7dc15..16e9f5ff 100644
--- a/lib/gui/components/drive-selector/controllers/drive-selector.js
+++ b/lib/gui/components/drive-selector/controllers/drive-selector.js
@@ -24,12 +24,11 @@ const analytics = require('../../../modules/analytics');
const availableDrives = require('../../../../shared/models/available-drives');
const selectionState = require('../../../../shared/models/selection-state');
-module.exports = function(
+module.exports = function (
$q,
$uibModalInstance,
WarningModalService
) {
-
/**
* @summary The drive selector state
* @type {Object}
@@ -108,7 +107,6 @@ module.exports = function(
* });
*/
this.toggleDrive = (drive) => {
-
analytics.logEvent('Toggle drive', {
drive,
previouslySelected: selectionState.isCurrentDrive(drive.device)
@@ -118,7 +116,6 @@ module.exports = function(
if (canChangeDriveSelectionState) {
selectionState.toggleSetDrive(drive.device);
}
-
});
};
@@ -141,7 +138,6 @@ module.exports = function(
} else {
$uibModalInstance.close(selectedDrive);
}
-
};
/**
@@ -208,7 +204,6 @@ module.exports = function(
areArgsInTuple = true;
if (angular.equals(state, oldState)) {
-
// Use the previously memoized state for this argument
state = oldState;
}
@@ -224,7 +219,6 @@ module.exports = function(
// Add the state associated with these args to be memoized
if (!areArgsInTuple) {
previousTuples.push([ restArgs, state ]);
-
}
return state;
@@ -257,5 +251,4 @@ module.exports = function(
this.getDriveStatuses = this.memoizeImmutableListReference((drive) => {
return this.constraints.getDriveImageCompatibilityStatuses(drive, this.state.getImage());
});
-
};
diff --git a/lib/gui/components/drive-selector/services/drive-selector.js b/lib/gui/components/drive-selector/services/drive-selector.js
index 2009a36d..2856d8d3 100644
--- a/lib/gui/components/drive-selector/services/drive-selector.js
+++ b/lib/gui/components/drive-selector/services/drive-selector.js
@@ -16,8 +16,7 @@
'use strict';
-module.exports = function(ModalService, $q) {
-
+module.exports = function (ModalService, $q) {
let modal = null;
/**
@@ -55,7 +54,6 @@ module.exports = function(ModalService, $q) {
* DriveSelectorService.close();
*/
this.close = () => {
-
if (modal) {
return modal.close();
}
@@ -63,7 +61,5 @@ module.exports = function(ModalService, $q) {
// Resolve `undefined` if the modal
// was already closed for consistency
return $q.resolve();
-
};
-
};
diff --git a/lib/gui/components/flash-error-modal/services/flash-error-modal.js b/lib/gui/components/flash-error-modal/services/flash-error-modal.js
index 40914b16..0b4c24c9 100644
--- a/lib/gui/components/flash-error-modal/services/flash-error-modal.js
+++ b/lib/gui/components/flash-error-modal/services/flash-error-modal.js
@@ -20,8 +20,7 @@ const flashState = require('../../../../shared/models/flash-state');
const selectionState = require('../../../../shared/models/selection-state');
const analytics = require('../../../modules/analytics');
-module.exports = function(WarningModalService) {
-
+module.exports = function (WarningModalService) {
/**
* @summary Open the flash error modal
* @function
@@ -47,5 +46,4 @@ module.exports = function(WarningModalService) {
}
});
};
-
};
diff --git a/lib/gui/components/modal/services/modal.js b/lib/gui/components/modal/services/modal.js
index 393ef2a4..237bf87b 100644
--- a/lib/gui/components/modal/services/modal.js
+++ b/lib/gui/components/modal/services/modal.js
@@ -19,8 +19,7 @@
const _ = require('lodash');
const analytics = require('../../../modules/analytics');
-module.exports = function($uibModal, $q) {
-
+module.exports = function ($uibModal, $q) {
/**
* @summary Open a modal
* @function
@@ -40,7 +39,6 @@ module.exports = function($uibModal, $q) {
* });
*/
this.open = (options = {}) => {
-
_.defaults(options, {
size: 'sm'
});
@@ -67,7 +65,6 @@ module.exports = function($uibModal, $q) {
resolve(value);
}).catch((error) => {
-
// Bootstrap doesn't 'resolve' these but cancels the dialog
if (error === 'escape key press' || error === 'backdrop click') {
analytics.logEvent('Modal rejected', {
@@ -86,5 +83,4 @@ module.exports = function($uibModal, $q) {
})
};
};
-
};
diff --git a/lib/gui/components/safe-webview.js b/lib/gui/components/safe-webview.js
index 569e7adf..0cef0333 100644
--- a/lib/gui/components/safe-webview.js
+++ b/lib/gui/components/safe-webview.js
@@ -78,18 +78,17 @@ const API_VERSION = 1;
*
*/
class SafeWebview extends react.PureComponent {
-
/**
* @param {Object} props - React element properties
*/
- constructor(props) {
+ constructor (props) {
super(props);
this.state = {
shouldShow: true
};
- const url = new URL(props.src);
+ const url = new window.URL(props.src);
// We set the version GET parameters here.
url.searchParams.set(ETCHER_VERSION_PARAM, packageJSON.version);
@@ -119,7 +118,7 @@ class SafeWebview extends react.PureComponent {
/**
* @returns {react.Element}
*/
- render() {
+ render () {
return react.createElement('webview', {
ref: 'webview',
style: {
@@ -133,8 +132,7 @@ class SafeWebview extends react.PureComponent {
/**
* @summary Add the Webview events
*/
- componentDidMount() {
-
+ componentDidMount () {
// Events React is unaware of have to be handled manually
_.map(this.eventTuples, (tuple) => {
this.refs.webview.addEventListener(...tuple);
@@ -151,8 +149,7 @@ class SafeWebview extends react.PureComponent {
/**
* @summary Remove the Webview events
*/
- componentWillUnmount() {
-
+ componentWillUnmount () {
// Events that React is unaware of have to be handled manually
_.map(this.eventTuples, (tuple) => {
this.refs.webview.removeEventListener(...tuple);
@@ -163,15 +160,13 @@ class SafeWebview extends react.PureComponent {
* @summary Refresh the webview if we are navigating away from the success page
* @param {Object} nextProps - upcoming properties
*/
- componentWillReceiveProps(nextProps) {
+ componentWillReceiveProps (nextProps) {
if (nextProps.refreshNow && !this.props.refreshNow) {
-
// Reload the page if it hasn't changed, otherwise reset the source URL,
// because reload interferes with 'src' setting, resetting the 'src' attribute
// to what it was was just prior.
if (this.refs.webview.src === this.entryHref) {
this.refs.webview.reload();
-
} else {
this.refs.webview.src = this.entryHref;
}
@@ -185,7 +180,7 @@ class SafeWebview extends react.PureComponent {
/**
* @summary Set the element state to hidden
*/
- didFailLoad() {
+ didFailLoad () {
this.setState({
shouldShow: false
});
@@ -195,7 +190,7 @@ class SafeWebview extends react.PureComponent {
* @summary Set the element state depending on the HTTP response code
* @param {Event} event - Event object
*/
- didGetResponseDetails(event) {
+ didGetResponseDetails (event) {
const HTTP_OK = 200;
const HTTP_ERR = 400;
@@ -208,8 +203,8 @@ class SafeWebview extends react.PureComponent {
* @summary Open link in browser if it's opened as a 'foreground-tab'
* @param {Event} event - event object
*/
- static newWindow(event) {
- const url = new URL(event.url);
+ static newWindow (event) {
+ const url = new window.URL(event.url);
if (_.every([
url.protocol === 'http:' || url.protocol === 'https:',
@@ -236,7 +231,7 @@ class SafeWebview extends react.PureComponent {
* data: 'Hello, Mars!'
* }));
*/
- static consoleMessage(event) {
+ static consoleMessage (event) {
if (!robot.isMessage(event.message)) {
return;
}
@@ -245,12 +240,10 @@ class SafeWebview extends react.PureComponent {
if (robot.getCommand(message) === robot.COMMAND.LOG) {
analytics.logEvent(robot.getData(message));
-
} else if (robot.getCommand(message) === robot.COMMAND.ERROR) {
analytics.logException(robot.getData(message));
}
}
-
}
SafeWebview.propTypes = {
diff --git a/lib/gui/components/svg-icon.js b/lib/gui/components/svg-icon.js
index 304f3a6f..f2e1c64a 100644
--- a/lib/gui/components/svg-icon.js
+++ b/lib/gui/components/svg-icon.js
@@ -41,13 +41,11 @@ const DEFAULT_SIZE = '40px';
* @public
*/
class SVGIcon extends react.Component {
-
/**
* @summary Render the SVG
* @returns {react.Element}
*/
- render() {
-
+ render () {
// This means the path to the icon should be
// relative to *this directory*.
// TODO: There might be a way to compute the path
@@ -58,7 +56,6 @@ class SVGIcon extends react.Component {
if (_.startsWith(this.props.path, '<')) {
contents = this.props.path;
-
} else {
contents = fs.readFileSync(imagePath, {
encoding: 'utf8'
@@ -68,7 +65,7 @@ class SVGIcon extends react.Component {
const width = this.props.width || DEFAULT_SIZE;
const height = this.props.height || DEFAULT_SIZE;
- const parser = new DOMParser();
+ const parser = new window.DOMParser();
const doc = parser.parseFromString(contents, 'image/svg+xml');
const svg = doc.querySelector('svg');
@@ -94,12 +91,10 @@ class SVGIcon extends react.Component {
* @summary Cause a re-render due to changed element properties
* @param {Object} nextProps - the new properties
*/
- componentWillReceiveProps(nextProps) {
-
+ componentWillReceiveProps (nextProps) {
// This will update the element if the properties change
this.setState(nextProps);
}
-
}
SVGIcon.propTypes = {
diff --git a/lib/gui/components/tooltip-modal/controllers/tooltip-modal.js b/lib/gui/components/tooltip-modal/controllers/tooltip-modal.js
index b66e00e2..fe8b9e2d 100644
--- a/lib/gui/components/tooltip-modal/controllers/tooltip-modal.js
+++ b/lib/gui/components/tooltip-modal/controllers/tooltip-modal.js
@@ -16,8 +16,7 @@
'use strict';
-module.exports = function($uibModalInstance, tooltipData) {
-
+module.exports = function ($uibModalInstance, tooltipData) {
/**
* @summary Tooltip data
* @type {Object}
@@ -36,5 +35,4 @@ module.exports = function($uibModalInstance, tooltipData) {
this.closeModal = () => {
$uibModalInstance.dismiss();
};
-
};
diff --git a/lib/gui/components/tooltip-modal/services/tooltip-modal.js b/lib/gui/components/tooltip-modal/services/tooltip-modal.js
index 915cfece..71125e2e 100644
--- a/lib/gui/components/tooltip-modal/services/tooltip-modal.js
+++ b/lib/gui/components/tooltip-modal/services/tooltip-modal.js
@@ -18,8 +18,7 @@
const _ = require('lodash');
-module.exports = function(ModalService) {
-
+module.exports = function (ModalService) {
/**
* @summary Open the tooltip modal
* @function
@@ -46,5 +45,4 @@ module.exports = function(ModalService) {
}
}).result;
};
-
};
diff --git a/lib/gui/components/update-notifier.js b/lib/gui/components/update-notifier.js
index 6e70c2e8..3314e769 100644
--- a/lib/gui/components/update-notifier.js
+++ b/lib/gui/components/update-notifier.js
@@ -125,7 +125,6 @@ exports.notify = (version, options = {}) => {
});
});
}).tap((results) => {
-
// Only update the last slept update timestamp if the
// user ticked the "Remind me again in ..." checkbox,
// but didn't agree.
diff --git a/lib/gui/components/warning-modal/controllers/warning-modal.js b/lib/gui/components/warning-modal/controllers/warning-modal.js
index f76baf8f..4eb116e3 100644
--- a/lib/gui/components/warning-modal/controllers/warning-modal.js
+++ b/lib/gui/components/warning-modal/controllers/warning-modal.js
@@ -16,8 +16,7 @@
'use strict';
-module.exports = function($uibModalInstance, options) {
-
+module.exports = function ($uibModalInstance, options) {
/**
* @summary Modal options
* @type {Object}
@@ -48,5 +47,4 @@ module.exports = function($uibModalInstance, options) {
this.accept = () => {
$uibModalInstance.close(true);
};
-
};
diff --git a/lib/gui/components/warning-modal/services/warning-modal.js b/lib/gui/components/warning-modal/services/warning-modal.js
index e2b0c2f5..e74dc506 100644
--- a/lib/gui/components/warning-modal/services/warning-modal.js
+++ b/lib/gui/components/warning-modal/services/warning-modal.js
@@ -18,8 +18,7 @@
const _ = require('lodash');
-module.exports = function($sce, ModalService) {
-
+module.exports = function ($sce, ModalService) {
/**
* @summary Display the warning modal
* @function
@@ -49,5 +48,4 @@ module.exports = function($sce, ModalService) {
}
}).result;
};
-
};
diff --git a/lib/gui/etcher.js b/lib/gui/etcher.js
index 8ffe5d27..d217cb4b 100644
--- a/lib/gui/etcher.js
+++ b/lib/gui/etcher.js
@@ -39,7 +39,6 @@ electron.app.on('before-quit', () => {
});
electron.app.on('ready', () => {
-
// No menu bar
electron.Menu.setApplicationMenu(null);
@@ -83,7 +82,6 @@ electron.app.on('ready', () => {
// See: https://github.com/electron/electron/issues/8841
electron.globalShortcut.register('CmdOrCtrl+R', _.noop);
electron.globalShortcut.register('F5', _.noop);
-
});
mainWindow.on('blur', () => {
@@ -109,4 +107,3 @@ electron.app.on('ready', () => {
mainWindow.loadURL(`file://${path.join(__dirname, 'index.html')}`);
});
-
diff --git a/lib/gui/models/local-settings.js b/lib/gui/models/local-settings.js
index b7ec94b6..9ecc2bc3 100644
--- a/lib/gui/models/local-settings.js
+++ b/lib/gui/models/local-settings.js
@@ -40,7 +40,7 @@ const LOCAL_STORAGE_SETTINGS_KEY = 'etcher-settings';
*/
exports.readAll = () => {
return Bluebird.try(() => {
- return JSON.parse(localStorage.getItem(LOCAL_STORAGE_SETTINGS_KEY)) || {};
+ return JSON.parse(window.localStorage.getItem(LOCAL_STORAGE_SETTINGS_KEY)) || {};
});
};
@@ -62,7 +62,7 @@ exports.readAll = () => {
exports.writeAll = (settings) => {
const INDENTATION_SPACES = 2;
return Bluebird.try(() => {
- localStorage.setItem(LOCAL_STORAGE_SETTINGS_KEY, JSON.stringify(settings, null, INDENTATION_SPACES));
+ window.localStorage.setItem(LOCAL_STORAGE_SETTINGS_KEY, JSON.stringify(settings, null, INDENTATION_SPACES));
});
};
@@ -83,6 +83,6 @@ exports.writeAll = (settings) => {
*/
exports.clear = () => {
return Bluebird.try(() => {
- localStorage.removeItem(LOCAL_STORAGE_SETTINGS_KEY);
+ window.localStorage.removeItem(LOCAL_STORAGE_SETTINGS_KEY);
});
};
diff --git a/lib/gui/models/settings.js b/lib/gui/models/settings.js
index aefff758..ab004814 100644
--- a/lib/gui/models/settings.js
+++ b/lib/gui/models/settings.js
@@ -56,7 +56,6 @@ const setSettingsObject = (settings) => {
data: settings
});
}).then(() => {
-
// Revert the application state if writing the data
// to the local machine was not successful
return localSettings.writeAll(settings).catch((error) => {
@@ -67,7 +66,6 @@ const setSettingsObject = (settings) => {
throw error;
});
-
});
};
diff --git a/lib/gui/modules/image-writer.js b/lib/gui/modules/image-writer.js
index 25c32f1f..cc5d2f23 100644
--- a/lib/gui/modules/image-writer.js
+++ b/lib/gui/modules/image-writer.js
@@ -32,8 +32,7 @@ const analytics = require('../modules/analytics');
const MODULE_NAME = 'Etcher.Modules.ImageWriter';
const imageWriter = angular.module(MODULE_NAME, []);
-imageWriter.service('ImageWriterService', function($q, $rootScope) {
-
+imageWriter.service('ImageWriterService', function ($q, $rootScope) {
/**
* @summary Perform write operation
* @function
@@ -105,7 +104,6 @@ imageWriter.service('ImageWriterService', function($q, $rootScope) {
analytics.logEvent('Flash', analyticsData);
return this.performWrite(image, drive, (state) => {
-
// Bring this value to the world of angular.
// If we don't trigger a digest loop,
// `.getFlashState()` will not return
@@ -113,7 +111,6 @@ imageWriter.service('ImageWriterService', function($q, $rootScope) {
$rootScope.$apply(() => {
flashState.setProgressState(state);
});
-
}).then(flashState.unsetFlashingFlag).then(() => {
if (flashState.wasLastFlashCancelled()) {
analytics.logEvent('Elevation cancelled', analyticsData);
@@ -144,7 +141,6 @@ imageWriter.service('ImageWriterService', function($q, $rootScope) {
windowProgress.clear();
});
};
-
});
module.exports = MODULE_NAME;
diff --git a/lib/gui/os/dialog.js b/lib/gui/os/dialog.js
index d922b95a..2bd9ae0e 100644
--- a/lib/gui/os/dialog.js
+++ b/lib/gui/os/dialog.js
@@ -68,12 +68,10 @@ exports.selectImage = () => {
}
]
}, (files) => {
-
// `_.first` is smart enough to not throw and return `undefined`
// if we pass it an `undefined` value (e.g: when the selection
// dialog was cancelled).
return resolve(_.first(files));
-
});
});
};
diff --git a/lib/gui/os/notification.js b/lib/gui/os/notification.js
index ad97fdcc..51fdbdd3 100644
--- a/lib/gui/os/notification.js
+++ b/lib/gui/os/notification.js
@@ -41,11 +41,10 @@ const electron = require('electron');
* });
*/
exports.send = (title, options) => {
-
// `app.dock` is only defined in OS X
if (electron.remote.app.dock) {
electron.remote.app.dock.bounce();
}
- return new Notification(title, options);
+ return new window.Notification(title, options);
};
diff --git a/lib/gui/os/open-external/directives/open-external.js b/lib/gui/os/open-external/directives/open-external.js
index b6f4a23a..4a6b5ac5 100644
--- a/lib/gui/os/open-external/directives/open-external.js
+++ b/lib/gui/os/open-external/directives/open-external.js
@@ -36,7 +36,6 @@ module.exports = (OSOpenExternalService) => {
restrict: 'A',
scope: false,
link: (scope, element, attributes) => {
-
// This directive might be added to elements
// other than buttons.
element.css('cursor', 'pointer');
diff --git a/lib/gui/os/open-external/open-external.js b/lib/gui/os/open-external/open-external.js
index 023882c3..01247b46 100644
--- a/lib/gui/os/open-external/open-external.js
+++ b/lib/gui/os/open-external/open-external.js
@@ -32,9 +32,10 @@ OSOpenExternal.run((OSOpenExternalService) => {
document.addEventListener('click', (event) => {
const target = event.target;
if (target.tagName === 'A' && angular.isDefined(target.href)) {
-
- // Electron interprets relative URLs as being relative to the current loaded URL (with `webContents.loadURL`) and expands
- // them to the corresponding absolute URL. If it's a `file://` URL, we don't want it opened in an external browser.
+ // Electron interprets relative URLs as being relative to the
+ // current loaded URL (with `webContents.loadURL`) and expands
+ // them to the corresponding absolute URL. If it's a `file://`
+ // URL, we don't want it opened in an external browser.
if (url.parse(target.href).protocol !== 'file:') {
OSOpenExternalService.open(target.href);
}
diff --git a/lib/gui/os/open-external/services/open-external.js b/lib/gui/os/open-external/services/open-external.js
index 9e552dac..7be058c6 100644
--- a/lib/gui/os/open-external/services/open-external.js
+++ b/lib/gui/os/open-external/services/open-external.js
@@ -19,8 +19,7 @@
const electron = require('electron');
const analytics = require('../../../modules/analytics');
-module.exports = function() {
-
+module.exports = function () {
/**
* @summary Open an external resource
* @function
@@ -40,5 +39,4 @@ module.exports = function() {
electron.shell.openExternal(url);
}
};
-
};
diff --git a/lib/gui/os/window-progress.js b/lib/gui/os/window-progress.js
index 318548b2..6b98ddf9 100644
--- a/lib/gui/os/window-progress.js
+++ b/lib/gui/os/window-progress.js
@@ -55,7 +55,6 @@ exports.set = (percentage) => {
* windowProgress.clear();
*/
exports.clear = () => {
-
// Passing 0 or null/undefined doesn't work.
const ELECTRON_PROGRESS_BAR_RESET_VALUE = -1;
diff --git a/lib/gui/pages/finish/controllers/finish.js b/lib/gui/pages/finish/controllers/finish.js
index bf0b759e..66fb390d 100644
--- a/lib/gui/pages/finish/controllers/finish.js
+++ b/lib/gui/pages/finish/controllers/finish.js
@@ -21,8 +21,7 @@ const flashState = require('../../../../shared/models/flash-state');
const selectionState = require('../../../../shared/models/selection-state');
const analytics = require('../../../modules/analytics');
-module.exports = function($state) {
-
+module.exports = function ($state) {
/**
* @summary Settings model
* @type {Object}
@@ -53,5 +52,4 @@ module.exports = function($state) {
analytics.logEvent('Restart', options);
$state.go('main');
};
-
};
diff --git a/lib/gui/pages/main/controllers/drive-selection.js b/lib/gui/pages/main/controllers/drive-selection.js
index 6410f70b..ebc15cd1 100644
--- a/lib/gui/pages/main/controllers/drive-selection.js
+++ b/lib/gui/pages/main/controllers/drive-selection.js
@@ -21,8 +21,7 @@ const selectionState = require('../../../../shared/models/selection-state');
const analytics = require('../../../modules/analytics');
const exceptionReporter = require('../../../modules/exception-reporter');
-module.exports = function(DriveSelectorService) {
-
+module.exports = function (DriveSelectorService) {
/**
* @summary Open drive selector
* @function
@@ -58,5 +57,4 @@ module.exports = function(DriveSelectorService) {
this.openDriveSelector();
analytics.logEvent('Reselect drive');
};
-
};
diff --git a/lib/gui/pages/main/controllers/flash.js b/lib/gui/pages/main/controllers/flash.js
index f1aa1752..efc3c781 100644
--- a/lib/gui/pages/main/controllers/flash.js
+++ b/lib/gui/pages/main/controllers/flash.js
@@ -25,12 +25,11 @@ const notification = require('../../../os/notification');
const exceptionReporter = require('../../../modules/exception-reporter');
const path = require('path');
-module.exports = function(
+module.exports = function (
$state,
ImageWriterService,
FlashErrorModalService
) {
-
/**
* @summary Flash image to a drive
* @function
@@ -98,9 +97,7 @@ module.exports = function(
FlashErrorModalService.show(messages.error.genericFlashError());
exceptionReporter.report(error);
}
-
- })
- .finally(() => {
+ }).finally(() => {
driveScanner.start();
});
};
@@ -135,5 +132,4 @@ module.exports = function(
return `${currentFlashState.percentage}%`;
};
-
};
diff --git a/lib/gui/pages/main/controllers/image-selection.js b/lib/gui/pages/main/controllers/image-selection.js
index 5ff89c07..af0ce843 100644
--- a/lib/gui/pages/main/controllers/image-selection.js
+++ b/lib/gui/pages/main/controllers/image-selection.js
@@ -28,11 +28,10 @@ const selectionState = require('../../../../shared/models/selection-state');
const osDialog = require('../../../os/dialog');
const exceptionReporter = require('../../../modules/exception-reporter');
-module.exports = function(
+module.exports = function (
$timeout,
WarningModalService
) {
-
/**
* @summary Main supported extensions
* @constant
@@ -103,9 +102,7 @@ module.exports = function(
}
return false;
-
}).then((shouldChange) => {
-
if (shouldChange) {
return this.reselectImage();
}
@@ -164,7 +161,6 @@ module.exports = function(
analytics.logEvent('Open image selector');
osDialog.selectImage().then((imagePath) => {
-
// Avoid analytics and selection state changes
// if no file was resolved from the dialog.
if (!imagePath) {
@@ -209,5 +205,4 @@ module.exports = function(
return path.basename(selectionState.getImagePath());
};
-
};
diff --git a/lib/gui/pages/main/controllers/main.js b/lib/gui/pages/main/controllers/main.js
index dd64af66..654472c2 100644
--- a/lib/gui/pages/main/controllers/main.js
+++ b/lib/gui/pages/main/controllers/main.js
@@ -23,11 +23,10 @@ const exceptionReporter = require('../../../modules/exception-reporter');
const availableDrives = require('../../../../shared/models/available-drives');
const selectionState = require('../../../../shared/models/selection-state');
-module.exports = function(
+module.exports = function (
TooltipModalService,
OSOpenExternalService
) {
-
// Expose several modules to the template for convenience
this.selection = selectionState;
this.drives = availableDrives;
@@ -87,5 +86,4 @@ module.exports = function(
message: selectionState.getImagePath()
}).catch(exceptionReporter.report);
};
-
};
diff --git a/lib/gui/pages/settings/controllers/settings.js b/lib/gui/pages/settings/controllers/settings.js
index dd019d11..699740ca 100644
--- a/lib/gui/pages/settings/controllers/settings.js
+++ b/lib/gui/pages/settings/controllers/settings.js
@@ -22,8 +22,7 @@ const settings = require('../../../models/settings');
const analytics = require('../../../modules/analytics');
const exceptionReporter = require('../../../modules/exception-reporter');
-module.exports = function(WarningModalService) {
-
+module.exports = function (WarningModalService) {
/**
* @summary Client platform
* @type {String}
@@ -82,7 +81,6 @@ module.exports = function(WarningModalService) {
* });
*/
this.toggle = (setting, options) => {
-
const value = this.currentData[setting];
const dangerous = !_.isUndefined(options);
@@ -106,5 +104,4 @@ module.exports = function(WarningModalService) {
}
}).catch(exceptionReporter.report);
};
-
};
diff --git a/lib/gui/utils/byte-size/filter.js b/lib/gui/utils/byte-size/filter.js
index df162bca..313d7760 100644
--- a/lib/gui/utils/byte-size/filter.js
+++ b/lib/gui/utils/byte-size/filter.js
@@ -19,7 +19,6 @@
const units = require('../../../shared/units');
module.exports = () => {
-
/**
* @summary Convert bytes to the closest unit
* @function
@@ -32,5 +31,4 @@ module.exports = () => {
* {{ 7801405440 | closestUnit }}
*/
return units.bytesToClosestUnit;
-
};
diff --git a/lib/gui/utils/manifest-bind/services/manifest-bind.js b/lib/gui/utils/manifest-bind/services/manifest-bind.js
index 75a8f1db..28d94f79 100644
--- a/lib/gui/utils/manifest-bind/services/manifest-bind.js
+++ b/lib/gui/utils/manifest-bind/services/manifest-bind.js
@@ -19,8 +19,7 @@
const _ = require('lodash');
const packageJSON = require('../../../../../package.json');
-module.exports = function() {
-
+module.exports = function () {
/**
* @summary Get a package.json property
* @function
@@ -35,5 +34,4 @@ module.exports = function() {
this.get = (attribute) => {
return _.get(packageJSON, attribute);
};
-
};
diff --git a/lib/image-stream/archive.js b/lib/image-stream/archive.js
index 07bad766..18b34129 100644
--- a/lib/image-stream/archive.js
+++ b/lib/image-stream/archive.js
@@ -172,7 +172,6 @@ const extractArchiveMetadata = (archive, basePath, options) => {
*/
exports.extractImage = (archive, hooks) => {
return hooks.getEntries(archive).then((entries) => {
-
const imageEntries = _.filter(entries, (entry) => {
return _.includes(IMAGE_EXTENSIONS, fileExtensions.getLastFileExtension(entry.name));
});
diff --git a/lib/image-stream/handlers.js b/lib/image-stream/handlers.js
index b4529bd5..8623d129 100644
--- a/lib/image-stream/handlers.js
+++ b/lib/image-stream/handlers.js
@@ -186,9 +186,9 @@ module.exports = {
if (/invalid footer/i.test(error.message)) {
throw errors.createUserError({
title: 'Invalid image',
- description: `There was an error reading "${path.basename(imagePath)}". `
- + 'The image does not appear to be a valid Apple Disk Image (dmg), or may have the wrong filename extension.\n\n'
- + `Error: ${error.description || error.message}`
+ description: `There was an error reading "${path.basename(imagePath)}". ` +
+ 'The image does not appear to be a valid Apple Disk Image (dmg), or may have the wrong filename extension.\n\n' +
+ `Error: ${error.description || error.message}`
});
}
throw error;
diff --git a/lib/image-stream/parse-partitions.js b/lib/image-stream/parse-partitions.js
index 98c8a072..3da11649 100644
--- a/lib/image-stream/parse-partitions.js
+++ b/lib/image-stream/parse-partitions.js
@@ -66,7 +66,6 @@ const MAX_BLOCK_SIZE = 4096;
* }
*/
const detectGPT = (buffer) => {
-
let blockSize = INITIAL_BLOCK_SIZE;
let gpt = null;
@@ -83,7 +82,6 @@ const detectGPT = (buffer) => {
}
return null;
-
};
/**
@@ -102,7 +100,6 @@ const detectGPT = (buffer) => {
* }
*/
const parsePartitionTables = (image, buffer) => {
-
const mbr = _.attempt(MBR.parse, buffer);
let gpt = null;
@@ -138,7 +135,6 @@ const parsePartitionTables = (image, buffer) => {
};
});
}
-
};
/**
@@ -163,7 +159,6 @@ const parsePartitionTables = (image, buffer) => {
*/
module.exports = (image) => {
return new Bluebird((resolve, reject) => {
-
const chunks = [];
let length = INITIAL_LENGTH;
let destroyed = false;
@@ -184,7 +179,6 @@ module.exports = (image) => {
// Once we've read enough bytes, terminate the stream
if (length >= MAX_STREAM_BYTES && !destroyed) {
-
// Prefer close() over destroy(), as some streams
// from dependencies exhibit quirky behavior when destroyed
if (image.stream.close) {
@@ -202,10 +196,7 @@ module.exports = (image) => {
// Parse the MBR, GPT and partitions from the obtained buffer
parsePartitionTables(image, Buffer.concat(chunks));
resolve(image);
-
}
});
-
});
-
};
diff --git a/lib/shared/drive-constraints.js b/lib/shared/drive-constraints.js
index 2efa9dcf..048d990a 100644
--- a/lib/shared/drive-constraints.js
+++ b/lib/shared/drive-constraints.js
@@ -145,7 +145,6 @@ exports.isDriveLargeEnough = (drive, image) => {
const driveSize = _.get(drive, [ 'size' ], UNKNOWN_SIZE);
if (_.get(image, [ 'size', 'final', 'estimation' ])) {
-
// If the drive size is smaller than the original image size, and
// the final image size is just an estimation, then we stop right
// here, based on the assumption that the final size will never
@@ -159,7 +158,6 @@ exports.isDriveLargeEnough = (drive, image) => {
// the drive has ran out of space, instead of prohibiting the flash
// at all, when the estimation may be wrong.
return true;
-
}
return driveSize >= _.get(image, [
@@ -349,21 +347,17 @@ exports.getDriveImageCompatibilityStatuses = (drive, image) => {
type: exports.COMPATIBILITY_STATUS_TYPES.ERROR,
message: exports.COMPATIBILITY_STATUS_MESSAGES.CONTAINS_IMAGE
});
-
} else if (exports.isDriveLocked(drive)) {
statusList.push({
type: exports.COMPATIBILITY_STATUS_TYPES.ERROR,
message: exports.COMPATIBILITY_STATUS_MESSAGES.LOCKED
});
-
} else if (!_.isNil(drive) && !exports.isDriveLargeEnough(drive, image)) {
statusList.push({
type: exports.COMPATIBILITY_STATUS_TYPES.ERROR,
message: exports.COMPATIBILITY_STATUS_MESSAGES.TOO_SMALL
});
-
} else {
-
if (exports.isSystemDrive(drive)) {
statusList.push({
type: exports.COMPATIBILITY_STATUS_TYPES.WARNING,
diff --git a/lib/shared/errors.js b/lib/shared/errors.js
index 4467bc4e..87a1fee3 100644
--- a/lib/shared/errors.js
+++ b/lib/shared/errors.js
@@ -326,7 +326,6 @@ exports.isUserError = (error) => {
* > 'foo'
*/
exports.toJSON = (error) => {
-
// Handle string error objects to be on the safe side
const isErrorLike = _.isError(error) || _.isPlainObject(error);
const errorObject = isErrorLike ? error : new Error(error);
diff --git a/lib/shared/models/flash-state.js b/lib/shared/models/flash-state.js
index 0fd6d157..630c5ce8 100644
--- a/lib/shared/models/flash-state.js
+++ b/lib/shared/models/flash-state.js
@@ -123,11 +123,9 @@ exports.setProgressState = (state) => {
speed: _.attempt(() => {
if (_.isNumber(state.speed) && !_.isNaN(state.speed)) {
-
// Preserve only two decimal places
const PRECISION = 2;
return _.round(units.bytesToMegabytes(state.speed), PRECISION);
-
}
return null;
diff --git a/lib/shared/permissions.js b/lib/shared/permissions.js
index adb54374..8c47c48f 100644
--- a/lib/shared/permissions.js
+++ b/lib/shared/permissions.js
@@ -57,7 +57,6 @@ const UNIX_SUPERUSER_USER_ID = 0;
*/
exports.isElevated = () => {
if (os.platform() === 'win32') {
-
// `fltmc` is available on WinPE, XP, Vista, 7, 8, and 10
// Works even when the "Server" service is disabled
// See http://stackoverflow.com/a/28268802
@@ -66,7 +65,6 @@ exports.isElevated = () => {
.catch({
code: os.constants.errno.EPERM
}, _.constant(false));
-
}
return Bluebird.resolve(process.geteuid() === UNIX_SUPERUSER_USER_ID);
@@ -108,11 +106,9 @@ exports.getEnvironmentCommandPrefix = (environment) => {
});
if (isWindows) {
-
// This is a trick to make the binary afterwards catch
// the environment variables set just previously.
return _.concat(argv, [ 'call' ]);
-
}
return _.concat([ 'env' ], argv);
@@ -197,7 +193,6 @@ exports.elevateCommand = (command, options) => {
// There doesn't seem to be a better way to handle these errors, so
// for now, we should make sure we double check if the error messages
// have changed every time we upgrade `sudo-prompt`.
-
}).catch((error) => {
return _.includes(error.message, 'is not in the sudoers file');
}, () => {
@@ -219,5 +214,4 @@ exports.elevateCommand = (command, options) => {
description: 'Please install a polkit authentication agent for your desktop environment of choice to continue'
});
});
-
};
diff --git a/lib/shared/s3-packages.js b/lib/shared/s3-packages.js
index 3b36e0a5..14676093 100644
--- a/lib/shared/s3-packages.js
+++ b/lib/shared/s3-packages.js
@@ -187,7 +187,6 @@ exports.getRemoteVersions = _.memoize((bucketUrl) => {
* }
*/
const semverSatisfies = (version, range) => {
-
// The `semver` module refuses to apply ranges to prerelease versions
// As a workaround, we drop the prerelease tags, if any, apply the range
// on that, and keep using the prerelease tag from then on.
@@ -218,7 +217,6 @@ const semverSatisfies = (version, range) => {
* });
*/
exports.getLatestVersion = (releaseType, options = {}) => {
-
// For manual testing purposes
const ETCHER_FAKE_S3_LATEST_VERSION = process.env.ETCHER_FAKE_S3_LATEST_VERSION;
if (!_.isNil(ETCHER_FAKE_S3_LATEST_VERSION)) {
@@ -235,11 +233,8 @@ exports.getLatestVersion = (releaseType, options = {}) => {
}
/* eslint-disable lodash/prefer-lodash-method */
-
return exports.getRemoteVersions(bucketUrl).filter((version) => {
-
/* eslint-enable lodash/prefer-lodash-method */
-
if (_.some([
// This check allows us to ignore snapshot builds in production
diff --git a/lib/shared/store.js b/lib/shared/store.js
index e22c7a2e..30865b08 100644
--- a/lib/shared/store.js
+++ b/lib/shared/store.js
@@ -88,7 +88,6 @@ const ACTIONS = _.fromPairs(_.map([
* const drive = findDrive(state, '/dev/disk2');
*/
const findDrive = (state, device) => {
-
/* eslint-disable lodash/prefer-lodash-method */
return state.get('availableDrives').find((drive) => {
@@ -96,7 +95,6 @@ const findDrive = (state, device) => {
});
/* eslint-enable lodash/prefer-lodash-method */
-
};
/**
@@ -115,7 +113,6 @@ const findDrive = (state, device) => {
*/
const storeReducer = (state = DEFAULT_STATE, action) => {
switch (action.type) {
-
case ACTIONS.SET_AVAILABLE_DRIVES: {
if (!action.data) {
throw errors.createError({
@@ -134,7 +131,6 @@ const storeReducer = (state = DEFAULT_STATE, action) => {
const AUTOSELECT_DRIVE_COUNT = 1;
const numberOfDrives = action.data.length;
if (numberOfDrives === AUTOSELECT_DRIVE_COUNT) {
-
const drive = _.first(action.data);
// Even if there's no image selected, we need to call several
@@ -155,7 +151,6 @@ const storeReducer = (state = DEFAULT_STATE, action) => {
data: drive.device
});
}
-
}
const selectedDevice = newState.getIn([ 'selection', 'drive' ]);
@@ -482,7 +477,6 @@ const storeReducer = (state = DEFAULT_STATE, action) => {
default: {
return state;
}
-
}
};
diff --git a/lib/start.js b/lib/start.js
index f909b0f2..d2873fda 100644
--- a/lib/start.js
+++ b/lib/start.js
@@ -32,7 +32,6 @@ process.env.DEBUG = '*';
// using `child_process.fork()`.
if (process.env.ELECTRON_RUN_AS_NODE || process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE) {
require('./cli/etcher');
-
} else {
require('./gui/etcher');
}
diff --git a/scripts/build/docker/compile-template.js b/scripts/build/docker/compile-template.js
index 988bc798..f954b3c5 100644
--- a/scripts/build/docker/compile-template.js
+++ b/scripts/build/docker/compile-template.js
@@ -42,4 +42,3 @@ _.each([
const filename = path.join(currentDirectory, `Dockerfile-${options.architecture}`);
fs.writeFileSync(filename, result);
});
-
diff --git a/scripts/clean-shrinkwrap.js b/scripts/clean-shrinkwrap.js
index 473f6d1c..8d0b82cd 100644
--- a/scripts/clean-shrinkwrap.js
+++ b/scripts/clean-shrinkwrap.js
@@ -113,11 +113,9 @@ const getShrinkwrapDependencyManifest = (shrinkwrapPath) => {
.value();
try {
-
// For example
// ./node_modules/drivelist/node_modules/lodash/package.json
return require(`.${path.sep}${manifestPath}`);
-
} catch (error) {
if (error.code === 'MODULE_NOT_FOUND') {
return null;
diff --git a/scripts/html-lint.js b/scripts/html-lint.js
index df8ebbb3..52a396f8 100644
--- a/scripts/html-lint.js
+++ b/scripts/html-lint.js
@@ -47,7 +47,6 @@ angularValidate.validate(
}
).then((result) => {
_.each(result.failed, (failure) => {
-
// The module has a typo in the "numbers" property
console.error(chalk.red(`${failure.numerrs} errors at ${path.relative(PROJECT_ROOT, failure.filepath)}`));
@@ -77,9 +76,7 @@ angularValidate.validate(
setTimeout(() => {
process.exit(EXIT_CODES.GENERAL_ERROR);
}, EXIT_TIMEOUT_MS);
-
}
-
}, (error) => {
console.error(error);
process.exit(EXIT_CODES.GENERAL_ERROR);
diff --git a/tests/child-writer/cli.spec.js b/tests/child-writer/cli.spec.js
index 353430b6..f3d07141 100644
--- a/tests/child-writer/cli.spec.js
+++ b/tests/child-writer/cli.spec.js
@@ -19,31 +19,27 @@
const m = require('mochainon');
const cli = require('../../lib/child-writer/cli');
-describe('ChildWriter CLI', function() {
-
- describe('.getBooleanArgumentForm()', function() {
-
- it('should prepend --no if the value is false and option is long', function() {
+describe('ChildWriter CLI', function () {
+ describe('.getBooleanArgumentForm()', function () {
+ it('should prepend --no if the value is false and option is long', function () {
m.chai.expect(cli.getBooleanArgumentForm('foo', false)).to.equal('--no-foo');
});
- it('should prepend -- if the value is true and option is long', function() {
+ it('should prepend -- if the value is true and option is long', function () {
m.chai.expect(cli.getBooleanArgumentForm('foo', true)).to.equal('--foo');
});
- it('should prepend --no if the value is false and option is short', function() {
+ it('should prepend --no if the value is false and option is short', function () {
m.chai.expect(cli.getBooleanArgumentForm('x', false)).to.equal('--no-x');
});
- it('should prepend - if the value is true and option is short', function() {
+ it('should prepend - if the value is true and option is short', function () {
m.chai.expect(cli.getBooleanArgumentForm('x', true)).to.equal('-x');
});
-
});
- describe('.getArguments()', function() {
-
- it('should return a list of arguments given validate = false, unmount = false', function() {
+ describe('.getArguments()', function () {
+ it('should return a list of arguments given validate = false, unmount = false', function () {
m.chai.expect(cli.getArguments({
image: 'path/to/image.img',
device: '/dev/disk2',
@@ -60,7 +56,7 @@ describe('ChildWriter CLI', function() {
]);
});
- it('should return a list of arguments given validate = false, unmount = true', function() {
+ it('should return a list of arguments given validate = false, unmount = true', function () {
m.chai.expect(cli.getArguments({
image: 'path/to/image.img',
device: '/dev/disk2',
@@ -77,7 +73,7 @@ describe('ChildWriter CLI', function() {
]);
});
- it('should return a list of arguments given validate = true, unmount = false', function() {
+ it('should return a list of arguments given validate = true, unmount = false', function () {
m.chai.expect(cli.getArguments({
image: 'path/to/image.img',
device: '/dev/disk2',
@@ -94,7 +90,7 @@ describe('ChildWriter CLI', function() {
]);
});
- it('should return a list of arguments given validate = true, unmount = true', function() {
+ it('should return a list of arguments given validate = true, unmount = true', function () {
m.chai.expect(cli.getArguments({
image: 'path/to/image.img',
device: '/dev/disk2',
@@ -110,7 +106,5 @@ describe('ChildWriter CLI', function() {
'--check'
]);
});
-
});
-
});
diff --git a/tests/child-writer/utils.spec.js b/tests/child-writer/utils.spec.js
index 6bc94e72..b2a0302f 100644
--- a/tests/child-writer/utils.spec.js
+++ b/tests/child-writer/utils.spec.js
@@ -19,11 +19,9 @@
const m = require('mochainon');
const utils = require('../../lib/child-writer/utils');
-describe('ChildWriter Utils', function() {
-
- describe('.splitObjectLines()', function() {
-
- it('should split multiple object lines', function() {
+describe('ChildWriter Utils', function () {
+ describe('.splitObjectLines()', function () {
+ it('should split multiple object lines', function () {
const input = '{"id":"foo"}\n{"id":"bar"}\n{"id":"baz"}';
m.chai.expect(utils.splitObjectLines(input)).to.deep.equal([
'{"id":"foo"}',
@@ -32,7 +30,7 @@ describe('ChildWriter Utils', function() {
]);
});
- it('should ignore spaces in between', function() {
+ it('should ignore spaces in between', function () {
const input = '{"id":"foo"} \n {"id":"bar"}\n {"id":"baz"}';
m.chai.expect(utils.splitObjectLines(input)).to.deep.equal([
'{"id":"foo"}',
@@ -41,7 +39,7 @@ describe('ChildWriter Utils', function() {
]);
});
- it('should ignore multiple new lines', function() {
+ it('should ignore multiple new lines', function () {
const input = '{"id":"foo"}\n\n\n\n{"id":"bar"}\n\n{"id":"baz"}';
m.chai.expect(utils.splitObjectLines(input)).to.deep.equal([
'{"id":"foo"}',
@@ -50,7 +48,7 @@ describe('ChildWriter Utils', function() {
]);
});
- it('should ignore new lines inside properties', function() {
+ it('should ignore new lines inside properties', function () {
const input = '{"id":"foo\nbar"}\n{"id":"\nhello\n"}';
m.chai.expect(utils.splitObjectLines(input)).to.deep.equal([
'{"id":"foo\nbar"}',
@@ -58,7 +56,7 @@ describe('ChildWriter Utils', function() {
]);
});
- it('should handle carriage returns', function() {
+ it('should handle carriage returns', function () {
const input = '{"id":"foo"}\r\n{"id":"bar"}\r\n{"id":"baz"}';
m.chai.expect(utils.splitObjectLines(input)).to.deep.equal([
'{"id":"foo"}',
@@ -67,7 +65,7 @@ describe('ChildWriter Utils', function() {
]);
});
- it('should ignore multiple carriage returns', function() {
+ it('should ignore multiple carriage returns', function () {
const input = '{"id":"foo"}\r\n\r\n{"id":"bar"}\r\n\r\n\r\n{"id":"baz"}';
m.chai.expect(utils.splitObjectLines(input)).to.deep.equal([
'{"id":"foo"}',
@@ -75,7 +73,5 @@ describe('ChildWriter Utils', function() {
'{"id":"baz"}'
]);
});
-
});
-
});
diff --git a/tests/gui/components/drive-selector.spec.js b/tests/gui/components/drive-selector.spec.js
index f5aa9547..7e411314 100644
--- a/tests/gui/components/drive-selector.spec.js
+++ b/tests/gui/components/drive-selector.spec.js
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2017 resin.io
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use strict';
const _ = require('lodash');
@@ -5,14 +21,12 @@ const m = require('mochainon');
const angular = require('angular');
require('angular-mocks');
-describe('Browser: DriveSelector', function() {
-
+describe('Browser: DriveSelector', function () {
beforeEach(angular.mock.module(
require('../../../lib/gui/components/drive-selector/drive-selector')
));
- describe('DriveSelectorController', function() {
-
+ describe('DriveSelectorController', function () {
let $controller;
let $rootScope;
let $q;
@@ -21,7 +35,7 @@ describe('Browser: DriveSelector', function() {
let controller;
- beforeEach(angular.mock.inject(function(
+ beforeEach(angular.mock.inject(function (
_$controller_,
_$rootScope_,
_$q_,
@@ -43,14 +57,13 @@ describe('Browser: DriveSelector', function() {
});
});
- describe('.memoizeImmutableListReference()', function() {
-
- it('constant true should return memoized true', function() {
+ describe('.memoizeImmutableListReference()', function () {
+ it('constant true should return memoized true', function () {
const memoizedConstTrue = controller.memoizeImmutableListReference(_.constant(true));
m.chai.expect(memoizedConstTrue()).to.be.true;
});
- it('should reflect state changes', function() {
+ it('should reflect state changes', function () {
let stateA = false;
const memoizedStateA = controller.memoizeImmutableListReference(() => {
return stateA;
@@ -63,14 +76,14 @@ describe('Browser: DriveSelector', function() {
m.chai.expect(memoizedStateA()).to.be.true;
});
- it('should reflect different arguments', function() {
+ it('should reflect different arguments', function () {
const memoizedParameter = controller.memoizeImmutableListReference(_.identity);
m.chai.expect(memoizedParameter(false)).to.be.false;
m.chai.expect(memoizedParameter(true)).to.be.true;
});
- it('should handle equal angular objects with different hashes', function() {
+ it('should handle equal angular objects with different hashes', function () {
const memoizedParameter = controller.memoizeImmutableListReference(_.identity);
const angularObjectA = {
$$hashKey: 1,
@@ -84,9 +97,6 @@ describe('Browser: DriveSelector', function() {
m.chai.expect(memoizedParameter(angularObjectA)).to.equal(angularObjectA);
m.chai.expect(memoizedParameter(angularObjectB)).to.equal(angularObjectA);
});
-
});
-
});
-
});
diff --git a/tests/gui/components/svg-icon.spec.js b/tests/gui/components/svg-icon.spec.js
index 1c2a2db0..601ef16f 100644
--- a/tests/gui/components/svg-icon.spec.js
+++ b/tests/gui/components/svg-icon.spec.js
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2017 resin.io
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use strict';
const m = require('mochainon');
@@ -7,24 +23,21 @@ const path = require('path');
const angular = require('angular');
require('angular-mocks');
-describe('Browser: SVGIcon', function() {
-
+describe('Browser: SVGIcon', function () {
beforeEach(angular.mock.module(
require('../../../lib/gui/components/svg-icon')
));
- describe('svgIcon', function() {
-
+ describe('svgIcon', function () {
let $compile;
let $rootScope;
- beforeEach(angular.mock.inject(function(_$compile_, _$rootScope_) {
+ beforeEach(angular.mock.inject(function (_$compile_, _$rootScope_) {
$compile = _$compile_;
$rootScope = _$rootScope_;
-
}));
- it('should inline the svg contents in the element', function() {
+ it('should inline the svg contents in the element', function () {
const icon = '../../../lib/gui/assets/etcher.svg';
let iconContents = _.split(fs.readFileSync(path.join(__dirname, '../../../lib/gui/assets/etcher.svg'), {
encoding: 'utf8'
@@ -49,7 +62,7 @@ describe('Browser: SVGIcon', function() {
m.chai.expect(compiledDoc.outerHTML).to.equal(originalDoc.outerHTML);
});
- it('should accept an SVG in the path attribute', function() {
+ it('should accept an SVG in the path attribute', function () {
const iconContents = '';
const img = `
`;
$rootScope.iconContents = iconContents;
@@ -59,7 +72,7 @@ describe('Browser: SVGIcon', function() {
m.chai.expect(element.children().html()).to.equal(img);
});
- it('should default the size to 40x40 pixels', function() {
+ it('should default the size to 40x40 pixels', function () {
const icon = '../../../lib/gui/assets/etcher.svg';
const element = $compile(`Resin.io`)($rootScope);
$rootScope.$digest();
@@ -67,7 +80,7 @@ describe('Browser: SVGIcon', function() {
m.chai.expect(element.children().css('height')).to.equal('40px');
});
- it('should be able to set a custom width', function() {
+ it('should be able to set a custom width', function () {
const icon = '../../../lib/gui/assets/etcher.svg';
const element = $compile(`Resin.io`)($rootScope);
$rootScope.$digest();
@@ -75,14 +88,12 @@ describe('Browser: SVGIcon', function() {
m.chai.expect(element.children().css('height')).to.equal('40px');
});
- it('should be able to set a custom height', function() {
+ it('should be able to set a custom height', function () {
const icon = '../../../lib/gui/assets/etcher.svg';
const element = $compile(`Resin.io`)($rootScope);
$rootScope.$digest();
m.chai.expect(element.children().css('width')).to.equal('40px');
m.chai.expect(element.children().css('height')).to.equal('20px');
});
-
});
-
});
diff --git a/tests/gui/components/update-notifier.spec.js b/tests/gui/components/update-notifier.spec.js
index 2125ff48..f8a56050 100644
--- a/tests/gui/components/update-notifier.spec.js
+++ b/tests/gui/components/update-notifier.spec.js
@@ -21,22 +21,18 @@ const _ = require('lodash');
const units = require('../../../lib/shared/units');
const updateNotifier = require('../../../lib/gui/components/update-notifier');
-describe('Browser: updateNotifier', function() {
-
- describe('.UPDATE_NOTIFIER_SLEEP_DAYS', function() {
-
- it('should be an integer', function() {
+describe('Browser: updateNotifier', function () {
+ describe('.UPDATE_NOTIFIER_SLEEP_DAYS', function () {
+ it('should be an integer', function () {
m.chai.expect(_.isInteger(updateNotifier.UPDATE_NOTIFIER_SLEEP_DAYS)).to.be.true;
});
- it('should be greater than 0', function() {
+ it('should be greater than 0', function () {
m.chai.expect(updateNotifier.UPDATE_NOTIFIER_SLEEP_DAYS > 0).to.be.true;
});
-
});
- describe('.shouldCheckForUpdates()', function() {
-
+ describe('.shouldCheckForUpdates()', function () {
const UPDATE_NOTIFIER_SLEEP_MS = units.daysToMilliseconds(updateNotifier.UPDATE_NOTIFIER_SLEEP_DAYS);
_.each([
@@ -441,18 +437,14 @@ describe('Browser: updateNotifier', function() {
}
], (testCase) => {
-
it(_.join([
`should return ${testCase.expected} if`,
`lastSleptUpdateNotifier=${testCase.options.lastSleptUpdateNotifier},`,
`lastSleptUpdateNotifierVersion=${testCase.options.lastSleptUpdateNotifierVersion}, and`,
`currentVersion=${testCase.options.currentVersion}`
- ], ' '), function() {
+ ], ' '), function () {
m.chai.expect(updateNotifier.shouldCheckForUpdates(testCase.options)).to.equal(testCase.expected);
});
-
});
-
});
-
});
diff --git a/tests/gui/models/settings.spec.js b/tests/gui/models/settings.spec.js
index c36fdd0e..c8641680 100644
--- a/tests/gui/models/settings.spec.js
+++ b/tests/gui/models/settings.spec.js
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2017 resin.io
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use strict';
const m = require('mochainon');
@@ -7,15 +23,14 @@ const store = require('../../../lib/shared/store');
const settings = require('../../../lib/gui/models/settings');
const localSettings = require('../../../lib/gui/models/local-settings');
-describe('Browser: settings', function() {
-
- beforeEach(function() {
+describe('Browser: settings', function () {
+ beforeEach(function () {
return settings.reset();
});
const DEFAULT_SETTINGS = store.Defaults.get('settings').toJS();
- it('should be able to set and read values', function() {
+ it('should be able to set and read values', function () {
m.chai.expect(settings.get('foo')).to.be.undefined;
return settings.set('foo', true).then(() => {
m.chai.expect(settings.get('foo')).to.be.true;
@@ -25,9 +40,8 @@ describe('Browser: settings', function() {
});
});
- describe('.reset()', function() {
-
- it('should reset the settings to their default values', function() {
+ describe('.reset()', function () {
+ it('should reset the settings to their default values', function () {
m.chai.expect(settings.getAll()).to.deep.equal(DEFAULT_SETTINGS);
return settings.set('foo', 1234).then(() => {
m.chai.expect(settings.getAll()).to.not.deep.equal(DEFAULT_SETTINGS);
@@ -37,7 +51,7 @@ describe('Browser: settings', function() {
});
});
- it('should reset the local settings to their default values', function() {
+ it('should reset the local settings to their default values', function () {
return settings.set('foo', 1234).then(localSettings.readAll).then((data) => {
m.chai.expect(data).to.not.deep.equal(DEFAULT_SETTINGS);
return settings.reset();
@@ -46,25 +60,21 @@ describe('Browser: settings', function() {
});
});
- describe('given the local settings are cleared', function() {
-
- beforeEach(function() {
+ describe('given the local settings are cleared', function () {
+ beforeEach(function () {
return localSettings.clear();
});
- it('should set the local settings to their default values', function() {
+ it('should set the local settings to their default values', function () {
return settings.reset().then(localSettings.readAll).then((data) => {
m.chai.expect(data).to.deep.equal(DEFAULT_SETTINGS);
});
});
-
});
-
});
- describe('.assign()', function() {
-
- it('should throw if no settings', function(done) {
+ describe('.assign()', function () {
+ it('should throw if no settings', function (done) {
settings.assign().asCallback((error) => {
m.chai.expect(error).to.be.an.instanceof(Error);
m.chai.expect(error.message).to.equal('Missing settings');
@@ -72,7 +82,7 @@ describe('Browser: settings', function() {
});
});
- it('should throw if setting an array', function(done) {
+ it('should throw if setting an array', function (done) {
settings.assign({
foo: 'bar',
bar: [ 1, 2, 3 ]
@@ -83,7 +93,7 @@ describe('Browser: settings', function() {
});
});
- it('should not override all settings', function() {
+ it('should not override all settings', function () {
return settings.assign({
foo: 'bar',
bar: 'baz'
@@ -95,7 +105,7 @@ describe('Browser: settings', function() {
});
});
- it('should not store invalid settings to the local machine', function() {
+ it('should not store invalid settings to the local machine', function () {
return localSettings.readAll().then((data) => {
m.chai.expect(data.foo).to.be.undefined;
@@ -113,7 +123,7 @@ describe('Browser: settings', function() {
});
});
- it('should store the settings to the local machine', function() {
+ it('should store the settings to the local machine', function () {
return localSettings.readAll().then((data) => {
m.chai.expect(data.foo).to.be.undefined;
m.chai.expect(data.bar).to.be.undefined;
@@ -128,7 +138,7 @@ describe('Browser: settings', function() {
});
});
- it('should not change the application state if storing to the local machine results in an error', function(done) {
+ it('should not change the application state if storing to the local machine results in an error', function (done) {
settings.set('foo', 'bar').then(() => {
m.chai.expect(settings.get('foo')).to.equal('bar');
@@ -146,12 +156,10 @@ describe('Browser: settings', function() {
});
}).catch(done);
});
-
});
- describe('.load()', function() {
-
- it('should extend the application state with the local settings content', function() {
+ describe('.load()', function () {
+ it('should extend the application state with the local settings content', function () {
const object = {
foo: 'bar'
};
@@ -166,25 +174,23 @@ describe('Browser: settings', function() {
});
});
- it('should keep the application state intact if there are no local settings', function() {
+ it('should keep the application state intact if there are no local settings', function () {
m.chai.expect(settings.getAll()).to.deep.equal(DEFAULT_SETTINGS);
return localSettings.clear().then(settings.load).then(() => {
m.chai.expect(settings.getAll()).to.deep.equal(DEFAULT_SETTINGS);
});
});
-
});
- describe('.set()', function() {
-
- it('should set an unknown key', function() {
+ describe('.set()', function () {
+ it('should set an unknown key', function () {
m.chai.expect(settings.get('foobar')).to.be.undefined;
return settings.set('foobar', true).then(() => {
m.chai.expect(settings.get('foobar')).to.be.true;
});
});
- it('should reject if no key', function(done) {
+ it('should reject if no key', function (done) {
settings.set(null, true).asCallback((error) => {
m.chai.expect(error).to.be.an.instanceof(Error);
m.chai.expect(error.message).to.equal('Missing setting key');
@@ -192,7 +198,7 @@ describe('Browser: settings', function() {
});
});
- it('should throw if key is not a string', function(done) {
+ it('should throw if key is not a string', function (done) {
settings.set(1234, true).asCallback((error) => {
m.chai.expect(error).to.be.an.instanceof(Error);
m.chai.expect(error.message).to.equal('Invalid setting key: 1234');
@@ -200,7 +206,7 @@ describe('Browser: settings', function() {
});
});
- it('should throw if setting an object', function(done) {
+ it('should throw if setting an object', function (done) {
settings.set('foo', {
setting: 1
}).asCallback((error) => {
@@ -210,7 +216,7 @@ describe('Browser: settings', function() {
});
});
- it('should throw if setting an array', function(done) {
+ it('should throw if setting an array', function (done) {
settings.set('foo', [ 1, 2, 3 ]).asCallback((error) => {
m.chai.expect(error).to.be.an.instanceof(Error);
m.chai.expect(error.message).to.equal('Invalid setting value: 1,2,3 for foo');
@@ -218,7 +224,7 @@ describe('Browser: settings', function() {
});
});
- it('should set the key to undefined if no value', function() {
+ it('should set the key to undefined if no value', function () {
return settings.set('foo', 'bar').then(() => {
m.chai.expect(settings.get('foo')).to.equal('bar');
return settings.set('foo');
@@ -227,7 +233,7 @@ describe('Browser: settings', function() {
});
});
- it('should store the setting to the local machine', function() {
+ it('should store the setting to the local machine', function () {
return localSettings.readAll().then((data) => {
m.chai.expect(data.foo).to.be.undefined;
return settings.set('foo', 'bar');
@@ -236,7 +242,7 @@ describe('Browser: settings', function() {
});
});
- it('should not store invalid settings to the local machine', function() {
+ it('should not store invalid settings to the local machine', function () {
return localSettings.readAll().then((data) => {
m.chai.expect(data.foo).to.be.undefined;
@@ -252,7 +258,7 @@ describe('Browser: settings', function() {
});
});
- it('should not change the application state if storing to the local machine results in an error', function(done) {
+ it('should not change the application state if storing to the local machine results in an error', function (done) {
settings.set('foo', 'bar').then(() => {
m.chai.expect(settings.get('foo')).to.equal('bar');
@@ -268,15 +274,11 @@ describe('Browser: settings', function() {
});
}).catch(done);
});
-
});
- describe('.getAll()', function() {
-
- it('should initial return all default values', function() {
+ describe('.getAll()', function () {
+ it('should initial return all default values', function () {
m.chai.expect(settings.getAll()).to.deep.equal(DEFAULT_SETTINGS);
});
-
});
-
});
diff --git a/tests/gui/modules/drive-scanner.spec.js b/tests/gui/modules/drive-scanner.spec.js
index ee42b304..b01600e5 100644
--- a/tests/gui/modules/drive-scanner.spec.js
+++ b/tests/gui/modules/drive-scanner.spec.js
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2017 resin.io
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use strict';
const m = require('mochainon');
@@ -5,21 +21,19 @@ const os = require('os');
const drivelist = require('drivelist');
const driveScanner = require('../../../lib/gui/modules/drive-scanner');
-describe('Browser: driveScanner', function() {
-
- describe('given no available drives', function() {
-
- beforeEach(function() {
+describe('Browser: driveScanner', function () {
+ describe('given no available drives', function () {
+ beforeEach(function () {
this.drivelistStub = m.sinon.stub(drivelist, 'list');
this.drivelistStub.yields(null, []);
});
- afterEach(function() {
+ afterEach(function () {
this.drivelistStub.restore();
});
- it('should emit an empty array', function(done) {
- driveScanner.once('drives', function(drives) {
+ it('should emit an empty array', function (done) {
+ driveScanner.once('drives', function (drives) {
m.chai.expect(drives).to.deep.equal([]);
driveScanner.stop();
done();
@@ -27,12 +41,10 @@ describe('Browser: driveScanner', function() {
driveScanner.start();
});
-
});
- describe('given only system available drives', function() {
-
- beforeEach(function() {
+ describe('given only system available drives', function () {
+ beforeEach(function () {
this.drivelistStub = m.sinon.stub(drivelist, 'list');
this.drivelistStub.yields(null, [ {
device: '/dev/sda',
@@ -47,12 +59,12 @@ describe('Browser: driveScanner', function() {
} ]);
});
- afterEach(function() {
+ afterEach(function () {
this.drivelistStub.restore();
});
- it('should emit an empty array', function(done) {
- driveScanner.once('drives', function(drives) {
+ it('should emit an empty array', function (done) {
+ driveScanner.once('drives', function (drives) {
m.chai.expect(drives).to.deep.equal([]);
driveScanner.stop();
done();
@@ -60,23 +72,20 @@ describe('Browser: driveScanner', function() {
driveScanner.start();
});
-
});
- describe('given linux', function() {
-
- beforeEach(function() {
+ describe('given linux', function () {
+ beforeEach(function () {
this.osPlatformStub = m.sinon.stub(os, 'platform');
this.osPlatformStub.returns('linux');
});
- afterEach(function() {
+ afterEach(function () {
this.osPlatformStub.restore();
});
- describe('given available drives', function() {
-
- beforeEach(function() {
+ describe('given available drives', function () {
+ beforeEach(function () {
this.drivelistStub = m.sinon.stub(drivelist, 'list');
this.drivelistStub.yields(null, [
{
@@ -118,12 +127,12 @@ describe('Browser: driveScanner', function() {
]);
});
- afterEach(function() {
+ afterEach(function () {
this.drivelistStub.restore();
});
- it('should emit the non removable drives', function(done) {
- driveScanner.once('drives', function(drives) {
+ it('should emit the non removable drives', function (done) {
+ driveScanner.once('drives', function (drives) {
m.chai.expect(drives).to.deep.equal([
{
device: '/dev/sdb',
@@ -157,25 +166,21 @@ describe('Browser: driveScanner', function() {
driveScanner.start();
});
-
});
-
});
- describe('given windows', function() {
-
- beforeEach(function() {
+ describe('given windows', function () {
+ beforeEach(function () {
this.osPlatformStub = m.sinon.stub(os, 'platform');
this.osPlatformStub.returns('win32');
});
- afterEach(function() {
+ afterEach(function () {
this.osPlatformStub.restore();
});
- describe('given available drives', function() {
-
- beforeEach(function() {
+ describe('given available drives', function () {
+ beforeEach(function () {
this.drivelistStub = m.sinon.stub(drivelist, 'list');
this.drivelistStub.yields(null, [
{
@@ -213,12 +218,12 @@ describe('Browser: driveScanner', function() {
]);
});
- afterEach(function() {
+ afterEach(function () {
this.drivelistStub.restore();
});
- it('should emit the non removable drives', function(done) {
- driveScanner.once('drives', function(drives) {
+ it('should emit the non removable drives', function (done) {
+ driveScanner.once('drives', function (drives) {
m.chai.expect(drives).to.deep.equal([
{
device: '\\\\.\\PHYSICALDRIVE2',
@@ -248,12 +253,10 @@ describe('Browser: driveScanner', function() {
driveScanner.start();
});
-
});
- describe('given a drive with a single drive letters', function() {
-
- beforeEach(function() {
+ describe('given a drive with a single drive letters', function () {
+ beforeEach(function () {
this.drivelistStub = m.sinon.stub(drivelist, 'list');
this.drivelistStub.yields(null, [
{
@@ -271,12 +274,12 @@ describe('Browser: driveScanner', function() {
]);
});
- afterEach(function() {
+ afterEach(function () {
this.drivelistStub.restore();
});
- it('should use the drive letter as the name', function(done) {
- driveScanner.once('drives', function(drives) {
+ it('should use the drive letter as the name', function (done) {
+ driveScanner.once('drives', function (drives) {
m.chai.expect(drives).to.have.length(1);
m.chai.expect(drives[0].displayName).to.equal('F:');
driveScanner.stop();
@@ -285,12 +288,10 @@ describe('Browser: driveScanner', function() {
driveScanner.start();
});
-
});
- describe('given a drive with multiple drive letters', function() {
-
- beforeEach(function() {
+ describe('given a drive with multiple drive letters', function () {
+ beforeEach(function () {
this.drivesListStub = m.sinon.stub(drivelist, 'list');
this.drivesListStub.yields(null, [
{
@@ -314,12 +315,12 @@ describe('Browser: driveScanner', function() {
]);
});
- afterEach(function() {
+ afterEach(function () {
this.drivesListStub.restore();
});
- it('should join all the mountpoints in `name`', function(done) {
- driveScanner.once('drives', function(drives) {
+ it('should join all the mountpoints in `name`', function (done) {
+ driveScanner.once('drives', function (drives) {
m.chai.expect(drives).to.have.length(1);
m.chai.expect(drives[0].displayName).to.equal('F:, G:, H:');
driveScanner.stop();
@@ -328,24 +329,21 @@ describe('Browser: driveScanner', function() {
driveScanner.start();
});
-
});
-
});
- describe('given an error when listing the drives', function() {
-
- beforeEach(function() {
+ describe('given an error when listing the drives', function () {
+ beforeEach(function () {
this.drivesListStub = m.sinon.stub(drivelist, 'list');
this.drivesListStub.yields(new Error('scan error'));
});
- afterEach(function() {
+ afterEach(function () {
this.drivesListStub.restore();
});
- it('should emit the error', function(done) {
- driveScanner.on('error', function(error) {
+ it('should emit the error', function (done) {
+ driveScanner.on('error', function (error) {
m.chai.expect(error).to.be.an.instanceof(Error);
m.chai.expect(error.message).to.equal('scan error');
driveScanner.stop();
@@ -354,7 +352,5 @@ describe('Browser: driveScanner', function() {
driveScanner.start();
});
-
});
-
});
diff --git a/tests/gui/modules/image-writer.spec.js b/tests/gui/modules/image-writer.spec.js
index 67e3cb8b..e79de9fe 100644
--- a/tests/gui/modules/image-writer.spec.js
+++ b/tests/gui/modules/image-writer.spec.js
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2017 resin.io
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use strict';
const m = require('mochainon');
@@ -5,29 +21,25 @@ const angular = require('angular');
const flashState = require('../../../lib/shared/models/flash-state');
require('angular-mocks');
-describe('Browser: ImageWriter', function() {
-
+describe('Browser: ImageWriter', function () {
beforeEach(angular.mock.module(
require('../../../lib/gui/modules/image-writer')
));
- describe('ImageWriterService', function() {
-
+ describe('ImageWriterService', function () {
let $q;
let $rootScope;
let ImageWriterService;
- beforeEach(angular.mock.inject(function(_$q_, _$rootScope_, _ImageWriterService_) {
+ beforeEach(angular.mock.inject(function (_$q_, _$rootScope_, _ImageWriterService_) {
$q = _$q_;
$rootScope = _$rootScope_;
ImageWriterService = _ImageWriterService_;
}));
- describe('.flash()', function() {
-
- describe('given a successful write', function() {
-
- beforeEach(function() {
+ describe('.flash()', function () {
+ describe('given a successful write', function () {
+ beforeEach(function () {
this.performWriteStub = m.sinon.stub(ImageWriterService, 'performWrite');
this.performWriteStub.returns($q.resolve({
cancelled: false,
@@ -35,11 +47,11 @@ describe('Browser: ImageWriter', function() {
}));
});
- afterEach(function() {
+ afterEach(function () {
this.performWriteStub.restore();
});
- it('should set flashing to false when done', function() {
+ it('should set flashing to false when done', function () {
flashState.unsetFlashingFlag({
cancelled: false,
sourceChecksum: '1234'
@@ -50,7 +62,7 @@ describe('Browser: ImageWriter', function() {
m.chai.expect(flashState.isFlashing()).to.be.false;
});
- it('should prevent writing more than once', function() {
+ it('should prevent writing more than once', function () {
flashState.unsetFlashingFlag({
cancelled: false,
sourceChecksum: '1234'
@@ -62,11 +74,11 @@ describe('Browser: ImageWriter', function() {
m.chai.expect(this.performWriteStub).to.have.been.calledOnce;
});
- it('should reject the second flash attempt', function() {
+ it('should reject the second flash attempt', function () {
ImageWriterService.flash('foo.img', '/dev/disk2');
let rejectError = null;
- ImageWriterService.flash('foo.img', '/dev/disk2').catch(function(error) {
+ ImageWriterService.flash('foo.img', '/dev/disk2').catch(function (error) {
rejectError = error;
});
@@ -75,43 +87,41 @@ describe('Browser: ImageWriter', function() {
m.chai.expect(rejectError).to.be.an.instanceof(Error);
m.chai.expect(rejectError.message).to.equal('There is already a flash in progress');
});
-
});
- describe('given an unsuccessful write', function() {
-
- beforeEach(function() {
+ describe('given an unsuccessful write', function () {
+ beforeEach(function () {
this.performWriteStub = m.sinon.stub(ImageWriterService, 'performWrite');
this.error = new Error('write error');
this.error.code = 'FOO';
this.performWriteStub.returns($q.reject(this.error));
});
- afterEach(function() {
+ afterEach(function () {
this.performWriteStub.restore();
});
- it('should set flashing to false when done', function() {
+ it('should set flashing to false when done', function () {
ImageWriterService.flash('foo.img', '/dev/disk2').catch(angular.noop);
$rootScope.$apply();
m.chai.expect(flashState.isFlashing()).to.be.false;
});
- it('should set the error code in the flash results', function() {
+ it('should set the error code in the flash results', function () {
ImageWriterService.flash('foo.img', '/dev/disk2').catch(angular.noop);
$rootScope.$apply();
const flashResults = flashState.getFlashResults();
m.chai.expect(flashResults.errorCode).to.equal('FOO');
});
- it('should be rejected with the error', function() {
+ it('should be rejected with the error', function () {
flashState.unsetFlashingFlag({
cancelled: false,
sourceChecksum: '1234'
});
let rejection;
- ImageWriterService.flash('foo.img', '/dev/disk2').catch(function(error) {
+ ImageWriterService.flash('foo.img', '/dev/disk2').catch(function (error) {
rejection = error;
});
@@ -120,11 +130,7 @@ describe('Browser: ImageWriter', function() {
m.chai.expect(rejection).to.be.an.instanceof(Error);
m.chai.expect(rejection.message).to.equal('write error');
});
-
});
-
});
-
});
-
});
diff --git a/tests/gui/os/dropzone.spec.js b/tests/gui/os/dropzone.spec.js
index 6cff270e..e7f11b4f 100644
--- a/tests/gui/os/dropzone.spec.js
+++ b/tests/gui/os/dropzone.spec.js
@@ -20,26 +20,24 @@ const m = require('mochainon');
const angular = require('angular');
require('angular-mocks');
-describe('Browser: OSDropzone', function() {
-
+describe('Browser: OSDropzone', function () {
beforeEach(angular.mock.module(
require('../../../lib/gui/os/dropzone/dropzone')
));
- describe('osDropzone', function() {
-
+ describe('osDropzone', function () {
let $compile;
let $rootScope;
let $timeout;
- beforeEach(angular.mock.inject(function(_$compile_, _$rootScope_, _$timeout_) {
+ beforeEach(angular.mock.inject(function (_$compile_, _$rootScope_, _$timeout_) {
$compile = _$compile_;
$rootScope = _$rootScope_;
$timeout = _$timeout_;
}));
- it('should pass the file back to the callback as $file', function(done) {
- $rootScope.onDropZone = function(file) {
+ it('should pass the file back to the callback as $file', function (done) {
+ $rootScope.onDropZone = function (file) {
m.chai.expect(file).to.deep.equal('/foo/bar');
done();
};
@@ -62,8 +60,8 @@ describe('Browser: OSDropzone', function() {
$timeout.flush();
});
- it('should pass undefined to the callback if not passing $file', function(done) {
- $rootScope.onDropZone = function(file) {
+ it('should pass undefined to the callback if not passing $file', function (done) {
+ $rootScope.onDropZone = function (file) {
m.chai.expect(file).to.be.undefined;
done();
};
@@ -85,7 +83,5 @@ describe('Browser: OSDropzone', function() {
$rootScope.$digest();
$timeout.flush();
});
-
});
-
});
diff --git a/tests/gui/os/open-external.spec.js b/tests/gui/os/open-external.spec.js
index b310341e..1f139668 100644
--- a/tests/gui/os/open-external.spec.js
+++ b/tests/gui/os/open-external.spec.js
@@ -21,29 +21,27 @@ const angular = require('angular');
const electron = require('electron');
require('angular-mocks');
-describe('Browser: OSOpenExternal', function() {
-
+describe('Browser: OSOpenExternal', function () {
beforeEach(angular.mock.module(
require('../../../lib/gui/os/open-external/open-external')
));
- describe('osOpenExternal', function() {
-
+ describe('osOpenExternal', function () {
let $compile;
let $rootScope;
- beforeEach(angular.mock.inject(function(_$compile_, _$rootScope_) {
+ beforeEach(angular.mock.inject(function (_$compile_, _$rootScope_) {
$compile = _$compile_;
$rootScope = _$rootScope_;
}));
- it('should set the element cursor to pointer', function() {
+ it('should set the element cursor to pointer', function () {
const element = $compile('Resin.io')($rootScope);
$rootScope.$digest();
m.chai.expect(element.css('cursor')).to.equal('pointer');
});
- it('should call Electron shell.openExternal with the attribute value', function() {
+ it('should call Electron shell.openExternal with the attribute value', function () {
const shellExternalStub = m.sinon.stub(electron.shell, 'openExternal');
const element = $compile('Resin.io')($rootScope);
element.triggerHandler('click');
@@ -52,7 +50,7 @@ describe('Browser: OSOpenExternal', function() {
shellExternalStub.restore();
});
- it('should not call Electron shell.openExternal if the attribute value is not defined', function() {
+ it('should not call Electron shell.openExternal if the attribute value is not defined', function () {
const shellExternalStub = m.sinon.stub(electron.shell, 'openExternal');
const element = $compile('Resin.io')($rootScope);
element.triggerHandler('click');
@@ -60,7 +58,5 @@ describe('Browser: OSOpenExternal', function() {
m.chai.expect(shellExternalStub).to.not.have.been.called;
shellExternalStub.restore();
});
-
});
-
});
diff --git a/tests/gui/os/window-progress.spec.js b/tests/gui/os/window-progress.spec.js
index 62c9b029..43898313 100644
--- a/tests/gui/os/window-progress.spec.js
+++ b/tests/gui/os/window-progress.spec.js
@@ -19,13 +19,10 @@
const m = require('mochainon');
const windowProgress = require('../../../lib/gui/os/window-progress');
-describe('Browser: WindowProgress', function() {
-
- describe('windowProgress', function() {
-
- describe('given a stubbed current window', function() {
-
- beforeEach(function() {
+describe('Browser: WindowProgress', function () {
+ describe('windowProgress', function () {
+ describe('given a stubbed current window', function () {
+ beforeEach(function () {
this.setProgressBarSpy = m.sinon.spy();
windowProgress.currentWindow = {
@@ -33,48 +30,41 @@ describe('Browser: WindowProgress', function() {
};
});
- describe('.set()', function() {
-
- it('should translate 0-100 percentages to 0-1 ranges', function() {
+ describe('.set()', function () {
+ it('should translate 0-100 percentages to 0-1 ranges', function () {
windowProgress.set(85);
m.chai.expect(this.setProgressBarSpy).to.have.been.calledWith(0.85);
});
- it('should set 0 given 0', function() {
+ it('should set 0 given 0', function () {
windowProgress.set(0);
m.chai.expect(this.setProgressBarSpy).to.have.been.calledWith(0);
});
- it('should set 1 given 100', function() {
+ it('should set 1 given 100', function () {
windowProgress.set(100);
m.chai.expect(this.setProgressBarSpy).to.have.been.calledWith(1);
});
- it('should throw if given a percentage higher than 100', function() {
- m.chai.expect(function() {
+ it('should throw if given a percentage higher than 100', function () {
+ m.chai.expect(function () {
windowProgress.set(101);
}).to.throw('Invalid percentage: 101');
});
- it('should throw if given a percentage less than 0', function() {
- m.chai.expect(function() {
+ it('should throw if given a percentage less than 0', function () {
+ m.chai.expect(function () {
windowProgress.set(-1);
}).to.throw('Invalid percentage: -1');
});
-
});
- describe('.clear()', function() {
-
- it('should set -1', function() {
+ describe('.clear()', function () {
+ it('should set -1', function () {
windowProgress.clear();
m.chai.expect(this.setProgressBarSpy).to.have.been.calledWith(-1);
});
-
});
-
});
-
});
-
});
diff --git a/tests/gui/pages/main.spec.js b/tests/gui/pages/main.spec.js
index 63efdb75..be7642cd 100644
--- a/tests/gui/pages/main.spec.js
+++ b/tests/gui/pages/main.spec.js
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2017 resin.io
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use strict';
const m = require('mochainon');
@@ -11,23 +27,20 @@ const availableDrives = require('../../../lib/shared/models/available-drives');
const selectionState = require('../../../lib/shared/models/selection-state');
require('angular-mocks');
-describe('Browser: MainPage', function() {
-
+describe('Browser: MainPage', function () {
beforeEach(angular.mock.module(
require('../../../lib/gui/pages/main/main')
));
- describe('MainController', function() {
-
+ describe('MainController', function () {
let $controller;
- beforeEach(angular.mock.inject(function(_$controller_) {
+ beforeEach(angular.mock.inject(function (_$controller_) {
$controller = _$controller_;
}));
- describe('.shouldDriveStepBeDisabled()', function() {
-
- it('should return true if there is no drive', function() {
+ describe('.shouldDriveStepBeDisabled()', function () {
+ it('should return true if there is no drive', function () {
const controller = $controller('MainController', {
$scope: {}
});
@@ -37,7 +50,7 @@ describe('Browser: MainPage', function() {
m.chai.expect(controller.shouldDriveStepBeDisabled()).to.be.true;
});
- it('should return false if there is a drive', function() {
+ it('should return false if there is a drive', function () {
const controller = $controller('MainController', {
$scope: {}
});
@@ -56,12 +69,10 @@ describe('Browser: MainPage', function() {
m.chai.expect(controller.shouldDriveStepBeDisabled()).to.be.false;
});
-
});
- describe('.shouldFlashStepBeDisabled()', function() {
-
- it('should return true if there is no selected drive nor image', function() {
+ describe('.shouldFlashStepBeDisabled()', function () {
+ it('should return true if there is no selected drive nor image', function () {
const controller = $controller('MainController', {
$scope: {}
});
@@ -71,7 +82,7 @@ describe('Browser: MainPage', function() {
m.chai.expect(controller.shouldFlashStepBeDisabled()).to.be.true;
});
- it('should return true if there is a selected image but no drive', function() {
+ it('should return true if there is a selected image but no drive', function () {
const controller = $controller('MainController', {
$scope: {}
});
@@ -92,7 +103,7 @@ describe('Browser: MainPage', function() {
m.chai.expect(controller.shouldFlashStepBeDisabled()).to.be.true;
});
- it('should return true if there is a selected drive but no image', function() {
+ it('should return true if there is a selected drive but no image', function () {
const controller = $controller('MainController', {
$scope: {}
});
@@ -113,7 +124,7 @@ describe('Browser: MainPage', function() {
m.chai.expect(controller.shouldFlashStepBeDisabled()).to.be.true;
});
- it('should return false if there is a selected drive and a selected image', function() {
+ it('should return false if there is a selected drive and a selected image', function () {
const controller = $controller('MainController', {
$scope: {}
});
@@ -145,20 +156,17 @@ describe('Browser: MainPage', function() {
m.chai.expect(controller.shouldFlashStepBeDisabled()).to.be.false;
});
-
});
-
});
- describe('ImageSelectionController', function() {
-
+ describe('ImageSelectionController', function () {
let $controller;
- beforeEach(angular.mock.inject(function(_$controller_) {
+ beforeEach(angular.mock.inject(function (_$controller_) {
$controller = _$controller_;
}));
- it('should contain all available extensions in mainSupportedExtensions and extraSupportedExtensions', function() {
+ it('should contain all available extensions in mainSupportedExtensions and extraSupportedExtensions', function () {
const $scope = {};
const controller = $controller('ImageSelectionController', {
$scope
@@ -168,9 +176,8 @@ describe('Browser: MainPage', function() {
m.chai.expect(_.sortBy(extensions)).to.deep.equal(_.sortBy(supportedFormats.getAllExtensions()));
});
- describe('.getImageBasename()', function() {
-
- it('should return the basename of the selected image', function() {
+ describe('.getImageBasename()', function () {
+ it('should return the basename of the selected image', function () {
const controller = $controller('ImageSelectionController', {
$scope: {}
});
@@ -191,7 +198,7 @@ describe('Browser: MainPage', function() {
selectionState.removeImage();
});
- it('should return an empty string if no selected image', function() {
+ it('should return an empty string if no selected image', function () {
const controller = $controller('ImageSelectionController', {
$scope: {}
});
@@ -199,22 +206,18 @@ describe('Browser: MainPage', function() {
selectionState.removeImage();
m.chai.expect(controller.getImageBasename()).to.equal('');
});
-
});
-
});
- describe('FlashController', function() {
-
+ describe('FlashController', function () {
let $controller;
- beforeEach(angular.mock.inject(function(_$controller_) {
+ beforeEach(angular.mock.inject(function (_$controller_) {
$controller = _$controller_;
}));
- describe('.getProgressButtonLabel()', function() {
-
- it('should return "Flash!" given a clean state', function() {
+ describe('.getProgressButtonLabel()', function () {
+ it('should return "Flash!" given a clean state', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -223,13 +226,12 @@ describe('Browser: MainPage', function() {
m.chai.expect(controller.getProgressButtonLabel()).to.equal('Flash!');
});
- describe('given there is a flash in progress', function() {
-
- beforeEach(function() {
+ describe('given there is a flash in progress', function () {
+ beforeEach(function () {
flashState.setFlashingFlag();
});
- it('should report 0% if percentage == 0 but speed != 0', function() {
+ it('should report 0% if percentage == 0 but speed != 0', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -246,7 +248,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 0, type = write, unmountOnSuccess', function() {
+ it('should handle percentage == 0, type = write, unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -263,7 +265,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 0, type = write, !unmountOnSuccess', function() {
+ it('should handle percentage == 0, type = write, !unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -280,7 +282,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 0, type = check, unmountOnSuccess', function() {
+ it('should handle percentage == 0, type = check, unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -297,7 +299,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 0, type = check, !unmountOnSuccess', function() {
+ it('should handle percentage == 0, type = check, !unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -314,7 +316,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 50, type = write, unmountOnSuccess', function() {
+ it('should handle percentage == 50, type = write, unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -331,7 +333,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 50, type = write, !unmountOnSuccess', function() {
+ it('should handle percentage == 50, type = write, !unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -348,7 +350,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 50, type = check, unmountOnSuccess', function() {
+ it('should handle percentage == 50, type = check, unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -365,7 +367,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 50, type = check, !unmountOnSuccess', function() {
+ it('should handle percentage == 50, type = check, !unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -382,7 +384,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 100, type = write, unmountOnSuccess', function() {
+ it('should handle percentage == 100, type = write, unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -399,7 +401,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 100, type = write, !unmountOnSuccess', function() {
+ it('should handle percentage == 100, type = write, !unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -416,7 +418,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 100, type = check, unmountOnSuccess', function() {
+ it('should handle percentage == 100, type = check, unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -433,7 +435,7 @@ describe('Browser: MainPage', function() {
});
});
- it('should handle percentage == 100, type = check, !unmountOnSuccess', function() {
+ it('should handle percentage == 100, type = check, !unmountOnSuccess', function () {
const controller = $controller('FlashController', {
$scope: {}
});
@@ -449,11 +451,7 @@ describe('Browser: MainPage', function() {
m.chai.expect(controller.getProgressButtonLabel()).to.equal('Finishing...');
});
});
-
});
-
});
-
});
-
});
diff --git a/tests/gui/utils/byte-size.spec.js b/tests/gui/utils/byte-size.spec.js
index d3309ba4..2fa60a05 100644
--- a/tests/gui/utils/byte-size.spec.js
+++ b/tests/gui/utils/byte-size.spec.js
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2017 resin.io
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use strict';
const m = require('mochainon');
@@ -5,23 +21,20 @@ const angular = require('angular');
require('angular-mocks');
const units = require('../../../lib/shared/units');
-describe('Browser: ByteSize', function() {
-
+describe('Browser: ByteSize', function () {
beforeEach(angular.mock.module(
require('../../../lib/gui/utils/byte-size/byte-size')
));
- describe('ClosestUnitFilter', function() {
-
+ describe('ClosestUnitFilter', function () {
let closestUnitFilter;
- beforeEach(angular.mock.inject(function(_closestUnitFilter_) {
+ beforeEach(angular.mock.inject(function (_closestUnitFilter_) {
closestUnitFilter = _closestUnitFilter_;
}));
- it('should expose lib/shared/units.js bytesToGigabytes()', function() {
+ it('should expose lib/shared/units.js bytesToGigabytes()', function () {
m.chai.expect(closestUnitFilter).to.equal(units.bytesToClosestUnit);
});
-
});
});
diff --git a/tests/gui/utils/manifest-bind.spec.js b/tests/gui/utils/manifest-bind.spec.js
index 0c8761b9..c1a7d4a9 100644
--- a/tests/gui/utils/manifest-bind.spec.js
+++ b/tests/gui/utils/manifest-bind.spec.js
@@ -21,8 +21,7 @@ const angular = require('angular');
const packageJSON = require('../../../package.json');
require('angular-mocks');
-describe('Browser: ManifestBind', function() {
-
+describe('Browser: ManifestBind', function () {
beforeEach(angular.mock.module(
require('../../../lib/gui/utils/manifest-bind/manifest-bind')
));
@@ -30,56 +29,51 @@ describe('Browser: ManifestBind', function() {
let $compile;
let $rootScope;
- beforeEach(angular.mock.inject(function(_$compile_, _$rootScope_) {
+ beforeEach(angular.mock.inject(function (_$compile_, _$rootScope_) {
$compile = _$compile_;
$rootScope = _$rootScope_;
}));
- describe('ManifestBindService', function() {
-
+ describe('ManifestBindService', function () {
let ManifestBindService;
- beforeEach(angular.mock.inject(function(_ManifestBindService_) {
+ beforeEach(angular.mock.inject(function (_ManifestBindService_) {
ManifestBindService = _ManifestBindService_;
}));
- it('should be able to fetch top level properties', function() {
+ it('should be able to fetch top level properties', function () {
const value = ManifestBindService.get('version');
m.chai.expect(value).to.equal(packageJSON.version);
});
- it('should be able to fetch nested properties', function() {
+ it('should be able to fetch nested properties', function () {
const value = ManifestBindService.get('repository.type');
m.chai.expect(value).to.equal(packageJSON.repository.type);
});
- it('should return undefined if the property does not exist', function() {
+ it('should return undefined if the property does not exist', function () {
const value = ManifestBindService.get('foo.bar');
m.chai.expect(value).to.be.undefined;
});
-
});
- describe('manifestBind', function() {
-
- it('should bind to top level properties', function() {
+ describe('manifestBind', function () {
+ it('should bind to top level properties', function () {
const element = $compile('')($rootScope);
$rootScope.$digest();
m.chai.expect(element.html()).to.equal(packageJSON.version);
});
- it('should bind to nested properties', function() {
+ it('should bind to nested properties', function () {
const element = $compile('')($rootScope);
$rootScope.$digest();
m.chai.expect(element.html()).to.equal(packageJSON.repository.type);
});
- it('should throw if the property does not exist', function() {
- m.chai.expect(function() {
+ it('should throw if the property does not exist', function () {
+ m.chai.expect(function () {
$compile('')($rootScope);
}).to.throw('ManifestBind: Unknown property `foo.bar`');
});
-
});
-
});
diff --git a/tests/image-stream/archive-hooks/zip.spec.js b/tests/image-stream/archive-hooks/zip.spec.js
index 27c5fa94..a20efab4 100644
--- a/tests/image-stream/archive-hooks/zip.spec.js
+++ b/tests/image-stream/archive-hooks/zip.spec.js
@@ -23,33 +23,28 @@ const utils = require('../../../lib/image-stream/utils');
const tester = require('../tester');
const ZIP_PATH = path.join(__dirname, '..', 'data', 'zip');
-describe('ImageStream: Archive hooks: ZIP', function() {
-
+describe('ImageStream: Archive hooks: ZIP', function () {
this.timeout(tester.DEFAULT_IMAGE_TESTS_TIMEOUT);
- describe('.getEntries()', function() {
-
- describe('given an empty zip', function() {
-
- beforeEach(function() {
+ describe('.getEntries()', function () {
+ describe('given an empty zip', function () {
+ beforeEach(function () {
this.zip = path.join(ZIP_PATH, 'zip-directory-empty.zip');
});
- it('should become an empty array', function() {
+ it('should become an empty array', function () {
return zipHooks.getEntries(this.zip).then((entries) => {
m.chai.expect(entries).to.deep.equal([]);
});
});
-
});
- describe('given a zip with multiple files in it', function() {
-
- beforeEach(function() {
+ describe('given a zip with multiple files in it', function () {
+ beforeEach(function () {
this.zip = path.join(ZIP_PATH, 'zip-directory-multiple-images.zip');
});
- it('should become all entries', function() {
+ it('should become all entries', function () {
return zipHooks.getEntries(this.zip).then((entries) => {
m.chai.expect(entries).to.deep.equal([
{
@@ -63,16 +58,14 @@ describe('ImageStream: Archive hooks: ZIP', function() {
]);
});
});
-
});
- describe('given a zip with nested files in it', function() {
-
- beforeEach(function() {
+ describe('given a zip with nested files in it', function () {
+ beforeEach(function () {
this.zip = path.join(ZIP_PATH, 'zip-directory-nested-misc.zip');
});
- it('should become all entries', function() {
+ it('should become all entries', function () {
return zipHooks.getEntries(this.zip).then((entries) => {
m.chai.expect(entries).to.deep.equal([
{
@@ -86,18 +79,15 @@ describe('ImageStream: Archive hooks: ZIP', function() {
]);
});
});
-
});
-
});
- describe('.extractFile()', function() {
-
- beforeEach(function() {
+ describe('.extractFile()', function () {
+ beforeEach(function () {
this.zip = path.join(ZIP_PATH, 'zip-directory-nested-misc.zip');
});
- it('should be able to extract a top-level file', function() {
+ it('should be able to extract a top-level file', function () {
const fileName = 'zip-directory-nested-misc/foo';
return zipHooks.getEntries(this.zip).then((entries) => {
return zipHooks.extractFile(this.zip, entries, fileName);
@@ -106,7 +96,7 @@ describe('ImageStream: Archive hooks: ZIP', function() {
});
});
- it('should be able to extract a nested file', function() {
+ it('should be able to extract a nested file', function () {
const fileName = 'zip-directory-nested-misc/hello/there/bar';
return zipHooks.getEntries(this.zip).then((entries) => {
return zipHooks.extractFile(this.zip, entries, fileName);
@@ -115,7 +105,7 @@ describe('ImageStream: Archive hooks: ZIP', function() {
});
});
- it('should throw if the entry does not exist', function() {
+ it('should throw if the entry does not exist', function () {
const fileName = 'zip-directory-nested-misc/xxxxxxxxxxxxxxxx';
return zipHooks.getEntries(this.zip).then((entries) => {
return zipHooks.extractFile(this.zip, entries, fileName);
@@ -125,7 +115,7 @@ describe('ImageStream: Archive hooks: ZIP', function() {
});
});
- it('should throw if the entry is a directory', function() {
+ it('should throw if the entry is a directory', function () {
const fileName = 'zip-directory-nested-misc/hello';
return zipHooks.getEntries(this.zip).then((entries) => {
return zipHooks.extractFile(this.zip, entries, fileName);
@@ -134,7 +124,5 @@ describe('ImageStream: Archive hooks: ZIP', function() {
m.chai.expect(error.message).to.equal(`Invalid entry: ${fileName}`);
});
});
-
});
-
});
diff --git a/tests/image-stream/bz2.spec.js b/tests/image-stream/bz2.spec.js
index 99f5fd1e..e46558e0 100644
--- a/tests/image-stream/bz2.spec.js
+++ b/tests/image-stream/bz2.spec.js
@@ -25,29 +25,25 @@ const BZ2_PATH = path.join(DATA_PATH, 'bz2');
const imageStream = require('../../lib/image-stream/index');
const tester = require('./tester');
-describe('ImageStream: BZ2', function() {
-
+describe('ImageStream: BZ2', function () {
this.timeout(tester.DEFAULT_IMAGE_TESTS_TIMEOUT);
- describe('compression method', function() {
-
- describe('bzip2 level 9', function() {
+ describe('compression method', function () {
+ describe('bzip2 level 9', function () {
tester.extractFromFilePath(
path.join(BZ2_PATH, 'etcher-test-9.img.bz2'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
- describe('bzip2 level 1', function() {
+ describe('bzip2 level 1', function () {
tester.extractFromFilePath(
path.join(BZ2_PATH, 'etcher-test.img.bz2'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
-
});
- describe('.getImageMetadata()', function() {
-
- it('should return the correct metadata', function() {
+ describe('.getImageMetadata()', function () {
+ it('should return the correct metadata', function () {
const image = path.join(BZ2_PATH, 'etcher-test.img.bz2');
const expectedSize = fs.statSync(image).size;
@@ -69,7 +65,5 @@ describe('ImageStream: BZ2', function() {
});
});
});
-
});
-
});
diff --git a/tests/image-stream/directory.spec.js b/tests/image-stream/directory.spec.js
index a53b56ea..01ba948e 100644
--- a/tests/image-stream/directory.spec.js
+++ b/tests/image-stream/directory.spec.js
@@ -23,13 +23,10 @@ const IMAGES_PATH = path.join(DATA_PATH, 'images');
const errors = require('../../lib/shared/errors');
const imageStream = require('../../lib/image-stream/index');
-describe('ImageStream: Directory', function() {
-
- describe('.getFromFilePath()', function() {
-
- describe('given a directory', function() {
-
- it('should be rejected with an error', function(done) {
+describe('ImageStream: Directory', function () {
+ describe('.getFromFilePath()', function () {
+ describe('given a directory', function () {
+ it('should be rejected with an error', function (done) {
imageStream.getFromFilePath(IMAGES_PATH).catch((error) => {
m.chai.expect(error).to.be.an.instanceof(Error);
m.chai.expect(errors.getTitle(error)).to.equal('Invalid image');
@@ -38,14 +35,11 @@ describe('ImageStream: Directory', function() {
done();
});
});
-
});
-
});
- describe('.getImageMetadata()', function() {
-
- it('should be rejected with an error', function(done) {
+ describe('.getImageMetadata()', function () {
+ it('should be rejected with an error', function (done) {
imageStream.getImageMetadata(IMAGES_PATH).catch((error) => {
m.chai.expect(error).to.be.an.instanceof(Error);
m.chai.expect(errors.getTitle(error)).to.equal('Invalid image');
@@ -54,7 +48,5 @@ describe('ImageStream: Directory', function() {
done();
});
});
-
});
-
});
diff --git a/tests/image-stream/dmg.spec.js b/tests/image-stream/dmg.spec.js
index a36e382b..2c3d6b17 100644
--- a/tests/image-stream/dmg.spec.js
+++ b/tests/image-stream/dmg.spec.js
@@ -25,60 +25,53 @@ const DMG_PATH = path.join(DATA_PATH, 'dmg');
const imageStream = require('../../lib/image-stream/index');
const tester = require('./tester');
-describe('ImageStream: DMG', function() {
-
+describe('ImageStream: DMG', function () {
this.timeout(tester.DEFAULT_IMAGE_TESTS_TIMEOUT);
- describe('compression method', function() {
-
- describe('NONE', function() {
+ describe('compression method', function () {
+ describe('NONE', function () {
tester.extractFromFilePath(
path.join(DMG_PATH, 'etcher-test-raw.dmg'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
- describe('UDCO (ADC)', function() {
+ describe('UDCO (ADC)', function () {
tester.extractFromFilePath(
path.join(DMG_PATH, 'etcher-test-adc.dmg'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
- describe('UDZO (ZLIB)', function() {
+ describe('UDZO (ZLIB)', function () {
tester.extractFromFilePath(
path.join(DMG_PATH, 'etcher-test-zlib.dmg'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
- describe('UDBZ (BZIP2)', function() {
+ describe('UDBZ (BZIP2)', function () {
tester.extractFromFilePath(
path.join(DMG_PATH, 'etcher-test-bz2.dmg'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
// NOTE: Skipped, as LZFSE is not supported by `udif` module yet
- describe.skip('ULFO (LZFSE)', function() {
+ describe.skip('ULFO (LZFSE)', function () {
tester.extractFromFilePath(
path.join(DMG_PATH, 'etcher-test-lzfse.dmg'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
-
});
- context('zlib compressed', function() {
-
- describe('.getFromFilePath()', function() {
-
- describe('given an dmg image', function() {
+ context('zlib compressed', function () {
+ describe('.getFromFilePath()', function () {
+ describe('given an dmg image', function () {
tester.extractFromFilePath(
path.join(DMG_PATH, 'etcher-test-zlib.dmg'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
-
});
- describe('.getImageMetadata()', function() {
-
- it('should return the correct metadata', function() {
+ describe('.getImageMetadata()', function () {
+ it('should return the correct metadata', function () {
const image = path.join(DMG_PATH, 'etcher-test-zlib.dmg');
const uncompressedSize = fs.statSync(path.join(IMAGES_PATH, 'etcher-test.img')).size;
@@ -99,26 +92,20 @@ describe('ImageStream: DMG', function() {
});
});
});
-
});
-
});
- context('uncompressed', function() {
-
- describe('.getFromFilePath()', function() {
-
- describe('given an dmg image', function() {
+ context('uncompressed', function () {
+ describe('.getFromFilePath()', function () {
+ describe('given an dmg image', function () {
tester.extractFromFilePath(
path.join(DMG_PATH, 'etcher-test-raw.dmg'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
-
});
- describe('.getImageMetadata()', function() {
-
- it('should return the correct metadata', function() {
+ describe('.getImageMetadata()', function () {
+ it('should return the correct metadata', function () {
const image = path.join(DMG_PATH, 'etcher-test-raw.dmg');
const uncompressedSize = fs.statSync(path.join(IMAGES_PATH, 'etcher-test.img')).size;
@@ -139,19 +126,14 @@ describe('ImageStream: DMG', function() {
});
});
});
-
});
-
});
- context('invalid', function() {
-
- describe('given an invalid dmg file', function() {
+ context('invalid', function () {
+ describe('given an invalid dmg file', function () {
tester.expectError(
path.join(DATA_PATH, 'unrecognized', 'invalid.dmg'),
'Invalid image', 'Invalid footer');
});
-
});
-
});
diff --git a/tests/image-stream/gz.spec.js b/tests/image-stream/gz.spec.js
index f934327b..2a1ac7af 100644
--- a/tests/image-stream/gz.spec.js
+++ b/tests/image-stream/gz.spec.js
@@ -25,23 +25,19 @@ const GZ_PATH = path.join(DATA_PATH, 'gz');
const imageStream = require('../../lib/image-stream/index');
const tester = require('./tester');
-describe('ImageStream: GZ', function() {
-
+describe('ImageStream: GZ', function () {
this.timeout(tester.DEFAULT_IMAGE_TESTS_TIMEOUT);
- describe('.getFromFilePath()', function() {
-
- describe('given a gz image', function() {
+ describe('.getFromFilePath()', function () {
+ describe('given a gz image', function () {
tester.extractFromFilePath(
path.join(GZ_PATH, 'etcher-test.img.gz'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
-
});
- describe('.getImageMetadata()', function() {
-
- it('should return the correct metadata', function() {
+ describe('.getImageMetadata()', function () {
+ it('should return the correct metadata', function () {
const image = path.join(GZ_PATH, 'etcher-test.img.gz');
const uncompressedSize = fs.statSync(path.join(IMAGES_PATH, 'etcher-test.img')).size;
const compressedSize = fs.statSync(path.join(GZ_PATH, 'etcher-test.img.gz')).size;
@@ -64,7 +60,5 @@ describe('ImageStream: GZ', function() {
});
});
});
-
});
-
});
diff --git a/tests/image-stream/img.spec.js b/tests/image-stream/img.spec.js
index 1015e3fc..7252a405 100644
--- a/tests/image-stream/img.spec.js
+++ b/tests/image-stream/img.spec.js
@@ -24,25 +24,20 @@ const IMAGES_PATH = path.join(DATA_PATH, 'images');
const imageStream = require('../../lib/image-stream/index');
const tester = require('./tester');
-describe('ImageStream: IMG', function() {
-
+describe('ImageStream: IMG', function () {
this.timeout(tester.DEFAULT_IMAGE_TESTS_TIMEOUT);
- describe('.getFromFilePath()', function() {
-
- describe('given an img image', function() {
+ describe('.getFromFilePath()', function () {
+ describe('given an img image', function () {
tester.extractFromFilePath(
path.join(IMAGES_PATH, 'etcher-test.img'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
-
});
- describe('.getImageMetadata()', function() {
-
- context('Master Boot Record', function() {
-
- it('should return the correct metadata', function() {
+ describe('.getImageMetadata()', function () {
+ context('Master Boot Record', function () {
+ it('should return the correct metadata', function () {
const image = path.join(IMAGES_PATH, 'etcher-test.img');
const expectedSize = fs.statSync(image).size;
@@ -63,12 +58,10 @@ describe('ImageStream: IMG', function() {
});
});
});
-
});
- context('GUID Partition Table', function() {
-
- it('should return the correct metadata', function() {
+ context('GUID Partition Table', function () {
+ it('should return the correct metadata', function () {
const image = path.join(IMAGES_PATH, 'etcher-gpt-test.img.gz');
const uncompressedSize = 134217728;
const expectedSize = fs.statSync(image).size;
@@ -91,9 +84,6 @@ describe('ImageStream: IMG', function() {
});
});
});
-
});
-
});
-
});
diff --git a/tests/image-stream/index.spec.js b/tests/image-stream/index.spec.js
index 3f5f02ab..05d28156 100644
--- a/tests/image-stream/index.spec.js
+++ b/tests/image-stream/index.spec.js
@@ -20,36 +20,32 @@ const m = require('mochainon');
const _ = require('lodash');
const imageStream = require('../../lib/image-stream/index');
-describe('ImageStream', function() {
-
- describe('.supportedFileTypes', function() {
-
- it('should be an array', function() {
+describe('ImageStream', function () {
+ describe('.supportedFileTypes', function () {
+ it('should be an array', function () {
m.chai.expect(_.isArray(imageStream.supportedFileTypes)).to.be.true;
});
- it('should not be empty', function() {
+ it('should not be empty', function () {
m.chai.expect(_.isEmpty(imageStream.supportedFileTypes)).to.be.false;
});
- it('should contain only strings', function() {
- m.chai.expect(_.every(_.map(imageStream.supportedFileTypes, function(fileType) {
+ it('should contain only strings', function () {
+ m.chai.expect(_.every(_.map(imageStream.supportedFileTypes, function (fileType) {
return _.isString(fileType.extension) && _.isString(fileType.type);
}))).to.be.true;
});
- it('should not contain empty strings', function() {
- m.chai.expect(_.every(_.map(imageStream.supportedFileTypes, function(fileType) {
+ it('should not contain empty strings', function () {
+ m.chai.expect(_.every(_.map(imageStream.supportedFileTypes, function (fileType) {
return !_.isEmpty(fileType.extension) && !_.isEmpty(fileType.type);
}))).to.be.true;
});
- it('should not contain a leading period in any file type extension', function() {
- m.chai.expect(_.every(_.map(imageStream.supportedFileTypes, function(fileType) {
+ it('should not contain a leading period in any file type extension', function () {
+ m.chai.expect(_.every(_.map(imageStream.supportedFileTypes, function (fileType) {
return _.first(fileType.extension) !== '.';
}))).to.be.true;
});
-
});
-
});
diff --git a/tests/image-stream/iso.spec.js b/tests/image-stream/iso.spec.js
index ae7c888e..2e89915e 100644
--- a/tests/image-stream/iso.spec.js
+++ b/tests/image-stream/iso.spec.js
@@ -24,23 +24,19 @@ const IMAGES_PATH = path.join(DATA_PATH, 'images');
const imageStream = require('../../lib/image-stream/index');
const tester = require('./tester');
-describe('ImageStream: ISO', function() {
-
+describe('ImageStream: ISO', function () {
this.timeout(tester.DEFAULT_IMAGE_TESTS_TIMEOUT);
- describe('.getFromFilePath()', function() {
-
- describe('given an iso image', function() {
+ describe('.getFromFilePath()', function () {
+ describe('given an iso image', function () {
tester.extractFromFilePath(
path.join(IMAGES_PATH, 'etcher-test.iso'),
path.join(IMAGES_PATH, 'etcher-test.iso'));
});
-
});
- describe('.getImageMetadata()', function() {
-
- it('should return the correct metadata', function() {
+ describe('.getImageMetadata()', function () {
+ it('should return the correct metadata', function () {
const image = path.join(IMAGES_PATH, 'etcher-test.iso');
const expectedSize = fs.statSync(image).size;
@@ -61,7 +57,5 @@ describe('ImageStream: ISO', function() {
});
});
});
-
});
-
});
diff --git a/tests/image-stream/metadata/zip.spec.js b/tests/image-stream/metadata/zip.spec.js
index ac88ed15..44312fed 100644
--- a/tests/image-stream/metadata/zip.spec.js
+++ b/tests/image-stream/metadata/zip.spec.js
@@ -34,19 +34,16 @@ const testMetadataProperty = (archivePath, propertyName, expectedValue) => {
});
};
-describe('ImageStream: Metadata ZIP', function() {
-
+describe('ImageStream: Metadata ZIP', function () {
this.timeout(10000);
- describe('given an archive with an invalid `manifest.json`', function() {
-
+ describe('given an archive with an invalid `manifest.json`', function () {
tester.expectError(
path.join(ZIP_PATH, 'etcher-test-invalid-manifest.zip'),
'Invalid archive manifest.json');
- describe('.getImageMetadata()', function() {
-
- it('should be rejected with an error', function() {
+ describe('.getImageMetadata()', function () {
+ it('should be rejected with an error', function () {
const image = path.join(ZIP_PATH, 'etcher-test-invalid-manifest.zip');
return imageStream.getImageMetadata(image).catch((error) => {
@@ -54,61 +51,56 @@ describe('ImageStream: Metadata ZIP', function() {
m.chai.expect(error.message).to.equal('Invalid archive manifest.json');
});
});
-
});
-
});
- describe('given an archive with a `manifest.json`', function() {
-
+ describe('given an archive with a `manifest.json`', function () {
const archive = path.join(ZIP_PATH, 'etcher-test-with-manifest.zip');
tester.extractFromFilePath(
archive,
path.join(IMAGES_PATH, 'etcher-test.img'));
- it('should read the manifest name property', function() {
+ it('should read the manifest name property', function () {
return testMetadataProperty(archive, 'name', 'Etcher Test');
});
- it('should read the manifest version property', function() {
+ it('should read the manifest version property', function () {
return testMetadataProperty(archive, 'version', '1.0.0');
});
- it('should read the manifest url property', function() {
+ it('should read the manifest url property', function () {
return testMetadataProperty(archive, 'url', 'https://www.example.com');
});
- it('should read the manifest supportUrl property', function() {
+ it('should read the manifest supportUrl property', function () {
const expectedValue = 'https://www.example.com/support/';
return testMetadataProperty(archive, 'supportUrl', expectedValue);
});
- it('should read the manifest releaseNotesUrl property', function() {
+ it('should read the manifest releaseNotesUrl property', function () {
const expectedValue = 'http://downloads.example.com/release_notes.txt';
return testMetadataProperty(archive, 'releaseNotesUrl', expectedValue);
});
- it('should read the manifest checksumType property', function() {
+ it('should read the manifest checksumType property', function () {
return testMetadataProperty(archive, 'checksumType', 'md5');
});
- it('should read the manifest checksum property', function() {
+ it('should read the manifest checksum property', function () {
return testMetadataProperty(archive, 'checksum', 'add060b285d512f56c175b76b7ef1bee');
});
- it('should read the manifest bytesToZeroOutFromTheBeginning property', function() {
+ it('should read the manifest bytesToZeroOutFromTheBeginning property', function () {
return testMetadataProperty(archive, 'bytesToZeroOutFromTheBeginning', 512);
});
- it('should read the manifest recommendedDriveSize property', function() {
+ it('should read the manifest recommendedDriveSize property', function () {
return testMetadataProperty(archive, 'recommendedDriveSize', 4294967296);
});
-
});
- describe('given an archive with a `logo.svg`', function() {
-
+ describe('given an archive with a `logo.svg`', function () {
const archive = path.join(ZIP_PATH, 'etcher-test-with-logo.zip');
const logo = [
@@ -118,14 +110,12 @@ describe('ImageStream: Metadata ZIP', function() {
''
].join('\n');
- it('should read the logo contents', function() {
+ it('should read the logo contents', function () {
return testMetadataProperty(archive, 'logo', logo);
});
-
});
- describe('given an archive with a bmap file', function() {
-
+ describe('given an archive with a bmap file', function () {
const archive = path.join(ZIP_PATH, 'etcher-test-with-bmap.zip');
const bmap = [
@@ -143,14 +133,12 @@ describe('ImageStream: Metadata ZIP', function() {
''
].join('\n');
- it('should read the bmap contents', function() {
+ it('should read the bmap contents', function () {
return testMetadataProperty(archive, 'bmap', bmap);
});
-
});
- describe('given an archive with instructions', function() {
-
+ describe('given an archive with instructions', function () {
const archive = path.join(ZIP_PATH, 'etcher-test-with-instructions.zip');
const instructions = [
@@ -160,10 +148,8 @@ describe('ImageStream: Metadata ZIP', function() {
''
].join('\n');
- it('should read the instruction contents', function() {
+ it('should read the instruction contents', function () {
return testMetadataProperty(archive, 'instructions', instructions);
});
-
});
-
});
diff --git a/tests/image-stream/mime.spec.js b/tests/image-stream/mime.spec.js
index 46f0cfe0..9a7c20fc 100644
--- a/tests/image-stream/mime.spec.js
+++ b/tests/image-stream/mime.spec.js
@@ -21,87 +21,83 @@ const path = require('path');
const DATA_PATH = path.join(__dirname, 'data');
const mime = require('../../lib/image-stream/mime');
-describe('ImageStream: MIME', function() {
-
- describe('.getMimeTypeFromFileName()', function() {
-
- it('should resolve application/x-bzip2 for a bz2 archive', function() {
+describe('ImageStream: MIME', function () {
+ describe('.getMimeTypeFromFileName()', function () {
+ it('should resolve application/x-bzip2 for a bz2 archive', function () {
const file = path.join(DATA_PATH, 'bz2', 'etcher-test.img.bz2');
return mime.getMimeTypeFromFileName(file).then((type) => {
m.chai.expect(type).to.equal('application/x-bzip2');
});
});
- it('should resolve application/x-xz for a xz archive', function() {
+ it('should resolve application/x-xz for a xz archive', function () {
const file = path.join(DATA_PATH, 'xz', 'etcher-test.img.xz');
return mime.getMimeTypeFromFileName(file).then((type) => {
m.chai.expect(type).to.equal('application/x-xz');
});
});
- it('should resolve application/gzip for a gz archive', function() {
+ it('should resolve application/gzip for a gz archive', function () {
const file = path.join(DATA_PATH, 'gz', 'etcher-test.img.gz');
return mime.getMimeTypeFromFileName(file).then((type) => {
m.chai.expect(type).to.equal('application/gzip');
});
});
- it('should resolve application/zip for a zip archive', function() {
+ it('should resolve application/zip for a zip archive', function () {
const file = path.join(DATA_PATH, 'zip', 'zip-directory-etcher-only.zip');
return mime.getMimeTypeFromFileName(file).then((type) => {
m.chai.expect(type).to.equal('application/zip');
});
});
- it('should resolve application/octet-stream for an uncompressed image', function() {
+ it('should resolve application/octet-stream for an uncompressed image', function () {
const file = path.join(DATA_PATH, 'images', 'etcher-test.img');
return mime.getMimeTypeFromFileName(file).then((type) => {
m.chai.expect(type).to.equal('application/octet-stream');
});
});
- it('should resolve application/x-iso9660-image for an uncompressed iso', function() {
+ it('should resolve application/x-iso9660-image for an uncompressed iso', function () {
const file = path.join(DATA_PATH, 'images', 'etcher-test.iso');
return mime.getMimeTypeFromFileName(file).then((type) => {
m.chai.expect(type).to.equal('application/x-iso9660-image');
});
});
- it('should resolve application/x-apple-diskimage for a compressed Apple disk image', function() {
+ it('should resolve application/x-apple-diskimage for a compressed Apple disk image', function () {
const file = path.join(DATA_PATH, 'dmg', 'etcher-test-zlib.dmg');
return mime.getMimeTypeFromFileName(file).then((type) => {
m.chai.expect(type).to.equal('application/x-apple-diskimage');
});
});
- it('should resolve application/x-apple-diskimage for an uncompressed Apple disk image', function() {
+ it('should resolve application/x-apple-diskimage for an uncompressed Apple disk image', function () {
const file = path.join(DATA_PATH, 'dmg', 'etcher-test-raw.dmg');
return mime.getMimeTypeFromFileName(file).then((type) => {
m.chai.expect(type).to.equal('application/x-apple-diskimage');
});
});
- it('should resolve application/octet-stream for an unrecognized file type', function() {
+ it('should resolve application/octet-stream for an unrecognized file type', function () {
const file = path.join(DATA_PATH, 'unrecognized', 'random.rpi-sdcard');
return mime.getMimeTypeFromFileName(file).then((type) => {
m.chai.expect(type).to.equal('application/octet-stream');
});
});
- it('should resolve the correct MIME type given an invalid extension', function() {
+ it('should resolve the correct MIME type given an invalid extension', function () {
const file = path.join(DATA_PATH, 'unrecognized', 'xz-with-invalid-extension.foo');
return mime.getMimeTypeFromFileName(file).then((type) => {
m.chai.expect(type).to.equal('application/x-xz');
});
});
- it('should resolve the correct MIME type given no extension', function() {
+ it('should resolve the correct MIME type given no extension', function () {
const file = path.join(DATA_PATH, 'unrecognized', 'xz-without-extension');
return mime.getMimeTypeFromFileName(file).then((type) => {
m.chai.expect(type).to.equal('application/x-xz');
});
});
-
});
-
});
diff --git a/tests/image-stream/tester.js b/tests/image-stream/tester.js
index 64ee1428..e9b8cab0 100644
--- a/tests/image-stream/tester.js
+++ b/tests/image-stream/tester.js
@@ -28,13 +28,13 @@ const doFilesContainTheSameData = (file1, file2) => {
return Bluebird.props({
file1: fs.readFileAsync(file1),
file2: fs.readFileAsync(file2)
- }).then(function(data) {
+ }).then(function (data) {
return _.isEqual(data.file1, data.file2);
});
};
const deleteIfExists = (file) => {
- return Bluebird.try(function() {
+ return Bluebird.try(function () {
if (fileExists(file)) {
return fs.unlinkAsync(file);
}
@@ -45,8 +45,8 @@ const deleteIfExists = (file) => {
exports.DEFAULT_IMAGE_TESTS_TIMEOUT = 20000;
-exports.expectError = function(file, errorMessage, errorDetail) {
- it('should be rejected with an error', function() {
+exports.expectError = function (file, errorMessage, errorDetail) {
+ it('should be rejected with an error', function () {
return imageStream.getFromFilePath(file).catch((error) => {
m.chai.expect(error).to.be.an.instanceof(Error);
m.chai.expect(error.message).to.equal(errorMessage);
@@ -59,11 +59,11 @@ exports.expectError = function(file, errorMessage, errorDetail) {
});
};
-exports.extractFromFilePath = function(file, image) {
- it('should be able to extract the image', function() {
+exports.extractFromFilePath = function (file, image) {
+ it('should be able to extract the image', function () {
const output = tmp.tmpNameSync();
- return imageStream.getFromFilePath(file).then(function(results) {
+ return imageStream.getFromFilePath(file).then(function (results) {
m.chai.expect(results.path).to.equal(file);
m.chai.expect(_.isString(results.extension)).to.be.true;
m.chai.expect(_.isEmpty(_.trim(results.extension))).to.be.false;
@@ -83,11 +83,11 @@ exports.extractFromFilePath = function(file, image) {
stream.on('error', reject);
stream.on('close', resolve);
});
- }).then(function() {
+ }).then(function () {
return doFilesContainTheSameData(image, output);
- }).then(function(areEqual) {
+ }).then(function (areEqual) {
m.chai.expect(areEqual).to.be.true;
- }).finally(function() {
+ }).finally(function () {
return deleteIfExists(output);
});
});
diff --git a/tests/image-stream/utils.spec.js b/tests/image-stream/utils.spec.js
index b4a9b800..f0f4c1f2 100644
--- a/tests/image-stream/utils.spec.js
+++ b/tests/image-stream/utils.spec.js
@@ -20,21 +20,15 @@ const m = require('mochainon');
const StreamReadable = require('stream').Readable;
const utils = require('../../lib/image-stream/utils');
-describe('ImageStream: Utils', function() {
-
- describe('.extractStream()', function() {
-
- describe('given a stream that emits data', function() {
-
- beforeEach(function() {
+describe('ImageStream: Utils', function () {
+ describe('.extractStream()', function () {
+ describe('given a stream that emits data', function () {
+ beforeEach(function () {
this.stream = new StreamReadable();
/* eslint-disable no-underscore-dangle */
-
- this.stream._read = function() {
-
+ this.stream._read = function () {
/* eslint-enable no-underscore-dangle */
-
this.push(Buffer.from('Hello', 'utf8'));
this.push(Buffer.from(' ', 'utf8'));
this.push(Buffer.from('World', 'utf8'));
@@ -42,38 +36,30 @@ describe('ImageStream: Utils', function() {
};
});
- it('should yield the stream data', function() {
+ it('should yield the stream data', function () {
return utils.extractStream(this.stream).then((data) => {
m.chai.expect(data.toString()).to.equal('Hello World');
});
});
-
});
- describe('given a stream that throws an error', function() {
-
- beforeEach(function() {
+ describe('given a stream that throws an error', function () {
+ beforeEach(function () {
this.stream = new StreamReadable();
/* eslint-disable no-underscore-dangle */
-
- this.stream._read = function() {
-
+ this.stream._read = function () {
/* eslint-enable no-underscore-dangle */
-
this.emit('error', new Error('stream error'));
};
});
- it('should be rejected with the error', function() {
+ it('should be rejected with the error', function () {
return utils.extractStream(this.stream).catch((error) => {
m.chai.expect(error).to.be.an.instanceof(Error);
m.chai.expect(error.message).to.equal('stream error');
});
});
-
});
-
});
-
});
diff --git a/tests/image-stream/xz.spec.js b/tests/image-stream/xz.spec.js
index 962681b4..16833348 100644
--- a/tests/image-stream/xz.spec.js
+++ b/tests/image-stream/xz.spec.js
@@ -25,23 +25,19 @@ const XZ_PATH = path.join(DATA_PATH, 'xz');
const imageStream = require('../../lib/image-stream/index');
const tester = require('./tester');
-describe('ImageStream: XZ', function() {
-
+describe('ImageStream: XZ', function () {
this.timeout(tester.DEFAULT_IMAGE_TESTS_TIMEOUT);
- describe('.getFromFilePath()', function() {
-
- describe('given a xz image', function() {
+ describe('.getFromFilePath()', function () {
+ describe('given a xz image', function () {
tester.extractFromFilePath(
path.join(XZ_PATH, 'etcher-test.img.xz'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
-
});
- describe('.getImageMetadata()', function() {
-
- it('should return the correct metadata', function() {
+ describe('.getImageMetadata()', function () {
+ it('should return the correct metadata', function () {
const image = path.join(XZ_PATH, 'etcher-test.img.xz');
const compressedSize = fs.statSync(image).size;
const uncompressedSize = fs.statSync(path.join(IMAGES_PATH, 'etcher-test.img')).size;
@@ -64,7 +60,5 @@ describe('ImageStream: XZ', function() {
});
});
});
-
});
-
});
diff --git a/tests/image-stream/zip.spec.js b/tests/image-stream/zip.spec.js
index 58eb2984..405c505a 100644
--- a/tests/image-stream/zip.spec.js
+++ b/tests/image-stream/zip.spec.js
@@ -25,53 +25,49 @@ const ZIP_PATH = path.join(DATA_PATH, 'zip');
const imageStream = require('../../lib/image-stream/index');
const tester = require('./tester');
-describe('ImageStream: ZIP', function() {
-
+describe('ImageStream: ZIP', function () {
this.timeout(tester.DEFAULT_IMAGE_TESTS_TIMEOUT);
- describe('.getFromFilePath()', function() {
-
- describe('given an empty zip directory', function() {
+ describe('.getFromFilePath()', function () {
+ describe('given an empty zip directory', function () {
tester.expectError(
path.join(ZIP_PATH, 'zip-directory-empty.zip'),
'Invalid archive image');
});
- describe('given a zip directory containing only misc files', function() {
+ describe('given a zip directory containing only misc files', function () {
tester.expectError(
path.join(ZIP_PATH, 'zip-directory-no-image-only-misc.zip'),
'Invalid archive image');
});
- describe('given a zip with an unsupported compression method', function() {
+ describe('given a zip with an unsupported compression method', function () {
tester.expectError(
path.join(ZIP_PATH, 'zip-deflate64.zip'),
'unsupported compression method: 9');
});
- describe('given a zip directory containing multiple images', function() {
+ describe('given a zip directory containing multiple images', function () {
tester.expectError(
path.join(ZIP_PATH, 'zip-directory-multiple-images.zip'),
'Invalid archive image');
});
- describe('given a zip directory containing only an image', function() {
+ describe('given a zip directory containing only an image', function () {
tester.extractFromFilePath(
path.join(ZIP_PATH, 'zip-directory-etcher-test-only.zip'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
- describe('given a zip directory containing an image and other misc files', function() {
+ describe('given a zip directory containing an image and other misc files', function () {
tester.extractFromFilePath(
path.join(ZIP_PATH, 'zip-directory-etcher-test-and-misc.zip'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
-
});
- describe('compression method', function() {
-
- context('DEFLATE', function() {
+ describe('compression method', function () {
+ context('DEFLATE', function () {
tester.extractFromFilePath(
path.join(ZIP_PATH, 'zip-deflate.zip'),
path.join(IMAGES_PATH, 'etcher-test.img'));
@@ -79,35 +75,33 @@ describe('ImageStream: ZIP', function() {
// NOTE: These tests are intentionally skipped, as the
// zip library we're currently using only supports deflate
- context.skip('DEFLATE64', function() {
+ context.skip('DEFLATE64', function () {
tester.extractFromFilePath(
path.join(ZIP_PATH, 'zip-deflate64.zip'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
- context.skip('PPMD', function() {
+ context.skip('PPMD', function () {
tester.extractFromFilePath(
path.join(ZIP_PATH, 'zip-ppmd.zip'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
- context.skip('BZIP2', function() {
+ context.skip('BZIP2', function () {
tester.extractFromFilePath(
path.join(ZIP_PATH, 'zip-bzip2.zip'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
- context.skip('LZMA', function() {
+ context.skip('LZMA', function () {
tester.extractFromFilePath(
path.join(ZIP_PATH, 'zip-lzma.zip'),
path.join(IMAGES_PATH, 'etcher-test.img'));
});
-
});
- describe('.getImageMetadata()', function() {
-
- it('should return the correct metadata', function() {
+ describe('.getImageMetadata()', function () {
+ it('should return the correct metadata', function () {
const image = path.join(ZIP_PATH, 'zip-directory-etcher-test-only.zip');
const expectedSize = fs.statSync(path.join(IMAGES_PATH, 'etcher-test.img')).size;
@@ -129,7 +123,5 @@ describe('ImageStream: ZIP', function() {
});
});
});
-
});
-
});
diff --git a/tests/shared/drive-constraints.spec.js b/tests/shared/drive-constraints.spec.js
index f893305e..7079e16f 100644
--- a/tests/shared/drive-constraints.spec.js
+++ b/tests/shared/drive-constraints.spec.js
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2017 resin.io
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use strict';
const m = require('mochainon');
@@ -5,11 +21,9 @@ const _ = require('lodash');
const path = require('path');
const constraints = require('../../lib/shared/drive-constraints');
-describe('Shared: DriveConstraints', function() {
-
- describe('.isDriveLocked()', function() {
-
- it('should return true if the drive is protected', function() {
+describe('Shared: DriveConstraints', function () {
+ describe('.isDriveLocked()', function () {
+ it('should return true if the drive is protected', function () {
const result = constraints.isDriveLocked({
device: '/dev/disk2',
name: 'USB Drive',
@@ -20,7 +34,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should return false if the drive is not protected', function() {
+ it('should return false if the drive is not protected', function () {
const result = constraints.isDriveLocked({
device: '/dev/disk2',
name: 'USB Drive',
@@ -31,7 +45,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- it('should return false if we don\'t know if the drive is protected', function() {
+ it('should return false if we don\'t know if the drive is protected', function () {
const result = constraints.isDriveLocked({
device: '/dev/disk2',
name: 'USB Drive',
@@ -41,17 +55,15 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- it('should return false if the drive is undefined', function() {
+ it('should return false if the drive is undefined', function () {
const result = constraints.isDriveLocked(undefined);
m.chai.expect(result).to.be.false;
});
-
});
- describe('.isSystemDrive()', function() {
-
- it('should return true if the drive is a system drive', function() {
+ describe('.isSystemDrive()', function () {
+ it('should return true if the drive is a system drive', function () {
const result = constraints.isSystemDrive({
device: '/dev/disk2',
name: 'USB Drive',
@@ -63,7 +75,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should default to `false` if the `system` property is `undefined`', function() {
+ it('should default to `false` if the `system` property is `undefined`', function () {
const result = constraints.isSystemDrive({
device: '/dev/disk2',
name: 'USB Drive',
@@ -74,7 +86,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- it('should return false if the drive is a removable drive', function() {
+ it('should return false if the drive is a removable drive', function () {
const result = constraints.isSystemDrive({
device: '/dev/disk2',
name: 'USB Drive',
@@ -86,17 +98,15 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- it('should return false if the drive is undefined', function() {
+ it('should return false if the drive is undefined', function () {
const result = constraints.isSystemDrive(undefined);
m.chai.expect(result).to.be.false;
});
-
});
- describe('.isSourceDrive()', function() {
-
- it('should return false if no image', function() {
+ describe('.isSourceDrive()', function () {
+ it('should return false if no image', function () {
const result = constraints.isSourceDrive({
device: '/dev/disk2',
name: 'USB Drive',
@@ -108,7 +118,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- it('should return false if no drive', function() {
+ it('should return false if no drive', function () {
const result = constraints.isSourceDrive(undefined, {
path: '/Volumes/Untitled/image.img'
});
@@ -116,7 +126,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- it('should return false if there are no mount points', function() {
+ it('should return false if there are no mount points', function () {
const result = constraints.isSourceDrive({
device: '/dev/disk2',
name: 'USB Drive',
@@ -130,18 +140,17 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- describe('given Windows paths', function() {
-
- beforeEach(function() {
+ describe('given Windows paths', function () {
+ beforeEach(function () {
this.separator = path.sep;
path.sep = '\\';
});
- afterEach(function() {
+ afterEach(function () {
path.sep = this.separator;
});
- it('should return true if the image lives directly inside a mount point of the drive', function() {
+ it('should return true if the image lives directly inside a mount point of the drive', function () {
const result = constraints.isSourceDrive({
mountpoints: [
{
@@ -158,7 +167,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should return true if the image lives inside a mount point of the drive', function() {
+ it('should return true if the image lives inside a mount point of the drive', function () {
const result = constraints.isSourceDrive({
mountpoints: [
{
@@ -175,7 +184,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should return false if the image does not live inside a mount point of the drive', function() {
+ it('should return false if the image does not live inside a mount point of the drive', function () {
const result = constraints.isSourceDrive({
mountpoints: [
{
@@ -192,7 +201,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- it('should return false if the image is in a mount point that is a substring of the image mount point', function() {
+ it('should return false if the image is in a mount point that is a substring of the image mount point', function () {
const result = constraints.isSourceDrive({
mountpoints: [
{
@@ -205,21 +214,19 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
-
});
- describe('given UNIX paths', function() {
-
- beforeEach(function() {
+ describe('given UNIX paths', function () {
+ beforeEach(function () {
this.separator = path.sep;
path.sep = '/';
});
- afterEach(function() {
+ afterEach(function () {
path.sep = this.separator;
});
- it('should return true if the mount point is / and the image lives directly inside it', function() {
+ it('should return true if the mount point is / and the image lives directly inside it', function () {
const result = constraints.isSourceDrive({
mountpoints: [
{
@@ -233,7 +240,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should return true if the image lives directly inside a mount point of the drive', function() {
+ it('should return true if the image lives directly inside a mount point of the drive', function () {
const result = constraints.isSourceDrive({
mountpoints: [
{
@@ -250,7 +257,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should return true if the image lives inside a mount point of the drive', function() {
+ it('should return true if the image lives inside a mount point of the drive', function () {
const result = constraints.isSourceDrive({
mountpoints: [
{
@@ -267,7 +274,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should return false if the image does not live inside a mount point of the drive', function() {
+ it('should return false if the image does not live inside a mount point of the drive', function () {
const result = constraints.isSourceDrive({
mountpoints: [
{
@@ -284,7 +291,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- it('should return false if the image is in a mount point that is a substring of the image mount point', function() {
+ it('should return false if the image is in a mount point that is a substring of the image mount point', function () {
const result = constraints.isSourceDrive({
mountpoints: [
{
@@ -297,14 +304,11 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
-
});
-
});
- describe('.isDriveLargeEnough()', function() {
-
- beforeEach(function() {
+ describe('.isDriveLargeEnough()', function () {
+ beforeEach(function () {
this.drive = {
device: '/dev/disk1',
name: 'USB Drive',
@@ -313,11 +317,9 @@ describe('Shared: DriveConstraints', function() {
};
});
- describe('given the final image size estimation flag is false', function() {
-
- describe('given the original size is less than the drive size', function() {
-
- beforeEach(function() {
+ describe('given the final image size estimation flag is false', function () {
+ describe('given the original size is less than the drive size', function () {
+ beforeEach(function () {
this.image = {
path: path.join(__dirname, 'rpi.img'),
size: {
@@ -329,26 +331,24 @@ describe('Shared: DriveConstraints', function() {
};
});
- it('should return true if the final size is less than the drive size', function() {
+ it('should return true if the final size is less than the drive size', function () {
this.image.size.final.value = this.drive.size - 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
- it('should return true if the final size is equal to the drive size', function() {
+ it('should return true if the final size is equal to the drive size', function () {
this.image.size.final.value = this.drive.size;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
- it('should return false if the final size is greater than the drive size', function() {
+ it('should return false if the final size is greater than the drive size', function () {
this.image.size.final.value = this.drive.size + 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.false;
});
-
});
- describe('given the original size is equal to the drive size', function() {
-
- beforeEach(function() {
+ describe('given the original size is equal to the drive size', function () {
+ beforeEach(function () {
this.image = {
path: path.join(__dirname, 'rpi.img'),
size: {
@@ -360,26 +360,24 @@ describe('Shared: DriveConstraints', function() {
};
});
- it('should return true if the final size is less than the drive size', function() {
+ it('should return true if the final size is less than the drive size', function () {
this.image.size.final.value = this.drive.size - 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
- it('should return true if the final size is equal to the drive size', function() {
+ it('should return true if the final size is equal to the drive size', function () {
this.image.size.final.value = this.drive.size;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
- it('should return false if the final size is greater than the drive size', function() {
+ it('should return false if the final size is greater than the drive size', function () {
this.image.size.final.value = this.drive.size + 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.false;
});
-
});
- describe('given the original size is greater than the drive size', function() {
-
- beforeEach(function() {
+ describe('given the original size is greater than the drive size', function () {
+ beforeEach(function () {
this.image = {
path: path.join(__dirname, 'rpi.img'),
size: {
@@ -391,30 +389,26 @@ describe('Shared: DriveConstraints', function() {
};
});
- it('should return true if the final size is less than the drive size', function() {
+ it('should return true if the final size is less than the drive size', function () {
this.image.size.final.value = this.drive.size - 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
- it('should return true if the final size is equal to the drive size', function() {
+ it('should return true if the final size is equal to the drive size', function () {
this.image.size.final.value = this.drive.size;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
- it('should return false if the final size is greater than the drive size', function() {
+ it('should return false if the final size is greater than the drive size', function () {
this.image.size.final.value = this.drive.size + 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.false;
});
-
});
-
});
- describe('given the final image size estimation flag is true', function() {
-
- describe('given the original size is less than the drive size', function() {
-
- beforeEach(function() {
+ describe('given the final image size estimation flag is true', function () {
+ describe('given the original size is less than the drive size', function () {
+ beforeEach(function () {
this.image = {
path: path.join(__dirname, 'rpi.img'),
size: {
@@ -426,26 +420,24 @@ describe('Shared: DriveConstraints', function() {
};
});
- it('should return true if the final size is less than the drive size', function() {
+ it('should return true if the final size is less than the drive size', function () {
this.image.size.final.value = this.drive.size - 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
- it('should return true if the final size is equal to the drive size', function() {
+ it('should return true if the final size is equal to the drive size', function () {
this.image.size.final.value = this.drive.size;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
- it('should return true if the final size is greater than the drive size', function() {
+ it('should return true if the final size is greater than the drive size', function () {
this.image.size.final.value = this.drive.size + 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
-
});
- describe('given the original size is equal to the drive size', function() {
-
- beforeEach(function() {
+ describe('given the original size is equal to the drive size', function () {
+ beforeEach(function () {
this.image = {
path: path.join(__dirname, 'rpi.img'),
size: {
@@ -457,26 +449,24 @@ describe('Shared: DriveConstraints', function() {
};
});
- it('should return true if the final size is less than the drive size', function() {
+ it('should return true if the final size is less than the drive size', function () {
this.image.size.final.value = this.drive.size - 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
- it('should return true if the final size is equal to the drive size', function() {
+ it('should return true if the final size is equal to the drive size', function () {
this.image.size.final.value = this.drive.size;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
- it('should return true if the final size is greater than the drive size', function() {
+ it('should return true if the final size is greater than the drive size', function () {
this.image.size.final.value = this.drive.size + 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.true;
});
-
});
- describe('given the original size is greater than the drive size', function() {
-
- beforeEach(function() {
+ describe('given the original size is greater than the drive size', function () {
+ beforeEach(function () {
this.image = {
path: path.join(__dirname, 'rpi.img'),
size: {
@@ -488,26 +478,24 @@ describe('Shared: DriveConstraints', function() {
};
});
- it('should return false if the final size is less than the drive size', function() {
+ it('should return false if the final size is less than the drive size', function () {
this.image.size.final.value = this.drive.size - 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.false;
});
- it('should return false if the final size is equal to the drive size', function() {
+ it('should return false if the final size is equal to the drive size', function () {
this.image.size.final.value = this.drive.size;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.false;
});
- it('should return false if the final size is greater than the drive size', function() {
+ it('should return false if the final size is greater than the drive size', function () {
this.image.size.final.value = this.drive.size + 1;
m.chai.expect(constraints.isDriveLargeEnough(this.drive, this.image)).to.be.false;
});
-
});
-
});
- it('should return false if the drive is undefined', function() {
+ it('should return false if the drive is undefined', function () {
const result = constraints.isDriveLargeEnough(undefined, {
path: path.join(__dirname, 'rpi.img'),
size: {
@@ -522,7 +510,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- it('should return true if the image is undefined', function() {
+ it('should return true if the image is undefined', function () {
const result = constraints.isDriveLargeEnough({
device: '/dev/disk1',
name: 'USB Drive',
@@ -533,16 +521,14 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should return false if the drive and image are undefined', function() {
+ it('should return false if the drive and image are undefined', function () {
const result = constraints.isDriveLargeEnough(undefined, undefined);
m.chai.expect(result).to.be.true;
});
-
});
- describe('.isDriveSizeRecommended()', function() {
-
- it('should return true if the drive size is greater than the recommended size ', function() {
+ describe('.isDriveSizeRecommended()', function () {
+ it('should return true if the drive size is greater than the recommended size ', function () {
const result = constraints.isDriveSizeRecommended({
device: '/dev/disk1',
name: 'USB Drive',
@@ -557,7 +543,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should return true if the drive size is equal to recommended size', function() {
+ it('should return true if the drive size is equal to recommended size', function () {
const result = constraints.isDriveSizeRecommended({
device: '/dev/disk1',
name: 'USB Drive',
@@ -572,7 +558,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should return false if the drive size is less than the recommended size', function() {
+ it('should return false if the drive size is less than the recommended size', function () {
const result = constraints.isDriveSizeRecommended({
device: '/dev/disk1',
name: 'USB Drive',
@@ -587,7 +573,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- it('should return true if the recommended drive size is undefined', function() {
+ it('should return true if the recommended drive size is undefined', function () {
const result = constraints.isDriveSizeRecommended({
device: '/dev/disk1',
name: 'USB Drive',
@@ -601,7 +587,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should return false if the drive is undefined', function() {
+ it('should return false if the drive is undefined', function () {
const result = constraints.isDriveSizeRecommended(undefined, {
path: path.join(__dirname, 'rpi.img'),
size: 1000000000,
@@ -611,7 +597,7 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.false;
});
- it('should return true if the image is undefined', function() {
+ it('should return true if the image is undefined', function () {
const result = constraints.isDriveSizeRecommended({
device: '/dev/disk1',
name: 'USB Drive',
@@ -622,16 +608,14 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.be.true;
});
- it('should return false if the drive and image are undefined', function() {
+ it('should return false if the drive and image are undefined', function () {
const result = constraints.isDriveSizeRecommended(undefined, undefined);
m.chai.expect(result).to.be.true;
});
-
});
- describe('.isDriveValid()', function() {
-
- beforeEach(function() {
+ describe('.isDriveValid()', function () {
+ beforeEach(function () {
if (process.platform === 'win32') {
this.mountpoint = 'E:\\foo';
} else {
@@ -650,13 +634,12 @@ describe('Shared: DriveConstraints', function() {
};
});
- describe('given the drive is locked', function() {
-
- beforeEach(function() {
+ describe('given the drive is locked', function () {
+ beforeEach(function () {
this.drive.protected = true;
});
- it('should return false if the drive is not large enough and is a source drive', function() {
+ it('should return false if the drive is not large enough and is a source drive', function () {
m.chai.expect(constraints.isDriveValid(this.drive, {
path: path.join(this.mountpoint, 'rpi.img'),
size: {
@@ -669,7 +652,7 @@ describe('Shared: DriveConstraints', function() {
})).to.be.false;
});
- it('should return false if the drive is not large enough and is not a source drive', function() {
+ it('should return false if the drive is not large enough and is not a source drive', function () {
m.chai.expect(constraints.isDriveValid(this.drive, {
path: path.resolve(this.mountpoint, '../bar/rpi.img'),
size: {
@@ -682,7 +665,7 @@ describe('Shared: DriveConstraints', function() {
})).to.be.false;
});
- it('should return false if the drive is large enough and is a source drive', function() {
+ it('should return false if the drive is large enough and is a source drive', function () {
m.chai.expect(constraints.isDriveValid(this.drive, {
path: path.join(this.mountpoint, 'rpi.img'),
size: {
@@ -695,7 +678,7 @@ describe('Shared: DriveConstraints', function() {
})).to.be.false;
});
- it('should return false if the drive is large enough and is not a source drive', function() {
+ it('should return false if the drive is large enough and is not a source drive', function () {
m.chai.expect(constraints.isDriveValid(this.drive, {
path: path.resolve(this.mountpoint, '../bar/rpi.img'),
size: {
@@ -707,16 +690,14 @@ describe('Shared: DriveConstraints', function() {
}
})).to.be.false;
});
-
});
- describe('given the drive is not locked', function() {
-
- beforeEach(function() {
+ describe('given the drive is not locked', function () {
+ beforeEach(function () {
this.drive.protected = false;
});
- it('should return false if the drive is not large enough and is a source drive', function() {
+ it('should return false if the drive is not large enough and is a source drive', function () {
m.chai.expect(constraints.isDriveValid(this.drive, {
path: path.join(this.mountpoint, 'rpi.img'),
size: {
@@ -729,7 +710,7 @@ describe('Shared: DriveConstraints', function() {
})).to.be.false;
});
- it('should return false if the drive is not large enough and is not a source drive', function() {
+ it('should return false if the drive is not large enough and is not a source drive', function () {
m.chai.expect(constraints.isDriveValid(this.drive, {
path: path.resolve(this.mountpoint, '../bar/rpi.img'),
size: {
@@ -742,7 +723,7 @@ describe('Shared: DriveConstraints', function() {
})).to.be.false;
});
- it('should return false if the drive is large enough and is a source drive', function() {
+ it('should return false if the drive is large enough and is a source drive', function () {
m.chai.expect(constraints.isDriveValid(this.drive, {
path: path.join(this.mountpoint, 'rpi.img'),
size: {
@@ -755,7 +736,7 @@ describe('Shared: DriveConstraints', function() {
})).to.be.false;
});
- it('should return true if the drive is large enough and is not a source drive', function() {
+ it('should return true if the drive is large enough and is not a source drive', function () {
m.chai.expect(constraints.isDriveValid(this.drive, {
path: path.resolve(this.mountpoint, '../bar/rpi.img'),
size: {
@@ -767,14 +748,11 @@ describe('Shared: DriveConstraints', function() {
}
})).to.be.true;
});
-
});
-
});
- describe('.getDriveImageCompatibilityStatuses', function() {
-
- beforeEach(function() {
+ describe('.getDriveImageCompatibilityStatuses', function () {
+ beforeEach(function () {
if (process.platform === 'win32') {
this.mountpoint = 'E:';
this.separator = '\\';
@@ -808,7 +786,6 @@ describe('Shared: DriveConstraints', function() {
});
const expectStatusTypesAndMessagesToBe = (resultList, expectedTuples) => {
-
// Sort so that order doesn't matter
const expectedTuplesSorted = _.sortBy(_.map(expectedTuples, (tuple) => {
return {
@@ -822,8 +799,7 @@ describe('Shared: DriveConstraints', function() {
};
describe('given there are no errors or warnings', () => {
-
- it('should return an empty list', function() {
+ it('should return an empty list', function () {
const result = constraints.getDriveImageCompatibilityStatuses(this.drive, {
path: '/mnt/disk2/rpi.img',
size: 1000000000
@@ -831,12 +807,10 @@ describe('Shared: DriveConstraints', function() {
m.chai.expect(result).to.deep.equal([]);
});
-
});
describe('given the drive contains the image', () => {
-
- it('should return the contains-image error', function() {
+ it('should return the contains-image error', function () {
this.image.path = path.join(this.mountpoint, 'rpi.img');
const result = constraints.getDriveImageCompatibilityStatuses(this.drive, this.image);
@@ -844,12 +818,10 @@ describe('Shared: DriveConstraints', function() {
expectStatusTypesAndMessagesToBe(result, expectedTuples);
});
-
});
describe('given the drive is a system drive', () => {
-
- it('should return the system drive warning', function() {
+ it('should return the system drive warning', function () {
this.drive.system = true;
const result = constraints.getDriveImageCompatibilityStatuses(this.drive, this.image);
@@ -857,12 +829,10 @@ describe('Shared: DriveConstraints', function() {
expectStatusTypesAndMessagesToBe(result, expectedTuples);
});
-
});
describe('given the drive is too small', () => {
-
- it('should return the too small error', function() {
+ it('should return the too small error', function () {
this.image.size.final.value = this.drive.size + 1;
const result = constraints.getDriveImageCompatibilityStatuses(this.drive, this.image);
@@ -870,12 +840,10 @@ describe('Shared: DriveConstraints', function() {
expectStatusTypesAndMessagesToBe(result, expectedTuples);
});
-
});
describe('given the drive is locked', () => {
-
- it('should return the locked drive error', function() {
+ it('should return the locked drive error', function () {
this.drive.protected = true;
const result = constraints.getDriveImageCompatibilityStatuses(this.drive, this.image);
@@ -883,12 +851,10 @@ describe('Shared: DriveConstraints', function() {
expectStatusTypesAndMessagesToBe(result, expectedTuples);
});
-
});
describe('given the drive is smaller than the recommended size', () => {
-
- it('should return the smaller than recommended size warning', function() {
+ it('should return the smaller than recommended size warning', function () {
this.image.recommendedDriveSize = this.drive.size + 1;
const result = constraints.getDriveImageCompatibilityStatuses(this.drive, this.image);
@@ -896,32 +862,26 @@ describe('Shared: DriveConstraints', function() {
expectStatusTypesAndMessagesToBe(result, expectedTuples);
});
-
});
describe('given the image is null', () => {
-
- it('should return an empty list', function() {
+ it('should return an empty list', function () {
const result = constraints.getDriveImageCompatibilityStatuses(this.drive, null);
m.chai.expect(result).to.deep.equal([]);
});
-
});
describe('given the drive is null', () => {
-
- it('should return an empty list', function() {
+ it('should return an empty list', function () {
const result = constraints.getDriveImageCompatibilityStatuses(null, this.image);
m.chai.expect(result).to.deep.equal([]);
});
-
});
describe('given a locked drive and image is null', () => {
-
- it('should return locked drive error', function() {
+ it('should return locked drive error', function () {
this.drive.protected = true;
const result = constraints.getDriveImageCompatibilityStatuses(this.drive, null);
@@ -929,12 +889,10 @@ describe('Shared: DriveConstraints', function() {
expectStatusTypesAndMessagesToBe(result, expectedTuples);
});
-
});
describe('given a system drive and image is null', () => {
-
- it('should return system drive warning', function() {
+ it('should return system drive warning', function () {
this.drive.system = true;
const result = constraints.getDriveImageCompatibilityStatuses(this.drive, null);
@@ -942,12 +900,10 @@ describe('Shared: DriveConstraints', function() {
expectStatusTypesAndMessagesToBe(result, expectedTuples);
});
-
});
describe('given the drive contains the image and the drive is locked', () => {
-
- it('should return the contains-image drive error by precedence', function() {
+ it('should return the contains-image drive error by precedence', function () {
this.drive.protected = true;
this.image.path = path.join(this.mountpoint, 'rpi.img');
@@ -956,12 +912,10 @@ describe('Shared: DriveConstraints', function() {
expectStatusTypesAndMessagesToBe(result, expectedTuples);
});
-
});
describe('given a locked and too small drive', () => {
-
- it('should return the locked error by precedence', function() {
+ it('should return the locked error by precedence', function () {
this.drive.protected = true;
const result = constraints.getDriveImageCompatibilityStatuses(this.drive, this.image);
@@ -969,12 +923,10 @@ describe('Shared: DriveConstraints', function() {
expectStatusTypesAndMessagesToBe(result, expectedTuples);
});
-
});
describe('given a too small and system drive', () => {
-
- it('should return the too small drive error by precedence', function() {
+ it('should return the too small drive error by precedence', function () {
this.image.size.final.value = this.drive.size + 1;
this.drive.system = true;
@@ -983,12 +935,10 @@ describe('Shared: DriveConstraints', function() {
expectStatusTypesAndMessagesToBe(result, expectedTuples);
});
-
});
describe('given a system drive and not recommended drive size', () => {
-
- it('should return both warnings', function() {
+ it('should return both warnings', function () {
this.drive.system = true;
this.image.recommendedDriveSize = this.drive.size + 1;
@@ -997,8 +947,6 @@ describe('Shared: DriveConstraints', function() {
expectStatusTypesAndMessagesToBe(result, expectedTuples);
});
-
});
});
-
});
diff --git a/tests/shared/errors.spec.js b/tests/shared/errors.spec.js
index 9a0f11d1..126dbfe6 100644
--- a/tests/shared/errors.spec.js
+++ b/tests/shared/errors.spec.js
@@ -20,94 +20,90 @@ const m = require('mochainon');
const _ = require('lodash');
const errors = require('../../lib/shared/errors');
-describe('Shared: Errors', function() {
-
- describe('.HUMAN_FRIENDLY', function() {
-
- it('should be a plain object', function() {
+describe('Shared: Errors', function () {
+ describe('.HUMAN_FRIENDLY', function () {
+ it('should be a plain object', function () {
m.chai.expect(_.isPlainObject(errors.HUMAN_FRIENDLY)).to.be.true;
});
- it('should contain title and description function properties', function() {
+ it('should contain title and description function properties', function () {
m.chai.expect(_.every(_.map(errors.HUMAN_FRIENDLY, (error) => {
return _.isFunction(error.title) && _.isFunction(error.description);
}))).to.be.true;
});
-
});
- describe('.getTitle()', function() {
-
- it('should accept a string', function() {
+ describe('.getTitle()', function () {
+ it('should accept a string', function () {
const error = 'This is an error';
m.chai.expect(errors.getTitle(error)).to.equal('This is an error');
});
- it('should accept a number 0', function() {
+ it('should accept a number 0', function () {
const error = 0;
m.chai.expect(errors.getTitle(error)).to.equal('0');
});
- it('should accept a number 1', function() {
+ it('should accept a number 1', function () {
const error = 1;
m.chai.expect(errors.getTitle(error)).to.equal('1');
});
- it('should accept a number -1', function() {
+ it('should accept a number -1', function () {
const error = -1;
m.chai.expect(errors.getTitle(error)).to.equal('-1');
});
- it('should accept an array', function() {
+ it('should accept an array', function () {
const error = [ 0, 1, 2 ];
m.chai.expect(errors.getTitle(error)).to.equal('0,1,2');
});
- it('should return a generic error message if the error is an empty object', function() {
+ it('should return a generic error message if the error is an empty object', function () {
const error = {};
m.chai.expect(errors.getTitle(error)).to.equal('An error ocurred');
});
- it('should return a generic error message if the error is undefined', function() {
+ it('should return a generic error message if the error is undefined', function () {
const error = undefined;
m.chai.expect(errors.getTitle(error)).to.equal('An error ocurred');
});
- it('should return a generic error message if the error is null', function() {
+ it('should return a generic error message if the error is null', function () {
const error = null;
m.chai.expect(errors.getTitle(error)).to.equal('An error ocurred');
});
- it('should return the error message', function() {
+ it('should return the error message', function () {
const error = new Error('This is an error');
m.chai.expect(errors.getTitle(error)).to.equal('This is an error');
});
- it('should return the error code if there is no message', function() {
+ it('should return the error code if there is no message', function () {
const error = new Error();
error.code = 'MYERROR';
m.chai.expect(errors.getTitle(error)).to.equal('Error code: MYERROR');
});
- it('should prioritise the message over the code', function() {
+ it('should prioritise the message over the code', function () {
const error = new Error('Foo bar');
error.code = 'MYERROR';
m.chai.expect(errors.getTitle(error)).to.equal('Foo bar');
});
- it('should prioritise the code over the message if the message is an empty string', function() {
+ it('should prioritise the code over the message if the message is an empty string', function () {
const error = new Error('');
error.code = 'MYERROR';
m.chai.expect(errors.getTitle(error)).to.equal('Error code: MYERROR');
});
- it('should prioritise the code over the message if the message is a blank string', function() {
+ it('should prioritise the code over the message if the message is a blank string', function () {
const error = new Error(' ');
error.code = 'MYERROR';
m.chai.expect(errors.getTitle(error)).to.equal('Error code: MYERROR');
});
- it('should understand an error-like object with a code', function() {
+ it('should understand an error-like object with a code', function () {
const error = {
code: 'MYERROR'
};
@@ -115,7 +111,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getTitle(error)).to.equal('Error code: MYERROR');
});
- it('should understand an error-like object with a message', function() {
+ it('should understand an error-like object with a message', function () {
const error = {
message: 'Hello world'
};
@@ -123,7 +119,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getTitle(error)).to.equal('Hello world');
});
- it('should understand an error-like object with a message and a code', function() {
+ it('should understand an error-like object with a message and a code', function () {
const error = {
message: 'Hello world',
code: 'MYERROR'
@@ -132,111 +128,109 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getTitle(error)).to.equal('Hello world');
});
- it('should display an error code 0', function() {
+ it('should display an error code 0', function () {
const error = new Error();
error.code = 0;
m.chai.expect(errors.getTitle(error)).to.equal('Error code: 0');
});
- it('should display an error code 1', function() {
+ it('should display an error code 1', function () {
const error = new Error();
error.code = 1;
m.chai.expect(errors.getTitle(error)).to.equal('Error code: 1');
});
- it('should display an error code -1', function() {
+ it('should display an error code -1', function () {
const error = new Error();
error.code = -1;
m.chai.expect(errors.getTitle(error)).to.equal('Error code: -1');
});
- it('should not display an empty string error code', function() {
+ it('should not display an empty string error code', function () {
const error = new Error();
error.code = '';
m.chai.expect(errors.getTitle(error)).to.equal('An error ocurred');
});
- it('should not display a blank string error code', function() {
+ it('should not display a blank string error code', function () {
const error = new Error();
error.code = ' ';
m.chai.expect(errors.getTitle(error)).to.equal('An error ocurred');
});
- it('should return a generic error message if no information was found', function() {
+ it('should return a generic error message if no information was found', function () {
const error = new Error();
m.chai.expect(errors.getTitle(error)).to.equal('An error ocurred');
});
- it('should return a generic error message if no code and the message is empty', function() {
+ it('should return a generic error message if no code and the message is empty', function () {
const error = new Error('');
m.chai.expect(errors.getTitle(error)).to.equal('An error ocurred');
});
- it('should return a generic error message if no code and the message is blank', function() {
+ it('should return a generic error message if no code and the message is blank', function () {
const error = new Error(' ');
m.chai.expect(errors.getTitle(error)).to.equal('An error ocurred');
});
- it('should rephrase an ENOENT error', function() {
+ it('should rephrase an ENOENT error', function () {
const error = new Error('ENOENT error');
error.path = '/foo/bar';
error.code = 'ENOENT';
m.chai.expect(errors.getTitle(error)).to.equal('No such file or directory: /foo/bar');
});
- it('should rephrase an EPERM error', function() {
+ it('should rephrase an EPERM error', function () {
const error = new Error('EPERM error');
error.code = 'EPERM';
m.chai.expect(errors.getTitle(error)).to.equal('You\'re not authorized to perform this operation');
});
- it('should rephrase an EACCES error', function() {
+ it('should rephrase an EACCES error', function () {
const error = new Error('EACCES error');
error.code = 'EACCES';
m.chai.expect(errors.getTitle(error)).to.equal('You don\'t have access to this resource');
});
- it('should rephrase an ENOMEM error', function() {
+ it('should rephrase an ENOMEM error', function () {
const error = new Error('ENOMEM error');
error.code = 'ENOMEM';
m.chai.expect(errors.getTitle(error)).to.equal('Your system ran out of memory');
});
-
});
- describe('.getDescription()', function() {
-
- it('should return an empty string if the error is a string', function() {
+ describe('.getDescription()', function () {
+ it('should return an empty string if the error is a string', function () {
const error = 'My error';
m.chai.expect(errors.getDescription(error)).to.equal('');
});
- it('should return an empty string if the error is a number', function() {
+ it('should return an empty string if the error is a number', function () {
const error = 0;
m.chai.expect(errors.getDescription(error)).to.equal('');
});
- it('should return an empty string if the error is an array', function() {
+ it('should return an empty string if the error is an array', function () {
const error = [ 1, 2, 3 ];
m.chai.expect(errors.getDescription(error)).to.equal('');
});
- it('should return an empty string if the error is undefined', function() {
+ it('should return an empty string if the error is undefined', function () {
const error = undefined;
m.chai.expect(errors.getDescription(error)).to.equal('');
});
- it('should return an empty string if the error is null', function() {
+ it('should return an empty string if the error is null', function () {
const error = null;
m.chai.expect(errors.getDescription(error)).to.equal('');
});
- it('should return an empty string if the error is an empty object', function() {
+ it('should return an empty string if the error is an empty object', function () {
const error = {};
m.chai.expect(errors.getDescription(error)).to.equal('');
});
- it('should understand an error-like object with a description', function() {
+ it('should understand an error-like object with a description', function () {
const error = {
description: 'My description'
};
@@ -244,7 +238,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getDescription(error)).to.equal('My description');
});
- it('should understand an error-like object with a stack', function() {
+ it('should understand an error-like object with a stack', function () {
const error = {
stack: 'My stack'
};
@@ -252,7 +246,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getDescription(error)).to.equal('My stack');
});
- it('should understand an error-like object with a description and a stack', function() {
+ it('should understand an error-like object with a description and a stack', function () {
const error = {
description: 'My description',
stack: 'My stack'
@@ -261,7 +255,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getDescription(error)).to.equal('My description');
});
- it('should stringify and beautify an object without any known property', function() {
+ it('should stringify and beautify an object without any known property', function () {
const error = {
name: 'John Doe',
job: 'Developer'
@@ -275,72 +269,71 @@ describe('Shared: Errors', function() {
].join('\n'));
});
- it('should return the stack for a basic error', function() {
+ it('should return the stack for a basic error', function () {
const error = new Error('Foo');
m.chai.expect(errors.getDescription(error)).to.equal(error.stack);
});
- it('should prefer a description property to a stack', function() {
+ it('should prefer a description property to a stack', function () {
const error = new Error('Foo');
error.description = 'My description';
m.chai.expect(errors.getDescription(error)).to.equal('My description');
});
- it('should return the stack if the description is an empty string', function() {
+ it('should return the stack if the description is an empty string', function () {
const error = new Error('Foo');
error.description = '';
m.chai.expect(errors.getDescription(error)).to.equal(error.stack);
});
- it('should return the stack if the description is a blank string', function() {
+ it('should return the stack if the description is a blank string', function () {
const error = new Error('Foo');
error.description = ' ';
m.chai.expect(errors.getDescription(error)).to.equal(error.stack);
});
- it('should get a generic description for ENOENT', function() {
+ it('should get a generic description for ENOENT', function () {
const error = new Error('Foo');
error.code = 'ENOENT';
m.chai.expect(errors.getDescription(error)).to.equal('The file you\'re trying to access doesn\'t exist');
});
- it('should get a generic description for EPERM', function() {
+ it('should get a generic description for EPERM', function () {
const error = new Error('Foo');
error.code = 'EPERM';
m.chai.expect(errors.getDescription(error)).to.equal('Please ensure you have necessary permissions for this task');
});
- it('should get a generic description for EACCES', function() {
+ it('should get a generic description for EACCES', function () {
const error = new Error('Foo');
error.code = 'EACCES';
const message = 'Please ensure you have necessary permissions to access this resource';
m.chai.expect(errors.getDescription(error)).to.equal(message);
});
- it('should get a generic description for ENOMEM', function() {
+ it('should get a generic description for ENOMEM', function () {
const error = new Error('Foo');
error.code = 'ENOMEM';
const message = 'Please make sure your system has enough available memory for this task';
m.chai.expect(errors.getDescription(error)).to.equal(message);
});
- it('should prefer a description property than a code description', function() {
+ it('should prefer a description property than a code description', function () {
const error = new Error('Foo');
error.code = 'ENOMEM';
error.description = 'Memory error';
m.chai.expect(errors.getDescription(error)).to.equal('Memory error');
});
- describe('given userFriendlyDescriptionsOnly is false', function() {
-
- it('should return the stack for a basic error', function() {
+ describe('given userFriendlyDescriptionsOnly is false', function () {
+ it('should return the stack for a basic error', function () {
const error = new Error('Foo');
m.chai.expect(errors.getDescription(error, {
userFriendlyDescriptionsOnly: false
})).to.equal(error.stack);
});
- it('should return the stack if the description is an empty string', function() {
+ it('should return the stack if the description is an empty string', function () {
const error = new Error('Foo');
error.description = '';
m.chai.expect(errors.getDescription(error, {
@@ -348,26 +341,24 @@ describe('Shared: Errors', function() {
})).to.equal(error.stack);
});
- it('should return the stack if the description is a blank string', function() {
+ it('should return the stack if the description is a blank string', function () {
const error = new Error('Foo');
error.description = ' ';
m.chai.expect(errors.getDescription(error, {
userFriendlyDescriptionsOnly: false
})).to.equal(error.stack);
});
-
});
- describe('given userFriendlyDescriptionsOnly is true', function() {
-
- it('should return an empty string for a basic error', function() {
+ describe('given userFriendlyDescriptionsOnly is true', function () {
+ it('should return an empty string for a basic error', function () {
const error = new Error('Foo');
m.chai.expect(errors.getDescription(error, {
userFriendlyDescriptionsOnly: true
})).to.equal('');
});
- it('should return an empty string if the description is an empty string', function() {
+ it('should return an empty string if the description is an empty string', function () {
const error = new Error('Foo');
error.description = '';
m.chai.expect(errors.getDescription(error, {
@@ -375,21 +366,18 @@ describe('Shared: Errors', function() {
})).to.equal('');
});
- it('should return an empty string if the description is a blank string', function() {
+ it('should return an empty string if the description is a blank string', function () {
const error = new Error('Foo');
error.description = ' ';
m.chai.expect(errors.getDescription(error, {
userFriendlyDescriptionsOnly: true
})).to.equal('');
});
-
});
-
});
- describe('.createError()', function() {
-
- it('should not be a user error', function() {
+ describe('.createError()', function () {
+ it('should not be a user error', function () {
const error = errors.createError({
title: 'Foo',
description: 'Something happened'
@@ -398,7 +386,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.isUserError(error)).to.be.false;
});
- it('should be a user error if `options.report` is false', function() {
+ it('should be a user error if `options.report` is false', function () {
const error = errors.createError({
title: 'Foo',
description: 'Something happened',
@@ -408,7 +396,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.isUserError(error)).to.be.true;
});
- it('should be a user error if `options.report` evaluates to false', function() {
+ it('should be a user error if `options.report` evaluates to false', function () {
const error = errors.createError({
title: 'Foo',
description: 'Something happened',
@@ -418,7 +406,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.isUserError(error)).to.be.true;
});
- it('should not be a user error if `options.report` is true', function() {
+ it('should not be a user error if `options.report` is true', function () {
const error = errors.createError({
title: 'Foo',
description: 'Something happened',
@@ -428,7 +416,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.isUserError(error)).to.be.false;
});
- it('should not be a user error if `options.report` evaluates to true', function() {
+ it('should not be a user error if `options.report` evaluates to true', function () {
const error = errors.createError({
title: 'Foo',
description: 'Something happened',
@@ -438,7 +426,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.isUserError(error)).to.be.false;
});
- it('should be an instance of Error', function() {
+ it('should be an instance of Error', function () {
const error = errors.createError({
title: 'Foo',
description: 'Something happened'
@@ -447,7 +435,7 @@ describe('Shared: Errors', function() {
m.chai.expect(error).to.be.an.instanceof(Error);
});
- it('should correctly add both a title and a description', function() {
+ it('should correctly add both a title and a description', function () {
const error = errors.createError({
title: 'Foo',
description: 'Something happened'
@@ -457,7 +445,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getDescription(error)).to.equal('Something happened');
});
- it('should correctly add only a title', function() {
+ it('should correctly add only a title', function () {
const error = errors.createError({
title: 'Foo'
});
@@ -466,7 +454,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getDescription(error)).to.equal(error.stack);
});
- it('should ignore an empty description', function() {
+ it('should ignore an empty description', function () {
const error = errors.createError({
title: 'Foo',
description: ''
@@ -475,7 +463,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getDescription(error)).to.equal(error.stack);
});
- it('should ignore a blank description', function() {
+ it('should ignore a blank description', function () {
const error = errors.createError({
title: 'Foo',
description: ' '
@@ -484,13 +472,13 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getDescription(error)).to.equal(error.stack);
});
- it('should throw if no title', function() {
+ it('should throw if no title', function () {
m.chai.expect(() => {
errors.createError({});
}).to.throw('Invalid error title: undefined');
});
- it('should throw if there is a description but no title', function() {
+ it('should throw if there is a description but no title', function () {
m.chai.expect(() => {
errors.createError({
description: 'foo'
@@ -498,7 +486,7 @@ describe('Shared: Errors', function() {
}).to.throw('Invalid error title: undefined');
});
- it('should throw if title is empty', function() {
+ it('should throw if title is empty', function () {
m.chai.expect(() => {
errors.createError({
title: ''
@@ -506,19 +494,17 @@ describe('Shared: Errors', function() {
}).to.throw('Invalid error title: ');
});
- it('should throw if title is blank', function() {
+ it('should throw if title is blank', function () {
m.chai.expect(() => {
errors.createError({
title: ' '
});
}).to.throw('Invalid error title: ');
});
-
});
- describe('.createUserError()', function() {
-
- it('should be a user error', function() {
+ describe('.createUserError()', function () {
+ it('should be a user error', function () {
const error = errors.createUserError({
title: 'Foo',
description: 'Something happened'
@@ -527,7 +513,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.isUserError(error)).to.be.true;
});
- it('should be an instance of Error', function() {
+ it('should be an instance of Error', function () {
const error = errors.createUserError({
title: 'Foo',
description: 'Something happened'
@@ -536,7 +522,7 @@ describe('Shared: Errors', function() {
m.chai.expect(error).to.be.an.instanceof(Error);
});
- it('should correctly add both a title and a description', function() {
+ it('should correctly add both a title and a description', function () {
const error = errors.createUserError({
title: 'Foo',
description: 'Something happened'
@@ -546,7 +532,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getDescription(error)).to.equal('Something happened');
});
- it('should correctly add only a title', function() {
+ it('should correctly add only a title', function () {
const error = errors.createUserError({
title: 'Foo'
});
@@ -555,7 +541,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getDescription(error)).to.equal(error.stack);
});
- it('should ignore an empty description', function() {
+ it('should ignore an empty description', function () {
const error = errors.createUserError({
title: 'Foo',
description: ''
@@ -564,7 +550,7 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getDescription(error)).to.equal(error.stack);
});
- it('should ignore a blank description', function() {
+ it('should ignore a blank description', function () {
const error = errors.createUserError({
title: 'Foo',
description: ' '
@@ -573,13 +559,13 @@ describe('Shared: Errors', function() {
m.chai.expect(errors.getDescription(error)).to.equal(error.stack);
});
- it('should throw if no title', function() {
+ it('should throw if no title', function () {
m.chai.expect(() => {
errors.createUserError({});
}).to.throw('Invalid error title: undefined');
});
- it('should throw if title is empty', function() {
+ it('should throw if title is empty', function () {
m.chai.expect(() => {
errors.createUserError({
title: ''
@@ -587,7 +573,7 @@ describe('Shared: Errors', function() {
}).to.throw('Invalid error title: ');
});
- it('should throw if there is a description but no title', function() {
+ it('should throw if there is a description but no title', function () {
m.chai.expect(() => {
errors.createUserError({
description: 'foo'
@@ -595,30 +581,26 @@ describe('Shared: Errors', function() {
}).to.throw('Invalid error title: undefined');
});
- it('should throw if title is blank', function() {
+ it('should throw if title is blank', function () {
m.chai.expect(() => {
errors.createUserError({
title: ' '
});
}).to.throw('Invalid error title: ');
});
-
});
- describe('.isUserError()', function() {
-
+ describe('.isUserError()', function () {
_.each([
0,
'',
false
], (value) => {
-
- it(`should return true if report equals ${value}`, function() {
+ it(`should return true if report equals ${value}`, function () {
const error = new Error('foo bar');
error.report = value;
m.chai.expect(errors.isUserError(error)).to.be.true;
});
-
});
_.each([
@@ -629,20 +611,16 @@ describe('Shared: Errors', function() {
3,
'foo'
], (value) => {
-
- it(`should return false if report equals ${value}`, function() {
+ it(`should return false if report equals ${value}`, function () {
const error = new Error('foo bar');
error.report = value;
m.chai.expect(errors.isUserError(error)).to.be.false;
});
-
});
-
});
- describe('.toJSON()', function() {
-
- it('should convert a simple error', function() {
+ describe('.toJSON()', function () {
+ it('should convert a simple error', function () {
const error = new Error('My error');
m.chai.expect(errors.toJSON(error)).to.deep.equal({
code: undefined,
@@ -653,7 +631,7 @@ describe('Shared: Errors', function() {
});
});
- it('should convert an error with a description', function() {
+ it('should convert an error with a description', function () {
const error = new Error('My error');
error.description = 'My description';
@@ -666,7 +644,7 @@ describe('Shared: Errors', function() {
});
});
- it('should convert an error with a code', function() {
+ it('should convert an error with a code', function () {
const error = new Error('My error');
error.code = 'ENOENT';
@@ -679,7 +657,7 @@ describe('Shared: Errors', function() {
});
});
- it('should convert an error with a description and a code', function() {
+ it('should convert an error with a description and a code', function () {
const error = new Error('My error');
error.description = 'My description';
error.code = 'ENOENT';
@@ -693,7 +671,7 @@ describe('Shared: Errors', function() {
});
});
- it('should convert an error with a report value', function() {
+ it('should convert an error with a report value', function () {
const error = new Error('My error');
error.report = true;
@@ -706,7 +684,7 @@ describe('Shared: Errors', function() {
});
});
- it('should convert an error without a message', function() {
+ it('should convert an error without a message', function () {
const error = new Error();
m.chai.expect(errors.toJSON(error)).to.deep.equal({
@@ -717,18 +695,16 @@ describe('Shared: Errors', function() {
report: undefined
});
});
-
});
- describe('.fromJSON()', function() {
-
- it('should return an Error object', function() {
+ describe('.fromJSON()', function () {
+ it('should return an Error object', function () {
const error = new Error('My error');
const result = errors.fromJSON(errors.toJSON(error));
m.chai.expect(result).to.be.an.instanceof(Error);
});
- it('should convert a simple JSON error', function() {
+ it('should convert a simple JSON error', function () {
const error = new Error('My error');
const result = errors.fromJSON(errors.toJSON(error));
@@ -739,7 +715,7 @@ describe('Shared: Errors', function() {
m.chai.expect(result.report).to.equal(error.report);
});
- it('should convert a JSON error with a description', function() {
+ it('should convert a JSON error with a description', function () {
const error = new Error('My error');
error.description = 'My description';
const result = errors.fromJSON(errors.toJSON(error));
@@ -751,7 +727,7 @@ describe('Shared: Errors', function() {
m.chai.expect(result.report).to.equal(error.report);
});
- it('should convert a JSON error with a code', function() {
+ it('should convert a JSON error with a code', function () {
const error = new Error('My error');
error.code = 'ENOENT';
const result = errors.fromJSON(errors.toJSON(error));
@@ -763,7 +739,7 @@ describe('Shared: Errors', function() {
m.chai.expect(result.report).to.equal(error.report);
});
- it('should convert a JSON error with a report value', function() {
+ it('should convert a JSON error with a report value', function () {
const error = new Error('My error');
error.report = false;
const result = errors.fromJSON(errors.toJSON(error));
@@ -774,7 +750,5 @@ describe('Shared: Errors', function() {
m.chai.expect(result.stack).to.equal(error.stack);
m.chai.expect(result.report).to.equal(error.report);
});
-
});
-
});
diff --git a/tests/shared/file-extensions.spec.js b/tests/shared/file-extensions.spec.js
index fdeb0437..15753da2 100644
--- a/tests/shared/file-extensions.spec.js
+++ b/tests/shared/file-extensions.spec.js
@@ -20,10 +20,8 @@ const m = require('mochainon');
const _ = require('lodash');
const fileExtensions = require('../../lib/shared/file-extensions');
-describe('Shared: fileExtensions', function() {
-
- describe('.getFileExtensions()', function() {
-
+describe('Shared: fileExtensions', function () {
+ describe('.getFileExtensions()', function () {
_.forEach([
// No extension
@@ -87,59 +85,53 @@ describe('Shared: fileExtensions', function() {
}
], (testCase) => {
- it(`should return ${testCase.extensions} for ${testCase.file}`, function() {
+ it(`should return ${testCase.extensions} for ${testCase.file}`, function () {
m.chai.expect(fileExtensions.getFileExtensions(testCase.file)).to.deep.equal(testCase.extensions);
});
});
- it('should always return lowercase extensions', function() {
+ it('should always return lowercase extensions', function () {
const filePath = 'foo.IMG.gZ';
m.chai.expect(fileExtensions.getFileExtensions(filePath)).to.deep.equal([
'img',
'gz'
]);
});
-
});
- describe('.getLastFileExtension()', function() {
-
- it('should return undefined if the file path has no extension', function() {
+ describe('.getLastFileExtension()', function () {
+ it('should return undefined if the file path has no extension', function () {
m.chai.expect(fileExtensions.getLastFileExtension('foo')).to.be.undefined;
});
- it('should return the extension if there is only one extension', function() {
+ it('should return the extension if there is only one extension', function () {
m.chai.expect(fileExtensions.getLastFileExtension('foo.img')).to.equal('img');
});
- it('should return the last extension if there are two extensions', function() {
+ it('should return the last extension if there are two extensions', function () {
m.chai.expect(fileExtensions.getLastFileExtension('foo.img.gz')).to.equal('gz');
});
- it('should return the last extension if there are three extensions', function() {
+ it('should return the last extension if there are three extensions', function () {
m.chai.expect(fileExtensions.getLastFileExtension('foo.bar.img.gz')).to.equal('gz');
});
-
});
- describe('.getPenultimateFileExtension()', function() {
-
- it('should return undefined in the file path has no extension', function() {
+ describe('.getPenultimateFileExtension()', function () {
+ it('should return undefined in the file path has no extension', function () {
m.chai.expect(fileExtensions.getPenultimateFileExtension('foo')).to.be.undefined;
});
- it('should return undefined if there is only one extension', function() {
+ it('should return undefined if there is only one extension', function () {
m.chai.expect(fileExtensions.getPenultimateFileExtension('foo.img')).to.be.undefined;
});
- it('should return the penultimate extension if there are two extensions', function() {
+ it('should return the penultimate extension if there are two extensions', function () {
m.chai.expect(fileExtensions.getPenultimateFileExtension('foo.img.gz')).to.equal('img');
});
- it('should return the penultimate extension if there are three extensions', function() {
+ it('should return the penultimate extension if there are three extensions', function () {
m.chai.expect(fileExtensions.getPenultimateFileExtension('foo.bar.img.gz')).to.equal('img');
});
-
});
-
});
diff --git a/tests/shared/messages.spec.js b/tests/shared/messages.spec.js
index 8b254a28..fa5c0bbc 100644
--- a/tests/shared/messages.spec.js
+++ b/tests/shared/messages.spec.js
@@ -20,16 +20,14 @@ const m = require('mochainon');
const _ = require('lodash');
const messages = require('../../lib/shared/messages');
-describe('Shared: Messages', function() {
-
- it('should contain object properties', function() {
+describe('Shared: Messages', function () {
+ it('should contain object properties', function () {
m.chai.expect(_.every(_.map(messages, _.isPlainObject))).to.be.true;
});
- it('should contain function properties in each category', function() {
+ it('should contain function properties in each category', function () {
_.each(messages, (category) => {
m.chai.expect(_.every(_.map(category, _.isFunction))).to.be.true;
});
});
-
});
diff --git a/tests/shared/models/available-drives.spec.js b/tests/shared/models/available-drives.spec.js
index 754f14f8..e30dac91 100644
--- a/tests/shared/models/available-drives.spec.js
+++ b/tests/shared/models/available-drives.spec.js
@@ -21,30 +21,27 @@ const path = require('path');
const availableDrives = require('../../../lib/shared/models/available-drives');
const selectionState = require('../../../lib/shared/models/selection-state');
-describe('Model: availableDrives', function() {
-
- describe('availableDrives', function() {
-
- it('should have no drives by default', function() {
+describe('Model: availableDrives', function () {
+ describe('availableDrives', function () {
+ it('should have no drives by default', function () {
m.chai.expect(availableDrives.getDrives()).to.deep.equal([]);
});
- describe('.setDrives()', function() {
-
- it('should throw if no drives', function() {
- m.chai.expect(function() {
+ describe('.setDrives()', function () {
+ it('should throw if no drives', function () {
+ m.chai.expect(function () {
availableDrives.setDrives();
}).to.throw('Missing drives');
});
- it('should throw if drives is not an array', function() {
- m.chai.expect(function() {
+ it('should throw if drives is not an array', function () {
+ m.chai.expect(function () {
availableDrives.setDrives(123);
}).to.throw('Invalid drives: 123');
});
- it('should throw if drives is not an array of objects', function() {
- m.chai.expect(function() {
+ it('should throw if drives is not an array of objects', function () {
+ m.chai.expect(function () {
availableDrives.setDrives([
123,
123,
@@ -52,22 +49,17 @@ describe('Model: availableDrives', function() {
]);
}).to.throw('Invalid drives: 123,123,123');
});
-
});
- describe('given no drives', function() {
-
- describe('.hasAvailableDrives()', function() {
-
- it('should return false', function() {
+ describe('given no drives', function () {
+ describe('.hasAvailableDrives()', function () {
+ it('should return false', function () {
m.chai.expect(availableDrives.hasAvailableDrives()).to.be.false;
});
-
});
- describe('.setDrives()', function() {
-
- it('should be able to set drives', function() {
+ describe('.setDrives()', function () {
+ it('should be able to set drives', function () {
const drives = [
{
device: '/dev/sdb',
@@ -82,14 +74,13 @@ describe('Model: availableDrives', function() {
m.chai.expect(availableDrives.getDrives()).to.deep.equal(drives);
});
- describe('given no selected image and no selected drive', function() {
-
- beforeEach(function() {
+ describe('given no selected image and no selected drive', function () {
+ beforeEach(function () {
selectionState.removeDrive();
selectionState.removeImage();
});
- it('should auto-select a single valid available drive', function() {
+ it('should auto-select a single valid available drive', function () {
m.chai.expect(selectionState.hasDrive()).to.be.false;
availableDrives.setDrives([
@@ -106,12 +97,10 @@ describe('Model: availableDrives', function() {
m.chai.expect(selectionState.hasDrive()).to.be.true;
m.chai.expect(selectionState.getDrive().device).to.equal('/dev/sdb');
});
-
});
- describe('given a selected image and no selected drive', function() {
-
- beforeEach(function() {
+ describe('given a selected image and no selected drive', function () {
+ beforeEach(function () {
if (process.platform === 'win32') {
this.imagePath = 'E:\\bar\\foo.img';
} else {
@@ -133,11 +122,11 @@ describe('Model: availableDrives', function() {
});
});
- afterEach(function() {
+ afterEach(function () {
selectionState.removeImage();
});
- it('should not auto-select when there are multiple valid available drives', function() {
+ it('should not auto-select when there are multiple valid available drives', function () {
m.chai.expect(selectionState.hasDrive()).to.be.false;
availableDrives.setDrives([
@@ -162,7 +151,7 @@ describe('Model: availableDrives', function() {
m.chai.expect(selectionState.hasDrive()).to.be.false;
});
- it('should auto-select a single valid available drive', function() {
+ it('should auto-select a single valid available drive', function () {
m.chai.expect(selectionState.hasDrive()).to.be.false;
availableDrives.setDrives([
@@ -186,7 +175,7 @@ describe('Model: availableDrives', function() {
});
});
- it('should not auto-select a single too small drive', function() {
+ it('should not auto-select a single too small drive', function () {
m.chai.expect(selectionState.hasDrive()).to.be.false;
availableDrives.setDrives([
@@ -203,7 +192,7 @@ describe('Model: availableDrives', function() {
m.chai.expect(selectionState.hasDrive()).to.be.false;
});
- it('should not auto-select a single drive that doesn\'t meet the recommended size', function() {
+ it('should not auto-select a single drive that doesn\'t meet the recommended size', function () {
m.chai.expect(selectionState.hasDrive()).to.be.false;
availableDrives.setDrives([
@@ -220,7 +209,7 @@ describe('Model: availableDrives', function() {
m.chai.expect(selectionState.hasDrive()).to.be.false;
});
- it('should not auto-select a single protected drive', function() {
+ it('should not auto-select a single protected drive', function () {
m.chai.expect(selectionState.hasDrive()).to.be.false;
availableDrives.setDrives([
@@ -237,7 +226,7 @@ describe('Model: availableDrives', function() {
m.chai.expect(selectionState.hasDrive()).to.be.false;
});
- it('should not auto-select a source drive', function() {
+ it('should not auto-select a source drive', function () {
m.chai.expect(selectionState.hasDrive()).to.be.false;
availableDrives.setDrives([
@@ -258,7 +247,7 @@ describe('Model: availableDrives', function() {
m.chai.expect(selectionState.hasDrive()).to.be.false;
});
- it('should not auto-select a single system drive', function() {
+ it('should not auto-select a single system drive', function () {
m.chai.expect(selectionState.hasDrive()).to.be.false;
availableDrives.setDrives([
@@ -274,16 +263,12 @@ describe('Model: availableDrives', function() {
m.chai.expect(selectionState.hasDrive()).to.be.false;
});
-
});
-
});
-
});
- describe('given drives', function() {
-
- beforeEach(function() {
+ describe('given drives', function () {
+ beforeEach(function () {
this.drives = [
{
device: '/dev/sdb',
@@ -306,9 +291,8 @@ describe('Model: availableDrives', function() {
availableDrives.setDrives(this.drives);
});
- describe('given one of the drives was selected', function() {
-
- beforeEach(function() {
+ describe('given one of the drives was selected', function () {
+ beforeEach(function () {
availableDrives.setDrives([
{
device: '/dev/sdc',
@@ -323,11 +307,11 @@ describe('Model: availableDrives', function() {
selectionState.setDrive('/dev/sdc');
});
- afterEach(function() {
+ afterEach(function () {
selectionState.removeDrive();
});
- it('should be deleted if its not contained in the available drives anymore', function() {
+ it('should be deleted if its not contained in the available drives anymore', function () {
m.chai.expect(selectionState.hasDrive()).to.be.true;
// We have to provide at least two drives, otherwise,
@@ -354,39 +338,32 @@ describe('Model: availableDrives', function() {
m.chai.expect(selectionState.hasDrive()).to.be.false;
});
-
});
- describe('.hasAvailableDrives()', function() {
-
- it('should return true', function() {
+ describe('.hasAvailableDrives()', function () {
+ it('should return true', function () {
const hasDrives = availableDrives.hasAvailableDrives();
m.chai.expect(hasDrives).to.be.true;
});
-
});
- describe('.setDrives()', function() {
-
- it('should keep the same drives if equal', function() {
+ describe('.setDrives()', function () {
+ it('should keep the same drives if equal', function () {
availableDrives.setDrives(this.drives);
m.chai.expect(availableDrives.getDrives()).to.deep.equal(this.drives);
});
- it('should return empty array given an empty array', function() {
+ it('should return empty array given an empty array', function () {
availableDrives.setDrives([]);
m.chai.expect(availableDrives.getDrives()).to.deep.equal([]);
});
- it('should consider drives with different $$hashKey the same', function() {
+ it('should consider drives with different $$hashKey the same', function () {
this.drives[0].$$haskey = 1234;
availableDrives.setDrives(this.drives);
m.chai.expect(availableDrives.getDrives()).to.deep.equal(this.drives);
});
-
});
-
});
-
});
});
diff --git a/tests/shared/models/flash-state.spec.js b/tests/shared/models/flash-state.spec.js
index 47e46021..3494d7e3 100644
--- a/tests/shared/models/flash-state.spec.js
+++ b/tests/shared/models/flash-state.spec.js
@@ -19,17 +19,14 @@
const m = require('mochainon');
const flashState = require('../../../lib/shared/models/flash-state');
-describe('Model: flashState', function() {
-
- beforeEach(function() {
+describe('Model: flashState', function () {
+ beforeEach(function () {
flashState.resetState();
});
- describe('flashState', function() {
-
- describe('.resetState()', function() {
-
- it('should be able to reset the progress state', function() {
+ describe('flashState', function () {
+ describe('.resetState()', function () {
+ it('should be able to reset the progress state', function () {
flashState.setFlashingFlag();
flashState.setProgressState({
type: 'write',
@@ -46,7 +43,7 @@ describe('Model: flashState', function() {
});
});
- it('should be able to reset the progress state', function() {
+ it('should be able to reset the progress state', function () {
flashState.unsetFlashingFlag({
cancelled: false,
sourceChecksum: '1234'
@@ -56,42 +53,38 @@ describe('Model: flashState', function() {
m.chai.expect(flashState.getFlashResults()).to.deep.equal({});
});
- it('should unset the flashing flag', function() {
+ it('should unset the flashing flag', function () {
flashState.setFlashingFlag();
flashState.resetState();
m.chai.expect(flashState.isFlashing()).to.be.false;
});
- it('should unset the flash uuid', function() {
+ it('should unset the flash uuid', function () {
flashState.setFlashingFlag();
flashState.resetState();
m.chai.expect(flashState.getFlashUuid()).to.be.undefined;
});
-
});
- describe('.isFlashing()', function() {
-
- it('should return false by default', function() {
+ describe('.isFlashing()', function () {
+ it('should return false by default', function () {
m.chai.expect(flashState.isFlashing()).to.be.false;
});
- it('should return true if flashing', function() {
+ it('should return true if flashing', function () {
flashState.setFlashingFlag();
m.chai.expect(flashState.isFlashing()).to.be.true;
});
-
});
- describe('.setProgressState()', function() {
-
- it('should not allow setting the state if flashing is false', function() {
+ describe('.setProgressState()', function () {
+ it('should not allow setting the state if flashing is false', function () {
flashState.unsetFlashingFlag({
cancelled: false,
sourceChecksum: '1234'
});
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 'write',
percentage: 50,
@@ -101,9 +94,9 @@ describe('Model: flashState', function() {
}).to.throw('Can\'t set the flashing state when not flashing');
});
- it('should throw if type is missing', function() {
+ it('should throw if type is missing', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
percentage: 50,
eta: 15,
@@ -112,9 +105,9 @@ describe('Model: flashState', function() {
}).to.throw('Missing state type');
});
- it('should throw if type is not a string', function() {
+ it('should throw if type is not a string', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 1234,
percentage: 50,
@@ -124,9 +117,9 @@ describe('Model: flashState', function() {
}).to.throw('Invalid state type: 1234');
});
- it('should not throw if percentage is 0', function() {
+ it('should not throw if percentage is 0', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 'write',
percentage: 0,
@@ -136,9 +129,9 @@ describe('Model: flashState', function() {
}).to.not.throw('Missing state percentage');
});
- it('should throw if percentage is missing', function() {
+ it('should throw if percentage is missing', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 'write',
eta: 15,
@@ -147,9 +140,9 @@ describe('Model: flashState', function() {
}).to.throw('Missing state percentage');
});
- it('should throw if percentage is not a number', function() {
+ it('should throw if percentage is not a number', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 'write',
percentage: '50',
@@ -159,9 +152,9 @@ describe('Model: flashState', function() {
}).to.throw('Invalid state percentage: 50');
});
- it('should throw if percentage is outside maximum bound', function() {
+ it('should throw if percentage is outside maximum bound', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 'write',
percentage: 101,
@@ -171,9 +164,9 @@ describe('Model: flashState', function() {
}).to.throw('Invalid state percentage: 101');
});
- it('should throw if percentage is outside minimum bound', function() {
+ it('should throw if percentage is outside minimum bound', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 'write',
percentage: -1,
@@ -183,9 +176,9 @@ describe('Model: flashState', function() {
}).to.throw('Invalid state percentage: -1');
});
- it('should throw if eta is missing', function() {
+ it('should throw if eta is missing', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 'write',
percentage: 50,
@@ -194,9 +187,9 @@ describe('Model: flashState', function() {
}).to.throw('Missing state eta');
});
- it('should not throw if eta is equal to zero', function() {
+ it('should not throw if eta is equal to zero', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 'write',
percentage: 50,
@@ -206,9 +199,9 @@ describe('Model: flashState', function() {
}).to.not.throw('Missing state eta');
});
- it('should throw if eta is not a number', function() {
+ it('should throw if eta is not a number', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 'write',
percentage: 50,
@@ -218,9 +211,9 @@ describe('Model: flashState', function() {
}).to.throw('Invalid state eta: 15');
});
- it('should throw if speed is missing', function() {
+ it('should throw if speed is missing', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 'write',
percentage: 50,
@@ -229,9 +222,9 @@ describe('Model: flashState', function() {
}).to.throw('Missing state speed');
});
- it('should not throw if speed is 0', function() {
+ it('should not throw if speed is 0', function () {
flashState.setFlashingFlag();
- m.chai.expect(function() {
+ m.chai.expect(function () {
flashState.setProgressState({
type: 'write',
percentage: 50,
@@ -240,12 +233,10 @@ describe('Model: flashState', function() {
});
}).to.not.throw('Missing state speed');
});
-
});
- describe('.getFlashResults()', function() {
-
- it('should get the flash results', function() {
+ describe('.getFlashResults()', function () {
+ it('should get the flash results', function () {
flashState.setFlashingFlag();
const expectedResults = {
@@ -257,12 +248,10 @@ describe('Model: flashState', function() {
const results = flashState.getFlashResults();
m.chai.expect(results).to.deep.equal(expectedResults);
});
-
});
- describe('.getFlashState()', function() {
-
- it('should initially return an empty state', function() {
+ describe('.getFlashState()', function () {
+ it('should initially return an empty state', function () {
flashState.resetState();
const currentFlashState = flashState.getFlashState();
m.chai.expect(currentFlashState).to.deep.equal({
@@ -271,7 +260,7 @@ describe('Model: flashState', function() {
});
});
- it('should return the current flash state', function() {
+ it('should return the current flash state', function () {
const state = {
type: 'write',
percentage: 50,
@@ -284,18 +273,16 @@ describe('Model: flashState', function() {
const currentFlashState = flashState.getFlashState();
m.chai.expect(currentFlashState).to.deep.equal(state);
});
-
});
- describe('.unsetFlashingFlag()', function() {
-
- it('should throw if no flashing results', function() {
- m.chai.expect(function() {
+ describe('.unsetFlashingFlag()', function () {
+ it('should throw if no flashing results', function () {
+ m.chai.expect(function () {
flashState.unsetFlashingFlag();
}).to.throw('Missing results');
});
- it('should be able to set a string error code', function() {
+ it('should be able to set a string error code', function () {
flashState.unsetFlashingFlag({
cancelled: false,
sourceChecksum: '1234',
@@ -305,7 +292,7 @@ describe('Model: flashState', function() {
m.chai.expect(flashState.getLastFlashErrorCode()).to.equal('EBUSY');
});
- it('should be able to set a number error code', function() {
+ it('should be able to set a number error code', function () {
flashState.unsetFlashingFlag({
cancelled: false,
sourceChecksum: '1234',
@@ -315,8 +302,8 @@ describe('Model: flashState', function() {
m.chai.expect(flashState.getLastFlashErrorCode()).to.equal(123);
});
- it('should throw if errorCode is not a number not a string', function() {
- m.chai.expect(function() {
+ it('should throw if errorCode is not a number not a string', function () {
+ m.chai.expect(function () {
flashState.unsetFlashingFlag({
cancelled: false,
sourceChecksum: '1234',
@@ -327,7 +314,7 @@ describe('Model: flashState', function() {
}).to.throw('Invalid results errorCode: [object Object]');
});
- it('should default cancelled to false', function() {
+ it('should default cancelled to false', function () {
flashState.unsetFlashingFlag({
sourceChecksum: '1234'
});
@@ -340,8 +327,8 @@ describe('Model: flashState', function() {
});
});
- it('should throw if cancelled is not boolean', function() {
- m.chai.expect(function() {
+ it('should throw if cancelled is not boolean', function () {
+ m.chai.expect(function () {
flashState.unsetFlashingFlag({
cancelled: 'false',
sourceChecksum: '1234'
@@ -349,8 +336,8 @@ describe('Model: flashState', function() {
}).to.throw('Invalid results cancelled: false');
});
- it('should throw if cancelled is true and sourceChecksum exists', function() {
- m.chai.expect(function() {
+ it('should throw if cancelled is true and sourceChecksum exists', function () {
+ m.chai.expect(function () {
flashState.unsetFlashingFlag({
cancelled: true,
sourceChecksum: '1234'
@@ -358,7 +345,7 @@ describe('Model: flashState', function() {
}).to.throw('The sourceChecksum value can\'t exist if the flashing was cancelled');
});
- it('should be able to set flashing to false', function() {
+ it('should be able to set flashing to false', function () {
flashState.unsetFlashingFlag({
cancelled: false,
sourceChecksum: '1234'
@@ -367,7 +354,7 @@ describe('Model: flashState', function() {
m.chai.expect(flashState.isFlashing()).to.be.false;
});
- it('should reset the flashing state', function() {
+ it('should reset the flashing state', function () {
flashState.setFlashingFlag();
flashState.setProgressState({
@@ -393,7 +380,7 @@ describe('Model: flashState', function() {
});
});
- it('should not reset the flash uuid', function() {
+ it('should not reset the flash uuid', function () {
flashState.setFlashingFlag();
const uuidBeforeUnset = flashState.getFlashUuid();
@@ -405,17 +392,15 @@ describe('Model: flashState', function() {
const uuidAfterUnset = flashState.getFlashUuid();
m.chai.expect(uuidBeforeUnset).to.equal(uuidAfterUnset);
});
-
});
- describe('.setFlashingFlag()', function() {
-
- it('should be able to set flashing to true', function() {
+ describe('.setFlashingFlag()', function () {
+ it('should be able to set flashing to true', function () {
flashState.setFlashingFlag();
m.chai.expect(flashState.isFlashing()).to.be.true;
});
- it('should reset the flash results', function() {
+ it('should reset the flash results', function () {
const expectedResults = {
cancelled: false,
sourceChecksum: '1234'
@@ -427,17 +412,15 @@ describe('Model: flashState', function() {
flashState.setFlashingFlag();
m.chai.expect(flashState.getFlashResults()).to.deep.equal({});
});
-
});
- describe('.wasLastFlashCancelled()', function() {
-
- it('should return false given a pristine state', function() {
+ describe('.wasLastFlashCancelled()', function () {
+ it('should return false given a pristine state', function () {
flashState.resetState();
m.chai.expect(flashState.wasLastFlashCancelled()).to.be.false;
});
- it('should return false if !cancelled', function() {
+ it('should return false if !cancelled', function () {
flashState.unsetFlashingFlag({
sourceChecksum: '1234',
cancelled: false
@@ -446,24 +429,22 @@ describe('Model: flashState', function() {
m.chai.expect(flashState.wasLastFlashCancelled()).to.be.false;
});
- it('should return true if cancelled', function() {
+ it('should return true if cancelled', function () {
flashState.unsetFlashingFlag({
cancelled: true
});
m.chai.expect(flashState.wasLastFlashCancelled()).to.be.true;
});
-
});
- describe('.getLastFlashSourceChecksum()', function() {
-
- it('should return undefined given a pristine state', function() {
+ describe('.getLastFlashSourceChecksum()', function () {
+ it('should return undefined given a pristine state', function () {
flashState.resetState();
m.chai.expect(flashState.getLastFlashSourceChecksum()).to.be.undefined;
});
- it('should return the last flash source checksum', function() {
+ it('should return the last flash source checksum', function () {
flashState.unsetFlashingFlag({
sourceChecksum: '1234',
cancelled: false
@@ -472,24 +453,22 @@ describe('Model: flashState', function() {
m.chai.expect(flashState.getLastFlashSourceChecksum()).to.equal('1234');
});
- it('should return undefined if the last flash was cancelled', function() {
+ it('should return undefined if the last flash was cancelled', function () {
flashState.unsetFlashingFlag({
cancelled: true
});
m.chai.expect(flashState.getLastFlashSourceChecksum()).to.be.undefined;
});
-
});
- describe('.getLastFlashErrorCode()', function() {
-
- it('should return undefined given a pristine state', function() {
+ describe('.getLastFlashErrorCode()', function () {
+ it('should return undefined given a pristine state', function () {
flashState.resetState();
m.chai.expect(flashState.getLastFlashErrorCode()).to.be.undefined;
});
- it('should return the last flash error code', function() {
+ it('should return the last flash error code', function () {
flashState.unsetFlashingFlag({
sourceChecksum: '1234',
cancelled: false,
@@ -499,7 +478,7 @@ describe('Model: flashState', function() {
m.chai.expect(flashState.getLastFlashErrorCode()).to.equal('ENOSPC');
});
- it('should return undefined if the last flash did not report an error code', function() {
+ it('should return undefined if the last flash did not report an error code', function () {
flashState.unsetFlashingFlag({
sourceChecksum: '1234',
cancelled: false
@@ -507,24 +486,22 @@ describe('Model: flashState', function() {
m.chai.expect(flashState.getLastFlashErrorCode()).to.be.undefined;
});
-
});
- describe('.getFlashUuid()', function() {
-
+ describe('.getFlashUuid()', function () {
const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
- it('should be initially undefined', function() {
+ it('should be initially undefined', function () {
m.chai.expect(flashState.getFlashUuid()).to.be.undefined;
});
- it('should be a valid uuid if the flashing flag is set', function() {
+ it('should be a valid uuid if the flashing flag is set', function () {
flashState.setFlashingFlag();
const uuid = flashState.getFlashUuid();
m.chai.expect(UUID_REGEX.test(uuid)).to.be.true;
});
- it('should return different uuids every time the flashing flag is set', function() {
+ it('should return different uuids every time the flashing flag is set', function () {
flashState.setFlashingFlag();
const uuid1 = flashState.getFlashUuid();
flashState.unsetFlashingFlag({
@@ -553,9 +530,6 @@ describe('Model: flashState', function() {
m.chai.expect(uuid2).to.not.equal(uuid3);
m.chai.expect(uuid3).to.not.equal(uuid1);
});
-
});
-
});
-
});
diff --git a/tests/shared/models/selection-state.spec.js b/tests/shared/models/selection-state.spec.js
index 7267c9eb..5f5b2847 100644
--- a/tests/shared/models/selection-state.spec.js
+++ b/tests/shared/models/selection-state.spec.js
@@ -22,66 +22,62 @@ const path = require('path');
const availableDrives = require('../../../lib/shared/models/available-drives');
const selectionState = require('../../../lib/shared/models/selection-state');
-describe('Model: selectionState', function() {
-
- describe('given a clean state', function() {
-
- beforeEach(function() {
+describe('Model: selectionState', function () {
+ describe('given a clean state', function () {
+ beforeEach(function () {
selectionState.clear();
});
- it('getDrive() should return undefined', function() {
+ it('getDrive() should return undefined', function () {
const drive = selectionState.getDrive();
m.chai.expect(drive).to.be.undefined;
});
- it('getImage() should return undefined', function() {
+ it('getImage() should return undefined', function () {
m.chai.expect(selectionState.getImage()).to.be.undefined;
});
- it('getImagePath() should return undefined', function() {
+ it('getImagePath() should return undefined', function () {
m.chai.expect(selectionState.getImagePath()).to.be.undefined;
});
- it('getImageSize() should return undefined', function() {
+ it('getImageSize() should return undefined', function () {
m.chai.expect(selectionState.getImageSize()).to.be.undefined;
});
- it('getImageUrl() should return undefined', function() {
+ it('getImageUrl() should return undefined', function () {
m.chai.expect(selectionState.getImageUrl()).to.be.undefined;
});
- it('getImageName() should return undefined', function() {
+ it('getImageName() should return undefined', function () {
m.chai.expect(selectionState.getImageName()).to.be.undefined;
});
- it('getImageLogo() should return undefined', function() {
+ it('getImageLogo() should return undefined', function () {
m.chai.expect(selectionState.getImageLogo()).to.be.undefined;
});
- it('getImageSupportUrl() should return undefined', function() {
+ it('getImageSupportUrl() should return undefined', function () {
m.chai.expect(selectionState.getImageSupportUrl()).to.be.undefined;
});
- it('getImageRecommendedDriveSize() should return undefined', function() {
+ it('getImageRecommendedDriveSize() should return undefined', function () {
m.chai.expect(selectionState.getImageRecommendedDriveSize()).to.be.undefined;
});
- it('hasDrive() should return false', function() {
+ it('hasDrive() should return false', function () {
const hasDrive = selectionState.hasDrive();
m.chai.expect(hasDrive).to.be.false;
});
- it('hasImage() should return false', function() {
+ it('hasImage() should return false', function () {
const hasImage = selectionState.hasImage();
m.chai.expect(hasImage).to.be.false;
});
-
});
- describe('given a drive', function() {
-
- beforeEach(function() {
+ describe('given a drive', function () {
+ beforeEach(function () {
availableDrives.setDrives([
{
device: '/dev/disk2',
@@ -100,9 +96,8 @@ describe('Model: selectionState', function() {
selectionState.setDrive('/dev/disk2');
});
- describe('.getDrive()', function() {
-
- it('should return the drive', function() {
+ describe('.getDrive()', function () {
+ it('should return the drive', function () {
const drive = selectionState.getDrive();
m.chai.expect(drive).to.deep.equal({
device: '/dev/disk2',
@@ -111,21 +106,17 @@ describe('Model: selectionState', function() {
protected: false
});
});
-
});
- describe('.hasDrive()', function() {
-
- it('should return true', function() {
+ describe('.hasDrive()', function () {
+ it('should return true', function () {
const hasDrive = selectionState.hasDrive();
m.chai.expect(hasDrive).to.be.true;
});
-
});
- describe('.setDrive()', function() {
-
- it('should override the drive', function() {
+ describe('.setDrive()', function () {
+ it('should override the drive', function () {
selectionState.setDrive('/dev/disk5');
const drive = selectionState.getDrive();
m.chai.expect(drive).to.deep.equal({
@@ -135,26 +126,20 @@ describe('Model: selectionState', function() {
protected: false
});
});
-
});
- describe('.removeDrive()', function() {
-
- it('should clear the drive', function() {
+ describe('.removeDrive()', function () {
+ it('should clear the drive', function () {
selectionState.removeDrive();
const drive = selectionState.getDrive();
m.chai.expect(drive).to.be.undefined;
});
-
});
-
});
- describe('given no drive', function() {
-
- describe('.setDrive()', function() {
-
- it('should be able to set a drive', function() {
+ describe('given no drive', function () {
+ describe('.setDrive()', function () {
+ it('should be able to set a drive', function () {
availableDrives.setDrives([
{
device: '/dev/disk5',
@@ -174,7 +159,7 @@ describe('Model: selectionState', function() {
});
});
- it('should throw if drive is write protected', function() {
+ it('should throw if drive is write protected', function () {
availableDrives.setDrives([
{
device: '/dev/disk1',
@@ -184,12 +169,12 @@ describe('Model: selectionState', function() {
}
]);
- m.chai.expect(function() {
+ m.chai.expect(function () {
selectionState.setDrive('/dev/disk1');
}).to.throw('The drive is write-protected');
});
- it('should throw if the drive is not available', function() {
+ it('should throw if the drive is not available', function () {
availableDrives.setDrives([
{
device: '/dev/disk1',
@@ -199,24 +184,21 @@ describe('Model: selectionState', function() {
}
]);
- m.chai.expect(function() {
+ m.chai.expect(function () {
selectionState.setDrive('/dev/disk5');
}).to.throw('The drive is not available: /dev/disk5');
});
- it('should throw if device is not a string', function() {
- m.chai.expect(function() {
+ it('should throw if device is not a string', function () {
+ m.chai.expect(function () {
selectionState.setDrive(123);
}).to.throw('Invalid drive: 123');
});
-
});
-
});
- describe('given an image', function() {
-
- beforeEach(function() {
+ describe('given an image', function () {
+ beforeEach(function () {
this.image = {
path: 'foo.img',
extension: 'img',
@@ -237,9 +219,8 @@ describe('Model: selectionState', function() {
selectionState.setImage(this.image);
});
- describe('.setDrive()', function() {
-
- it('should throw if drive is not large enough', function() {
+ describe('.setDrive()', function () {
+ it('should throw if drive is not large enough', function () {
availableDrives.setDrives([
{
device: '/dev/disk2',
@@ -249,96 +230,76 @@ describe('Model: selectionState', function() {
}
]);
- m.chai.expect(function() {
+ m.chai.expect(function () {
selectionState.setDrive('/dev/disk2');
}).to.throw('The drive is not large enough');
});
-
});
- describe('.getImage()', function() {
-
- it('should return the image', function() {
+ describe('.getImage()', function () {
+ it('should return the image', function () {
m.chai.expect(selectionState.getImage()).to.deep.equal(this.image);
});
-
});
- describe('.getImagePath()', function() {
-
- it('should return the image path', function() {
+ describe('.getImagePath()', function () {
+ it('should return the image path', function () {
const imagePath = selectionState.getImagePath();
m.chai.expect(imagePath).to.equal('foo.img');
});
-
});
- describe('.getImageSize()', function() {
-
- it('should return the image size', function() {
+ describe('.getImageSize()', function () {
+ it('should return the image size', function () {
const imageSize = selectionState.getImageSize();
m.chai.expect(imageSize).to.equal(999999999);
});
-
});
- describe('.getImageUrl()', function() {
-
- it('should return the image url', function() {
+ describe('.getImageUrl()', function () {
+ it('should return the image url', function () {
const imageUrl = selectionState.getImageUrl();
m.chai.expect(imageUrl).to.equal('https://www.raspbian.org');
});
-
});
- describe('.getImageName()', function() {
-
- it('should return the image name', function() {
+ describe('.getImageName()', function () {
+ it('should return the image name', function () {
const imageName = selectionState.getImageName();
m.chai.expect(imageName).to.equal('Raspbian');
});
-
});
- describe('.getImageLogo()', function() {
-
- it('should return the image logo', function() {
+ describe('.getImageLogo()', function () {
+ it('should return the image logo', function () {
const imageLogo = selectionState.getImageLogo();
m.chai.expect(imageLogo).to.equal('');
});
-
});
- describe('.getImageSupportUrl()', function() {
-
- it('should return the image support url', function() {
+ describe('.getImageSupportUrl()', function () {
+ it('should return the image support url', function () {
const imageSupportUrl = selectionState.getImageSupportUrl();
m.chai.expect(imageSupportUrl).to.equal('https://www.raspbian.org/forums/');
});
-
});
- describe('.getImageRecommendedDriveSize()', function() {
-
- it('should return the image recommended drive size', function() {
+ describe('.getImageRecommendedDriveSize()', function () {
+ it('should return the image recommended drive size', function () {
const imageRecommendedDriveSize = selectionState.getImageRecommendedDriveSize();
m.chai.expect(imageRecommendedDriveSize).to.equal(1000000000);
});
-
});
- describe('.hasImage()', function() {
-
- it('should return true', function() {
+ describe('.hasImage()', function () {
+ it('should return true', function () {
const hasImage = selectionState.hasImage();
m.chai.expect(hasImage).to.be.true;
});
-
});
- describe('.setImage()', function() {
-
- it('should override the image', function() {
+ describe('.setImage()', function () {
+ it('should override the image', function () {
selectionState.setImage({
path: 'bar.img',
extension: 'img',
@@ -356,12 +317,10 @@ describe('Model: selectionState', function() {
const imageSize = selectionState.getImageSize();
m.chai.expect(imageSize).to.equal(999999999);
});
-
});
- describe('.removeImage()', function() {
-
- it('should clear the image', function() {
+ describe('.removeImage()', function () {
+ it('should clear the image', function () {
selectionState.removeImage();
const imagePath = selectionState.getImagePath();
@@ -369,16 +328,12 @@ describe('Model: selectionState', function() {
const imageSize = selectionState.getImageSize();
m.chai.expect(imageSize).to.be.undefined;
});
-
});
-
});
- describe('given no image', function() {
-
- describe('.setImage()', function() {
-
- it('should be able to set an image', function() {
+ describe('given no image', function () {
+ describe('.setImage()', function () {
+ it('should be able to set an image', function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -397,7 +352,7 @@ describe('Model: selectionState', function() {
m.chai.expect(imageSize).to.equal(999999999);
});
- it('should be able to set an image with an archive extension', function() {
+ it('should be able to set an image with an archive extension', function () {
selectionState.setImage({
path: 'foo.zip',
extension: 'img',
@@ -415,8 +370,8 @@ describe('Model: selectionState', function() {
m.chai.expect(imagePath).to.equal('foo.zip');
});
- it('should throw if no path', function() {
- m.chai.expect(function() {
+ it('should throw if no path', function () {
+ m.chai.expect(function () {
selectionState.setImage({
extension: 'img',
size: {
@@ -430,8 +385,8 @@ describe('Model: selectionState', function() {
}).to.throw('Missing image path');
});
- it('should throw if path is not a string', function() {
- m.chai.expect(function() {
+ it('should throw if path is not a string', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 123,
extension: 'img',
@@ -446,8 +401,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid image path: 123');
});
- it('should throw if no extension', function() {
- m.chai.expect(function() {
+ it('should throw if no extension', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
size: {
@@ -461,8 +416,8 @@ describe('Model: selectionState', function() {
}).to.throw('Missing image extension');
});
- it('should throw if extension is not a string', function() {
- m.chai.expect(function() {
+ it('should throw if extension is not a string', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 1,
@@ -477,8 +432,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid image extension: 1');
});
- it('should throw if the extension doesn\'t match the path and there is no archive extension', function() {
- m.chai.expect(function() {
+ it('should throw if the extension doesn\'t match the path and there is no archive extension', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'iso',
@@ -493,8 +448,8 @@ describe('Model: selectionState', function() {
}).to.throw('Missing image archive extension');
});
- it('should throw if the extension doesn\'t match the path and the archive extension is not a string', function() {
- m.chai.expect(function() {
+ it('should throw if the extension doesn\'t match the path and the archive extension is not a string', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'iso',
@@ -510,8 +465,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid image archive extension: 1');
});
- it('should throw if the archive extension doesn\'t match the last path extension in a compressed image', function() {
- m.chai.expect(function() {
+ it('should throw if the archive extension doesn\'t match the last path extension in a compressed image', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img.xz',
extension: 'img',
@@ -527,8 +482,8 @@ describe('Model: selectionState', function() {
}).to.throw('Image archive extension mismatch: gz and xz');
});
- it('should throw if the extension is not recognised in an uncompressed image', function() {
- m.chai.expect(function() {
+ it('should throw if the extension is not recognised in an uncompressed image', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.ifg',
extension: 'ifg',
@@ -543,8 +498,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid image extension: ifg');
});
- it('should throw if the extension is not recognised in a compressed image', function() {
- m.chai.expect(function() {
+ it('should throw if the extension is not recognised in a compressed image', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.ifg.gz',
extension: 'ifg',
@@ -560,8 +515,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid image extension: ifg');
});
- it('should throw if the archive extension is not recognised', function() {
- m.chai.expect(function() {
+ it('should throw if the archive extension is not recognised', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img.ifg',
extension: 'img',
@@ -577,8 +532,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid image archive extension: ifg');
});
- it('should throw if no size', function() {
- m.chai.expect(function() {
+ it('should throw if no size', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img'
@@ -586,8 +541,8 @@ describe('Model: selectionState', function() {
}).to.throw('Missing image size');
});
- it('should throw if size is not a plain object', function() {
- m.chai.expect(function() {
+ it('should throw if size is not a plain object', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -596,8 +551,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid image size: 999999999');
});
- it('should throw if the original size is not a number', function() {
- m.chai.expect(function() {
+ it('should throw if the original size is not a number', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -612,8 +567,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid original image size: 999999999');
});
- it('should throw if the original size is a float number', function() {
- m.chai.expect(function() {
+ it('should throw if the original size is a float number', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -628,8 +583,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid original image size: 999999999.999');
});
- it('should throw if the original size is negative', function() {
- m.chai.expect(function() {
+ it('should throw if the original size is negative', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -644,8 +599,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid original image size: -1');
});
- it('should throw if the final size is not a number', function() {
- m.chai.expect(function() {
+ it('should throw if the final size is not a number', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -660,8 +615,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid final image size: 999999999');
});
- it('should throw if the final size is a float number', function() {
- m.chai.expect(function() {
+ it('should throw if the final size is a float number', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -676,8 +631,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid final image size: 999999999.999');
});
- it('should throw if the final size is negative', function() {
- m.chai.expect(function() {
+ it('should throw if the final size is negative', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -692,8 +647,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid final image size: -1');
});
- it('should throw if the final size estimation flag is not a boolean', function() {
- m.chai.expect(function() {
+ it('should throw if the final size estimation flag is not a boolean', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -708,8 +663,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid final image size estimation flag: false');
});
- it('should throw if url is defined but it\'s not a string', function() {
- m.chai.expect(function() {
+ it('should throw if url is defined but it\'s not a string', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -725,8 +680,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid image url: 1234');
});
- it('should throw if name is defined but it\'s not a string', function() {
- m.chai.expect(function() {
+ it('should throw if name is defined but it\'s not a string', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -742,8 +697,8 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid image name: 1234');
});
- it('should throw if logo is defined but it\'s not a string', function() {
- m.chai.expect(function() {
+ it('should throw if logo is defined but it\'s not a string', function () {
+ m.chai.expect(function () {
selectionState.setImage({
path: 'foo.img',
extension: 'img',
@@ -759,7 +714,7 @@ describe('Model: selectionState', function() {
}).to.throw('Invalid image logo: 1234');
});
- it('should de-select a previously selected not-large-enough drive', function() {
+ it('should de-select a previously selected not-large-enough drive', function () {
availableDrives.setDrives([
{
device: '/dev/disk1',
@@ -788,7 +743,7 @@ describe('Model: selectionState', function() {
selectionState.removeImage();
});
- it('should de-select a previously selected not-recommended drive', function() {
+ it('should de-select a previously selected not-recommended drive', function () {
availableDrives.setDrives([
{
device: '/dev/disk1',
@@ -818,7 +773,7 @@ describe('Model: selectionState', function() {
selectionState.removeImage();
});
- it('should de-select a previously selected source drive', function() {
+ it('should de-select a previously selected source drive', function () {
const imagePath = _.attempt(() => {
if (process.platform === 'win32') {
return 'E:\\bar\\foo.img';
@@ -859,14 +814,11 @@ describe('Model: selectionState', function() {
m.chai.expect(selectionState.hasDrive()).to.be.false;
selectionState.removeImage();
});
-
});
-
});
- describe('given a drive', function() {
-
- beforeEach(function() {
+ describe('given a drive', function () {
+ beforeEach(function () {
availableDrives.setDrives([
{
device: '/dev/disk1',
@@ -891,9 +843,8 @@ describe('Model: selectionState', function() {
});
});
- describe('.clear()', function() {
-
- it('should clear all selections', function() {
+ describe('.clear()', function () {
+ it('should clear all selections', function () {
m.chai.expect(selectionState.hasDrive()).to.be.true;
m.chai.expect(selectionState.hasImage()).to.be.true;
@@ -902,51 +853,45 @@ describe('Model: selectionState', function() {
m.chai.expect(selectionState.hasDrive()).to.be.false;
m.chai.expect(selectionState.hasImage()).to.be.false;
});
-
});
- describe('given the preserveImage option', function() {
-
- beforeEach(function() {
+ describe('given the preserveImage option', function () {
+ beforeEach(function () {
selectionState.clear({
preserveImage: true
});
});
- it('getDrive() should return undefined', function() {
+ it('getDrive() should return undefined', function () {
const drive = selectionState.getDrive();
m.chai.expect(drive).to.be.undefined;
});
- it('getImagePath() should return the image path', function() {
+ it('getImagePath() should return the image path', function () {
const imagePath = selectionState.getImagePath();
m.chai.expect(imagePath).to.equal('foo.img');
});
- it('getImageSize() should return the image size', function() {
+ it('getImageSize() should return the image size', function () {
const imageSize = selectionState.getImageSize();
m.chai.expect(imageSize).to.equal(999999999);
});
- it('hasDrive() should return false', function() {
+ it('hasDrive() should return false', function () {
const hasDrive = selectionState.hasDrive();
m.chai.expect(hasDrive).to.be.false;
});
- it('hasImage() should return true', function() {
+ it('hasImage() should return true', function () {
const hasImage = selectionState.hasImage();
m.chai.expect(hasImage).to.be.true;
});
-
});
-
});
- describe('.isCurrentDrive()', function() {
-
- describe('given a selected drive', function() {
-
- beforeEach(function() {
+ describe('.isCurrentDrive()', function () {
+ describe('given a selected drive', function () {
+ beforeEach(function () {
availableDrives.setDrives([
{
device: '/dev/sdb',
@@ -962,43 +907,37 @@ describe('Model: selectionState', function() {
selectionState.setDrive('/dev/sdb');
});
- it('should return false if an undefined value is passed', function() {
+ it('should return false if an undefined value is passed', function () {
m.chai.expect(selectionState.isCurrentDrive()).to.be.false;
});
- it('should return true given the exact same drive', function() {
+ it('should return true given the exact same drive', function () {
m.chai.expect(selectionState.isCurrentDrive('/dev/sdb')).to.be.true;
});
- it('should return false if it is not the current drive', function() {
+ it('should return false if it is not the current drive', function () {
m.chai.expect(selectionState.isCurrentDrive('/dev/sdc')).to.be.false;
});
-
});
- describe('given no selected drive', function() {
-
- beforeEach(function() {
+ describe('given no selected drive', function () {
+ beforeEach(function () {
selectionState.removeDrive();
});
- it('should return false if an undefined value is passed', function() {
+ it('should return false if an undefined value is passed', function () {
m.chai.expect(selectionState.isCurrentDrive()).to.be.false;
});
- it('should return false for anything', function() {
+ it('should return false for anything', function () {
m.chai.expect(selectionState.isCurrentDrive('/dev/sdb')).to.be.false;
});
-
});
-
});
- describe('.toggleSetDrive()', function() {
-
- describe('given a selected drive', function() {
-
- beforeEach(function() {
+ describe('.toggleSetDrive()', function () {
+ describe('given a selected drive', function () {
+ beforeEach(function () {
this.drive = {
device: '/dev/sdb',
description: 'DataTraveler 2.0',
@@ -1022,13 +961,13 @@ describe('Model: selectionState', function() {
selectionState.setDrive(this.drive.device);
});
- it('should be able to remove the drive', function() {
+ it('should be able to remove the drive', function () {
m.chai.expect(selectionState.hasDrive()).to.be.true;
selectionState.toggleSetDrive(this.drive.device);
m.chai.expect(selectionState.hasDrive()).to.be.false;
});
- it('should be able to replace the drive', function() {
+ it('should be able to replace the drive', function () {
const drive = {
device: '/dev/disk2',
name: 'USB Drive',
@@ -1041,16 +980,14 @@ describe('Model: selectionState', function() {
m.chai.expect(selectionState.getDrive()).to.deep.equal(drive);
m.chai.expect(selectionState.getDrive()).to.not.deep.equal(this.drive);
});
-
});
- describe('given no selected drive', function() {
-
- beforeEach(function() {
+ describe('given no selected drive', function () {
+ beforeEach(function () {
selectionState.removeDrive();
});
- it('should set the drive', function() {
+ it('should set the drive', function () {
const drive = {
device: '/dev/disk2',
name: 'USB Drive',
@@ -1062,9 +999,6 @@ describe('Model: selectionState', function() {
selectionState.toggleSetDrive(drive.device);
m.chai.expect(selectionState.getDrive()).to.deep.equal(drive);
});
-
});
-
});
-
});
diff --git a/tests/shared/permissions.spec.js b/tests/shared/permissions.spec.js
index 20f4816f..56ee903b 100644
--- a/tests/shared/permissions.spec.js
+++ b/tests/shared/permissions.spec.js
@@ -20,30 +20,27 @@ const m = require('mochainon');
const os = require('os');
const permissions = require('../../lib/shared/permissions');
-describe('Shared: permissions', function() {
-
- describe('.getEnvironmentCommandPrefix()', function() {
-
- describe('given windows', function() {
-
- beforeEach(function() {
+describe('Shared: permissions', function () {
+ describe('.getEnvironmentCommandPrefix()', function () {
+ describe('given windows', function () {
+ beforeEach(function () {
this.osPlatformStub = m.sinon.stub(os, 'platform');
this.osPlatformStub.returns('win32');
});
- afterEach(function() {
+ afterEach(function () {
this.osPlatformStub.restore();
});
- it('should return an empty array if no environment', function() {
+ it('should return an empty array if no environment', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix()).to.deep.equal([]);
});
- it('should return an empty array if the environment is an empty object', function() {
+ it('should return an empty array if the environment is an empty object', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({})).to.deep.equal([]);
});
- it('should create an environment command prefix out of one variable', function() {
+ it('should create an environment command prefix out of one variable', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: 'bar'
})).to.deep.equal([
@@ -54,7 +51,7 @@ describe('Shared: permissions', function() {
]);
});
- it('should create an environment command prefix out of many variables', function() {
+ it('should create an environment command prefix out of many variables', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: 'bar',
BAR: 'baz',
@@ -73,7 +70,7 @@ describe('Shared: permissions', function() {
]);
});
- it('should ignore undefined and null variable values', function() {
+ it('should ignore undefined and null variable values', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: null,
BAR: 'qux',
@@ -86,7 +83,7 @@ describe('Shared: permissions', function() {
]);
});
- it('should stringify number values', function() {
+ it('should stringify number values', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: 1,
BAR: 0,
@@ -104,29 +101,27 @@ describe('Shared: permissions', function() {
'call'
]);
});
-
});
- describe('given linux', function() {
-
- beforeEach(function() {
+ describe('given linux', function () {
+ beforeEach(function () {
this.osPlatformStub = m.sinon.stub(os, 'platform');
this.osPlatformStub.returns('linux');
});
- afterEach(function() {
+ afterEach(function () {
this.osPlatformStub.restore();
});
- it('should return an empty array if no environment', function() {
+ it('should return an empty array if no environment', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix()).to.deep.equal([]);
});
- it('should return an empty array if the environment is an empty object', function() {
+ it('should return an empty array if the environment is an empty object', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({})).to.deep.equal([]);
});
- it('should create an environment command prefix out of one variable', function() {
+ it('should create an environment command prefix out of one variable', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: 'bar'
})).to.deep.equal([
@@ -135,7 +130,7 @@ describe('Shared: permissions', function() {
]);
});
- it('should create an environment command prefix out of many variables', function() {
+ it('should create an environment command prefix out of many variables', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: 'bar',
BAR: 'baz',
@@ -148,7 +143,7 @@ describe('Shared: permissions', function() {
]);
});
- it('should ignore undefined and null variable values', function() {
+ it('should ignore undefined and null variable values', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: null,
BAR: 'qux',
@@ -159,7 +154,7 @@ describe('Shared: permissions', function() {
]);
});
- it('should stringify number values', function() {
+ it('should stringify number values', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: 1,
BAR: 0,
@@ -171,29 +166,27 @@ describe('Shared: permissions', function() {
'BAZ=-1'
]);
});
-
});
- describe('given darwin', function() {
-
- beforeEach(function() {
+ describe('given darwin', function () {
+ beforeEach(function () {
this.osPlatformStub = m.sinon.stub(os, 'platform');
this.osPlatformStub.returns('darwin');
});
- afterEach(function() {
+ afterEach(function () {
this.osPlatformStub.restore();
});
- it('should return an empty array if no environment', function() {
+ it('should return an empty array if no environment', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix()).to.deep.equal([]);
});
- it('should return an empty array if the environment is an empty object', function() {
+ it('should return an empty array if the environment is an empty object', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({})).to.deep.equal([]);
});
- it('should create an environment command prefix out of one variable', function() {
+ it('should create an environment command prefix out of one variable', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: 'bar'
})).to.deep.equal([
@@ -202,7 +195,7 @@ describe('Shared: permissions', function() {
]);
});
- it('should create an environment command prefix out of many variables', function() {
+ it('should create an environment command prefix out of many variables', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: 'bar',
BAR: 'baz',
@@ -215,7 +208,7 @@ describe('Shared: permissions', function() {
]);
});
- it('should ignore undefined and null variable values', function() {
+ it('should ignore undefined and null variable values', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: null,
BAR: 'qux',
@@ -226,7 +219,7 @@ describe('Shared: permissions', function() {
]);
});
- it('should stringify number values', function() {
+ it('should stringify number values', function () {
m.chai.expect(permissions.getEnvironmentCommandPrefix({
FOO: 1,
BAR: 0,
@@ -238,9 +231,6 @@ describe('Shared: permissions', function() {
'BAZ=-1'
]);
});
-
});
-
});
-
});
diff --git a/tests/shared/release.spec.js b/tests/shared/release.spec.js
index bfad5849..61ed4e3f 100644
--- a/tests/shared/release.spec.js
+++ b/tests/shared/release.spec.js
@@ -20,113 +20,97 @@ const m = require('mochainon');
const _ = require('lodash');
const release = require('../../lib/shared/release');
-describe('Shared: Release', function() {
-
- describe('.RELEASE_TYPE', function() {
-
- it('should be a plain object', function() {
+describe('Shared: Release', function () {
+ describe('.RELEASE_TYPE', function () {
+ it('should be a plain object', function () {
m.chai.expect(_.isPlainObject(release.RELEASE_TYPE)).to.be.true;
});
- it('should contain keys with different values', function() {
+ it('should contain keys with different values', function () {
const keys = _.keys(release.RELEASE_TYPE);
const uniqueValues = _.uniq(_.values(release.RELEASE_TYPE));
m.chai.expect(_.size(keys)).to.equal(_.size(uniqueValues));
});
-
});
- describe('.getReleaseType()', function() {
-
- it('should return the unknown release type if the version is not valid semver', function() {
+ describe('.getReleaseType()', function () {
+ it('should return the unknown release type if the version is not valid semver', function () {
const releaseType = release.getReleaseType('foo.bar');
m.chai.expect(releaseType).to.equal(release.RELEASE_TYPE.UNKNOWN);
});
- describe('given the version has a short git commit hash build number', function() {
-
- it('should return the snapshot release type', function() {
+ describe('given the version has a short git commit hash build number', function () {
+ it('should return the snapshot release type', function () {
const releaseType = release.getReleaseType('1.0.0+6374412');
m.chai.expect(releaseType).to.equal(release.RELEASE_TYPE.SNAPSHOT);
});
- it('should return the snapshot release type if the version has a pre release tag', function() {
+ it('should return the snapshot release type if the version has a pre release tag', function () {
const releaseType = release.getReleaseType('1.0.0-beta.19+6374412');
m.chai.expect(releaseType).to.equal(release.RELEASE_TYPE.SNAPSHOT);
});
-
});
- describe('given the version has a long git commit hash build number', function() {
-
- it('should return the snapshot release type', function() {
+ describe('given the version has a long git commit hash build number', function () {
+ it('should return the snapshot release type', function () {
const releaseType = release.getReleaseType('1.0.0+6374412554b034799bfc6e13b4e39c3f5e6386e6');
m.chai.expect(releaseType).to.equal(release.RELEASE_TYPE.SNAPSHOT);
});
- it('should return the snapshot release type if the version has a pre release tag', function() {
+ it('should return the snapshot release type if the version has a pre release tag', function () {
const releaseType = release.getReleaseType('1.0.0-beta.19+6374412554b034799bfc6e13b4e39c3f5e6386e6');
m.chai.expect(releaseType).to.equal(release.RELEASE_TYPE.SNAPSHOT);
});
-
});
- describe('given the version has no build number', function() {
-
- it('should return the production release type', function() {
+ describe('given the version has no build number', function () {
+ it('should return the production release type', function () {
const releaseType = release.getReleaseType('1.0.0');
m.chai.expect(releaseType).to.equal(release.RELEASE_TYPE.PRODUCTION);
});
- it('should return the production release type if the version has a pre release tag', function() {
+ it('should return the production release type if the version has a pre release tag', function () {
const releaseType = release.getReleaseType('1.0.0-beta.19');
m.chai.expect(releaseType).to.equal(release.RELEASE_TYPE.PRODUCTION);
});
-
});
- describe('given a build number that is not a git commit hash', function() {
-
- it('should return the unknown release type', function() {
+ describe('given a build number that is not a git commit hash', function () {
+ it('should return the unknown release type', function () {
const releaseType = release.getReleaseType('1.0.0+foo');
m.chai.expect(releaseType).to.equal(release.RELEASE_TYPE.UNKNOWN);
});
- it('should return the unknown release type if the version has a pre release tag', function() {
+ it('should return the unknown release type if the version has a pre release tag', function () {
const releaseType = release.getReleaseType('1.0.0-beta.19+foo');
m.chai.expect(releaseType).to.equal(release.RELEASE_TYPE.UNKNOWN);
});
-
});
-
});
- describe('.isStableRelease()', function() {
-
- it('should return true if given a production stable version', function() {
+ describe('.isStableRelease()', function () {
+ it('should return true if given a production stable version', function () {
m.chai.expect(release.isStableRelease('1.0.0')).to.be.true;
});
- it('should return false if given a production release candidate version', function() {
+ it('should return false if given a production release candidate version', function () {
m.chai.expect(release.isStableRelease('1.0.0-rc.2')).to.be.false;
});
- it('should return false if given a production beta version', function() {
+ it('should return false if given a production beta version', function () {
m.chai.expect(release.isStableRelease('1.0.0-beta.1')).to.be.false;
});
- it('should return true if given a snapshot stable version', function() {
+ it('should return true if given a snapshot stable version', function () {
m.chai.expect(release.isStableRelease('1.0.0+6374412')).to.be.true;
});
- it('should return false if given a snapshot release candidate version', function() {
+ it('should return false if given a snapshot release candidate version', function () {
m.chai.expect(release.isStableRelease('1.0.0-rc.2+6374412')).to.be.false;
});
- it('should return false if given a snapshot beta version', function() {
+ it('should return false if given a snapshot beta version', function () {
m.chai.expect(release.isStableRelease('1.0.0-beta.1+6374412')).to.be.false;
});
-
});
-
});
diff --git a/tests/shared/robot.spec.js b/tests/shared/robot.spec.js
index 7dedf117..2c80bda0 100644
--- a/tests/shared/robot.spec.js
+++ b/tests/shared/robot.spec.js
@@ -20,78 +20,72 @@ const m = require('mochainon');
const _ = require('lodash');
const robot = require('../../lib/shared/robot');
-describe('Shared: Robot', function() {
-
- describe('.COMMAND', function() {
-
- it('should be a plain object', function() {
+describe('Shared: Robot', function () {
+ describe('.COMMAND', function () {
+ it('should be a plain object', function () {
m.chai.expect(_.isPlainObject(robot.COMMAND)).to.be.true;
});
- it('should only contain string values', function() {
+ it('should only contain string values', function () {
m.chai.expect(_.every(_.values(robot.COMMAND), _.isString)).to.be.true;
});
- it('should contain only unique values', function() {
+ it('should contain only unique values', function () {
const numberOfKeys = _.size(_.keys(robot.COMMAND));
m.chai.expect(_.size(_.uniq(_.values(robot.COMMAND)))).to.equal(numberOfKeys);
});
-
});
- describe('.isEnabled()', function() {
-
- it('should return false if ETCHER_CLI_ROBOT is not set', function() {
+ describe('.isEnabled()', function () {
+ it('should return false if ETCHER_CLI_ROBOT is not set', function () {
m.chai.expect(robot.isEnabled({})).to.be.false;
});
- it('should return true if ETCHER_CLI_ROBOT=1', function() {
+ it('should return true if ETCHER_CLI_ROBOT=1', function () {
m.chai.expect(robot.isEnabled({
ETCHER_CLI_ROBOT: 1
})).to.be.true;
});
- it('should return false if ETCHER_CLI_ROBOT=0', function() {
+ it('should return false if ETCHER_CLI_ROBOT=0', function () {
m.chai.expect(robot.isEnabled({
ETCHER_CLI_ROBOT: 0
})).to.be.false;
});
- it('should return true if ETCHER_CLI_ROBOT="true"', function() {
+ it('should return true if ETCHER_CLI_ROBOT="true"', function () {
m.chai.expect(robot.isEnabled({
ETCHER_CLI_ROBOT: 'true'
})).to.be.true;
});
- it('should return false if ETCHER_CLI_ROBOT="false"', function() {
+ it('should return false if ETCHER_CLI_ROBOT="false"', function () {
m.chai.expect(robot.isEnabled({
ETCHER_CLI_ROBOT: 'false'
})).to.be.false;
});
- it('should return true if ETCHER_CLI_ROBOT=true', function() {
+ it('should return true if ETCHER_CLI_ROBOT=true', function () {
m.chai.expect(robot.isEnabled({
ETCHER_CLI_ROBOT: true
})).to.be.true;
});
- it('should return false if ETCHER_CLI_ROBOT=false', function() {
+ it('should return false if ETCHER_CLI_ROBOT=false', function () {
m.chai.expect(robot.isEnabled({
ETCHER_CLI_ROBOT: false
})).to.be.false;
});
-
});
- describe('.buildMessage()', function() {
-
- it('should build a message without data', function() {
+ describe('.buildMessage()', function () {
+ it('should build a message without data', function () {
const message = robot.buildMessage('hello');
const result = '{"command":"hello","data":{}}';
m.chai.expect(message).to.equal(result);
});
- it('should build a message with data', function() {
+ it('should build a message with data', function () {
const message = robot.buildMessage('hello', {
foo: 1,
bar: 2
@@ -100,112 +94,108 @@ describe('Shared: Robot', function() {
m.chai.expect(message).to.equal(result);
});
- it('should throw if data is defined but it not an object', function() {
+ it('should throw if data is defined but it not an object', function () {
m.chai.expect(() => {
robot.buildMessage('hello', 'world');
}).to.throw('Invalid data: world');
});
-
});
- describe('.isMessage()', function() {
-
- it('should return true if message is an empty object', function() {
+ describe('.isMessage()', function () {
+ it('should return true if message is an empty object', function () {
m.chai.expect(robot.isMessage('{}')).to.be.true;
});
- it('should return true if message is an object', function() {
+ it('should return true if message is an object', function () {
m.chai.expect(robot.isMessage('{"command":"foo"}')).to.be.true;
});
- it('should return false if message is an invalid object', function() {
+ it('should return false if message is an invalid object', function () {
m.chai.expect(robot.isMessage('{"command":\\foo"}')).to.be.false;
});
- it('should return false if message is an unquoted string', function() {
+ it('should return false if message is an unquoted string', function () {
m.chai.expect(robot.isMessage('foo')).to.be.false;
});
- it('should return false if message is an quoted string', function() {
+ it('should return false if message is an quoted string', function () {
m.chai.expect(robot.isMessage('"foo"')).to.be.false;
});
- it('should return false if message is an empty string', function() {
+ it('should return false if message is an empty string', function () {
m.chai.expect(robot.isMessage('')).to.be.false;
});
- it('should return false if message is undefined', function() {
+ it('should return false if message is undefined', function () {
m.chai.expect(robot.isMessage(undefined)).to.be.false;
});
- it('should return false if message is null', function() {
+ it('should return false if message is null', function () {
m.chai.expect(robot.isMessage(null)).to.be.false;
});
- it('should return false if message is a positive integer string', function() {
+ it('should return false if message is a positive integer string', function () {
m.chai.expect(robot.isMessage('5')).to.be.false;
});
- it('should return false if message is a negative integer string', function() {
+ it('should return false if message is a negative integer string', function () {
m.chai.expect(robot.isMessage('-3')).to.be.false;
});
- it('should return false if message is a zero string', function() {
+ it('should return false if message is a zero string', function () {
m.chai.expect(robot.isMessage('0')).to.be.false;
});
- it('should return false if message is a positive float string', function() {
+ it('should return false if message is a positive float string', function () {
m.chai.expect(robot.isMessage('5.3')).to.be.false;
});
- it('should return false if message is a negative float string', function() {
+ it('should return false if message is a negative float string', function () {
m.chai.expect(robot.isMessage('-2.1')).to.be.false;
});
- it('should return false if message is a positive integer', function() {
+ it('should return false if message is a positive integer', function () {
m.chai.expect(robot.isMessage(5)).to.be.false;
});
- it('should return false if message is a negative integer', function() {
+ it('should return false if message is a negative integer', function () {
m.chai.expect(robot.isMessage(-3)).to.be.false;
});
- it('should return false if message is zero', function() {
+ it('should return false if message is zero', function () {
m.chai.expect(robot.isMessage(0)).to.be.false;
});
- it('should return false if message is a positive float', function() {
+ it('should return false if message is a positive float', function () {
m.chai.expect(robot.isMessage(5.3)).to.be.false;
});
- it('should return false if message is a negative float', function() {
+ it('should return false if message is a negative float', function () {
m.chai.expect(robot.isMessage(-2.1)).to.be.false;
});
- it('should return false if message is an array', function() {
+ it('should return false if message is an array', function () {
m.chai.expect(robot.isMessage([ 'foo' ])).to.be.false;
});
- it('should return false if message is an array string', function() {
+ it('should return false if message is an array string', function () {
m.chai.expect(robot.isMessage('["foo"]')).to.be.false;
});
- it('should return true for a message built with .buildMessage()', function() {
+ it('should return true for a message built with .buildMessage()', function () {
m.chai.expect(robot.isMessage(robot.buildMessage('foo', {
message: 'bar'
}))).to.be.true;
});
- it('should return true for a message built with .buildErrorMessage()', function() {
+ it('should return true for a message built with .buildErrorMessage()', function () {
const error = new Error('foo');
m.chai.expect(robot.isMessage(robot.buildErrorMessage(error))).to.be.true;
});
-
});
- describe('.buildErrorMessage()', function() {
-
- it('should build a message from a simple error', function() {
+ describe('.buildErrorMessage()', function () {
+ it('should build a message from a simple error', function () {
const error = new Error('foo');
const message = robot.buildErrorMessage(error);
@@ -218,7 +208,7 @@ describe('Shared: Robot', function() {
});
});
- it('should save the error description', function() {
+ it('should save the error description', function () {
const error = new Error('foo');
error.description = 'error description';
const message = robot.buildErrorMessage(error);
@@ -233,7 +223,7 @@ describe('Shared: Robot', function() {
});
});
- it('should save the error code', function() {
+ it('should save the error code', function () {
const error = new Error('foo');
error.code = 'MYERROR';
const message = robot.buildErrorMessage(error);
@@ -248,18 +238,16 @@ describe('Shared: Robot', function() {
});
});
- it('should handle a string error', function() {
+ it('should handle a string error', function () {
const message = JSON.parse(robot.buildErrorMessage('foo'));
m.chai.expect(message.data.message).to.equal('foo');
m.chai.expect(message.data.stack).to.be.a.string;
m.chai.expect(_.isEmpty(message.data.stack)).to.be.false;
});
-
});
- describe('.parseMessage()', function() {
-
- it('should parse a valid message', function() {
+ describe('.parseMessage()', function () {
+ it('should parse a valid message', function () {
const message = robot.buildMessage('foo', {
bar: 1
});
@@ -272,7 +260,7 @@ describe('Shared: Robot', function() {
});
});
- it('should parse a valid without data', function() {
+ it('should parse a valid without data', function () {
const message = robot.buildMessage('foo');
m.chai.expect(robot.parseMessage(message)).to.deep.equal({
command: 'foo',
@@ -280,29 +268,27 @@ describe('Shared: Robot', function() {
});
});
- it('should throw if input is not valid JSON', function() {
+ it('should throw if input is not valid JSON', function () {
m.chai.expect(() => {
robot.parseMessage('Hello world\nFoo Bar');
}).to.throw('Invalid message');
});
- it('should throw if input has no command', function() {
+ it('should throw if input has no command', function () {
m.chai.expect(() => {
robot.parseMessage('{"data":{"foo":"bar"}}');
}).to.throw('Invalid message');
});
- it('should throw if input has no data', function() {
+ it('should throw if input has no data', function () {
m.chai.expect(() => {
robot.parseMessage('{"command":"foo"}');
}).to.throw('Invalid message');
});
-
});
- describe('.getCommand()', function() {
-
- it('should get the command of a message', function() {
+ describe('.getCommand()', function () {
+ it('should get the command of a message', function () {
const message = robot.parseMessage(robot.buildMessage('hello', {
foo: 1,
bar: 2
@@ -310,12 +296,10 @@ describe('Shared: Robot', function() {
m.chai.expect(robot.getCommand(message)).to.equal('hello');
});
-
});
- describe('.getData()', function() {
-
- it('should get the data of a message', function() {
+ describe('.getData()', function () {
+ it('should get the data of a message', function () {
const message = robot.parseMessage(robot.buildMessage('hello', {
foo: 1,
bar: 2
@@ -327,42 +311,38 @@ describe('Shared: Robot', function() {
});
});
- it('should return an empty object if the message has no data', function() {
+ it('should return an empty object if the message has no data', function () {
m.chai.expect(robot.getData({
command: 'foo'
})).to.deep.equal({});
});
-
});
- describe('.recomposeErrorMessage()', function() {
-
- it('should return an instance of Error', function() {
+ describe('.recomposeErrorMessage()', function () {
+ it('should return an instance of Error', function () {
const error = new Error('Foo bar');
const message = robot.parseMessage(robot.buildErrorMessage(error));
m.chai.expect(robot.recomposeErrorMessage(message)).to.be.an.instanceof(Error);
});
- it('should be able to recompose an error object', function() {
+ it('should be able to recompose an error object', function () {
const error = new Error('Foo bar');
const message = robot.parseMessage(robot.buildErrorMessage(error));
m.chai.expect(robot.recomposeErrorMessage(message)).to.deep.equal(error);
});
- it('should be able to recompose an error object with a code', function() {
+ it('should be able to recompose an error object with a code', function () {
const error = new Error('Foo bar');
error.code = 'FOO';
const message = robot.parseMessage(robot.buildErrorMessage(error));
m.chai.expect(robot.recomposeErrorMessage(message)).to.deep.equal(error);
});
- it('should be able to recompose an error object with a description', function() {
+ it('should be able to recompose an error object with a description', function () {
const error = new Error('Foo bar');
error.description = 'My description';
const message = robot.parseMessage(robot.buildErrorMessage(error));
m.chai.expect(robot.recomposeErrorMessage(message)).to.deep.equal(error);
});
-
});
-
});
diff --git a/tests/shared/s3-packages.spec.js b/tests/shared/s3-packages.spec.js
index 13d79f70..e67b5464 100644
--- a/tests/shared/s3-packages.spec.js
+++ b/tests/shared/s3-packages.spec.js
@@ -23,34 +23,30 @@ const nock = require('nock');
const s3Packages = require('../../lib/shared/s3-packages');
const release = require('../../lib/shared/release');
-describe('Shared: s3Packages', function() {
-
- describe('.getBucketUrlFromReleaseType()', function() {
-
- it('should return the production URL if given a production release type', function() {
+describe('Shared: s3Packages', function () {
+ describe('.getBucketUrlFromReleaseType()', function () {
+ it('should return the production URL if given a production release type', function () {
const bucketUrl = s3Packages.getBucketUrlFromReleaseType(release.RELEASE_TYPE.PRODUCTION);
m.chai.expect(bucketUrl).to.equal(s3Packages.BUCKET_URL.PRODUCTION);
});
- it('should return the snapshot URL if given a snapshot release type', function() {
+ it('should return the snapshot URL if given a snapshot release type', function () {
const bucketUrl = s3Packages.getBucketUrlFromReleaseType(release.RELEASE_TYPE.SNAPSHOT);
m.chai.expect(bucketUrl).to.equal(s3Packages.BUCKET_URL.SNAPSHOT);
});
- it('should return null if given an unknown release type', function() {
+ it('should return null if given an unknown release type', function () {
const bucketUrl = s3Packages.getBucketUrlFromReleaseType(release.RELEASE_TYPE.UNKNOWN);
m.chai.expect(bucketUrl).to.be.null;
});
-
});
- describe('.getRemoteVersions()', function() {
-
- beforeEach(function() {
+ describe('.getRemoteVersions()', function () {
+ beforeEach(function () {
s3Packages.getRemoteVersions.cache.clear();
});
- it('should be rejected if url is null', function(done) {
+ it('should be rejected if url is null', function (done) {
s3Packages.getRemoteVersions(null).catch((error) => {
m.chai.expect(error).to.be.an.instanceof(Error);
m.chai.expect(error.message).to.equal('Invalid bucket url: null');
@@ -58,9 +54,8 @@ describe('Shared: s3Packages', function() {
});
});
- describe('given an empty bucket', function() {
-
- beforeEach(function() {
+ describe('given an empty bucket', function () {
+ beforeEach(function () {
nock(s3Packages.BUCKET_URL.PRODUCTION).get('/').reply(200, `
resin-production-downloads
@@ -72,22 +67,20 @@ describe('Shared: s3Packages', function() {
`);
});
- afterEach(function() {
+ afterEach(function () {
nock.cleanAll();
});
- it('should resolve an empty array', function(done) {
+ it('should resolve an empty array', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([]);
done();
}).catch(done);
});
-
});
- describe('given many versions', function() {
-
- beforeEach(function() {
+ describe('given many versions', function () {
+ beforeEach(function () {
nock(s3Packages.BUCKET_URL.PRODUCTION).get('/').reply(200, `
resin-production-downloads
@@ -211,11 +204,11 @@ describe('Shared: s3Packages', function() {
`);
});
- afterEach(function() {
+ afterEach(function () {
nock.cleanAll();
});
- it('should resolve all the available versions', function(done) {
+ it('should resolve all the available versions', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([
'1.0.0-beta.17',
@@ -224,12 +217,10 @@ describe('Shared: s3Packages', function() {
done();
}).catch(done);
});
-
});
- describe('given a version is being uploaded', function() {
-
- beforeEach(function() {
+ describe('given a version is being uploaded', function () {
+ beforeEach(function () {
nock(s3Packages.BUCKET_URL.PRODUCTION).get('/').reply(200, `
resin-production-downloads
@@ -346,11 +337,11 @@ describe('Shared: s3Packages', function() {
`);
});
- afterEach(function() {
+ afterEach(function () {
nock.cleanAll();
});
- it('should resolve all the entirely available versions', function(done) {
+ it('should resolve all the entirely available versions', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([
'1.0.0-beta.17'
@@ -358,12 +349,10 @@ describe('Shared: s3Packages', function() {
done();
}).catch(done);
});
-
});
- describe('given other programs in the bucket', function() {
-
- beforeEach(function() {
+ describe('given other programs in the bucket', function () {
+ beforeEach(function () {
nock(s3Packages.BUCKET_URL.PRODUCTION).get('/').reply(200, `
resin-production-downloads
@@ -487,11 +476,11 @@ describe('Shared: s3Packages', function() {
`);
});
- afterEach(function() {
+ afterEach(function () {
nock.cleanAll();
});
- it('should not consider the other packages', function(done) {
+ it('should not consider the other packages', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([
'1.0.0-beta.17'
@@ -499,12 +488,10 @@ describe('Shared: s3Packages', function() {
done();
}).catch(done);
});
-
});
- describe('given only other programs in the bucket', function() {
-
- beforeEach(function() {
+ describe('given only other programs in the bucket', function () {
+ beforeEach(function () {
nock(s3Packages.BUCKET_URL.PRODUCTION).get('/').reply(200, `
resin-production-downloads
@@ -565,41 +552,37 @@ describe('Shared: s3Packages', function() {
`);
});
- afterEach(function() {
+ afterEach(function () {
nock.cleanAll();
});
- it('should resolve an empty array', function(done) {
+ it('should resolve an empty array', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([]);
done();
}).catch(done);
});
-
});
- describe('given an unsuccessful request', function() {
-
- beforeEach(function() {
+ describe('given an unsuccessful request', function () {
+ beforeEach(function () {
nock(s3Packages.BUCKET_URL.PRODUCTION).get('/').reply(500);
});
- afterEach(function() {
+ afterEach(function () {
nock.cleanAll();
});
- it('should be rejected with an error', function(done) {
+ it('should be rejected with an error', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).catch((error) => {
m.chai.expect(error).to.be.an.instanceof(Error);
done();
});
});
-
});
- describe('given ENOTFOUND', function() {
-
- beforeEach(function() {
+ describe('given ENOTFOUND', function () {
+ beforeEach(function () {
const error = new Error('ENOTFOUND');
error.code = 'ENOTFOUND';
@@ -607,22 +590,20 @@ describe('Shared: s3Packages', function() {
this.requestGetAsyncStub.returns(Bluebird.reject(error));
});
- afterEach(function() {
+ afterEach(function () {
this.requestGetAsyncStub.restore();
});
- it('should resolve an empty array', function(done) {
+ it('should resolve an empty array', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([]);
done();
}).catch(done);
});
-
});
- describe('given ETIMEDOUT', function() {
-
- beforeEach(function() {
+ describe('given ETIMEDOUT', function () {
+ beforeEach(function () {
const error = new Error('ETIMEDOUT');
error.code = 'ETIMEDOUT';
@@ -630,22 +611,20 @@ describe('Shared: s3Packages', function() {
this.requestGetAsyncStub.returns(Bluebird.reject(error));
});
- afterEach(function() {
+ afterEach(function () {
this.requestGetAsyncStub.restore();
});
- it('should resolve an empty array', function(done) {
+ it('should resolve an empty array', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([]);
done();
}).catch(done);
});
-
});
- describe('given EHOSTDOWN', function() {
-
- beforeEach(function() {
+ describe('given EHOSTDOWN', function () {
+ beforeEach(function () {
const error = new Error('EHOSTDOWN');
error.code = 'EHOSTDOWN';
@@ -653,22 +632,20 @@ describe('Shared: s3Packages', function() {
this.requestGetAsyncStub.returns(Bluebird.reject(error));
});
- afterEach(function() {
+ afterEach(function () {
this.requestGetAsyncStub.restore();
});
- it('should resolve an empty array', function(done) {
+ it('should resolve an empty array', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([]);
done();
}).catch(done);
});
-
});
- describe('given ECONNRESET', function() {
-
- beforeEach(function() {
+ describe('given ECONNRESET', function () {
+ beforeEach(function () {
const error = new Error('ECONNRESET');
error.code = 'ECONNRESET';
@@ -676,22 +653,20 @@ describe('Shared: s3Packages', function() {
this.requestGetAsyncStub.returns(Bluebird.reject(error));
});
- afterEach(function() {
+ afterEach(function () {
this.requestGetAsyncStub.restore();
});
- it('should resolve an empty array', function(done) {
+ it('should resolve an empty array', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([]);
done();
}).catch(done);
});
-
});
- describe('given ECONNREFUSED', function() {
-
- beforeEach(function() {
+ describe('given ECONNREFUSED', function () {
+ beforeEach(function () {
const error = new Error('ECONNREFUSED');
error.code = 'ECONNREFUSED';
@@ -699,22 +674,20 @@ describe('Shared: s3Packages', function() {
this.requestGetAsyncStub.returns(Bluebird.reject(error));
});
- afterEach(function() {
+ afterEach(function () {
this.requestGetAsyncStub.restore();
});
- it('should resolve an empty array', function(done) {
+ it('should resolve an empty array', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([]);
done();
}).catch(done);
});
-
});
- describe('given EACCES', function() {
-
- beforeEach(function() {
+ describe('given EACCES', function () {
+ beforeEach(function () {
const error = new Error('EACCES');
error.code = 'EACCES';
@@ -722,22 +695,20 @@ describe('Shared: s3Packages', function() {
this.requestGetAsyncStub.returns(Bluebird.reject(error));
});
- afterEach(function() {
+ afterEach(function () {
this.requestGetAsyncStub.restore();
});
- it('should resolve an empty array', function(done) {
+ it('should resolve an empty array', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([]);
done();
}).catch(done);
});
-
});
- describe('given UNABLE_TO_VERIFY_LEAF_SIGNATURE', function() {
-
- beforeEach(function() {
+ describe('given UNABLE_TO_VERIFY_LEAF_SIGNATURE', function () {
+ beforeEach(function () {
const error = new Error('UNABLE_TO_VERIFY_LEAF_SIGNATURE');
error.code = 'UNABLE_TO_VERIFY_LEAF_SIGNATURE';
@@ -745,165 +716,141 @@ describe('Shared: s3Packages', function() {
this.requestGetAsyncStub.returns(Bluebird.reject(error));
});
- afterEach(function() {
+ afterEach(function () {
this.requestGetAsyncStub.restore();
});
- it('should resolve an empty array', function(done) {
+ it('should resolve an empty array', function (done) {
s3Packages.getRemoteVersions(s3Packages.BUCKET_URL.PRODUCTION).then((versions) => {
m.chai.expect(versions).to.deep.equal([]);
done();
}).catch(done);
});
-
});
-
});
- describe('.getLatestVersion()', function() {
-
- describe('given a valid production ETCHER_FAKE_S3_LATEST_VERSION environment variable', function() {
-
- beforeEach(function() {
+ describe('.getLatestVersion()', function () {
+ describe('given a valid production ETCHER_FAKE_S3_LATEST_VERSION environment variable', function () {
+ beforeEach(function () {
process.env.ETCHER_FAKE_S3_LATEST_VERSION = '9.9.9';
});
- afterEach(function() {
+ afterEach(function () {
Reflect.deleteProperty(process.env, 'ETCHER_FAKE_S3_LATEST_VERSION');
});
- describe('given a production release type', function() {
-
- it('should resolve the variable', function(done) {
+ describe('given a production release type', function () {
+ it('should resolve the variable', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION).then((latestVersion) => {
m.chai.expect(latestVersion).to.equal('9.9.9');
done();
}).catch(done);
});
-
});
- describe('given a snapshot release type', function() {
-
- it('should resolve undefined', function(done) {
+ describe('given a snapshot release type', function () {
+ it('should resolve undefined', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.SNAPSHOT).then((latestVersion) => {
m.chai.expect(latestVersion).to.be.undefined;
done();
}).catch(done);
});
-
});
-
});
- describe('given a valid snapshot ETCHER_FAKE_S3_LATEST_VERSION environment variable', function() {
-
- beforeEach(function() {
+ describe('given a valid snapshot ETCHER_FAKE_S3_LATEST_VERSION environment variable', function () {
+ beforeEach(function () {
process.env.ETCHER_FAKE_S3_LATEST_VERSION = '9.9.9+7b47334';
});
- afterEach(function() {
+ afterEach(function () {
Reflect.deleteProperty(process.env, 'ETCHER_FAKE_S3_LATEST_VERSION');
});
- describe('given a snapshot release type', function() {
-
- it('should resolve the variable', function(done) {
+ describe('given a snapshot release type', function () {
+ it('should resolve the variable', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.SNAPSHOT).then((latestVersion) => {
m.chai.expect(latestVersion).to.equal('9.9.9+7b47334');
done();
}).catch(done);
});
-
});
- describe('given a production release type', function() {
-
- it('should resolve undefined', function(done) {
+ describe('given a production release type', function () {
+ it('should resolve undefined', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION).then((latestVersion) => {
m.chai.expect(latestVersion).to.be.undefined;
done();
}).catch(done);
});
-
});
-
});
- describe('given an invalid ETCHER_FAKE_S3_LATEST_VERSION environment variable', function() {
-
- beforeEach(function() {
+ describe('given an invalid ETCHER_FAKE_S3_LATEST_VERSION environment variable', function () {
+ beforeEach(function () {
process.env.ETCHER_FAKE_S3_LATEST_VERSION = 'foo';
});
- afterEach(function() {
+ afterEach(function () {
Reflect.deleteProperty(process.env, 'ETCHER_FAKE_S3_LATEST_VERSION');
});
- it('should resolve undefined', function(done) {
+ it('should resolve undefined', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION).then((latestVersion) => {
m.chai.expect(latestVersion).to.be.undefined;
done();
}).catch(done);
});
-
});
- describe('given an invalid release type', function() {
-
- it('should be rejected with an error', function(done) {
+ describe('given an invalid release type', function () {
+ it('should be rejected with an error', function (done) {
s3Packages.getLatestVersion('foobar').catch((error) => {
m.chai.expect(error).to.be.an.instanceof(Error);
m.chai.expect(error.message).to.equal('No bucket URL found for release type: foobar');
done();
});
});
-
});
- describe('given no remote versions', function() {
-
- beforeEach(function() {
+ describe('given no remote versions', function () {
+ beforeEach(function () {
this.getRemoteVersionsStub = m.sinon.stub(s3Packages, 'getRemoteVersions');
this.getRemoteVersionsStub.returns(Bluebird.resolve([]));
});
- afterEach(function() {
+ afterEach(function () {
this.getRemoteVersionsStub.restore();
});
- it('should resolve undefined', function(done) {
+ it('should resolve undefined', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION).then((latestVersion) => {
m.chai.expect(latestVersion).to.be.undefined;
done();
}).catch(done);
});
-
});
- describe('given a single version', function() {
-
- beforeEach(function() {
+ describe('given a single version', function () {
+ beforeEach(function () {
this.getRemoteVersionsStub = m.sinon.stub(s3Packages, 'getRemoteVersions');
this.getRemoteVersionsStub.returns(Bluebird.resolve([ '0.5.0' ]));
});
- afterEach(function() {
+ afterEach(function () {
this.getRemoteVersionsStub.restore();
});
- it('should resolve the version', function(done) {
+ it('should resolve the version', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION).then((latestVersion) => {
m.chai.expect(latestVersion).to.equal('0.5.0');
done();
}).catch(done);
});
-
});
- describe('given multiple versions', function() {
-
- beforeEach(function() {
+ describe('given multiple versions', function () {
+ beforeEach(function () {
this.getRemoteVersionsStub = m.sinon.stub(s3Packages, 'getRemoteVersions');
this.getRemoteVersionsStub.returns(Bluebird.resolve([
'2.1.0',
@@ -913,22 +860,20 @@ describe('Shared: s3Packages', function() {
]));
});
- afterEach(function() {
+ afterEach(function () {
this.getRemoteVersionsStub.restore();
});
- it('should resolve the latest version', function(done) {
+ it('should resolve the latest version', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION).then((latestVersion) => {
m.chai.expect(latestVersion).to.equal('2.1.0');
done();
}).catch(done);
});
-
});
- describe('given a greater production version in a snapshot bucket', function() {
-
- beforeEach(function() {
+ describe('given a greater production version in a snapshot bucket', function () {
+ beforeEach(function () {
this.getRemoteVersionsStub = m.sinon.stub(s3Packages, 'getRemoteVersions');
this.getRemoteVersionsStub.returns(Bluebird.resolve([
'1.0.0+abb6139',
@@ -936,22 +881,20 @@ describe('Shared: s3Packages', function() {
]));
});
- afterEach(function() {
+ afterEach(function () {
this.getRemoteVersionsStub.restore();
});
- it('should ignore production versions', function(done) {
+ it('should ignore production versions', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.SNAPSHOT).then((latestVersion) => {
m.chai.expect(latestVersion).to.equal('1.0.0+abb6139');
done();
}).catch(done);
});
-
});
- describe('given a greater snapshot version in a production bucket', function() {
-
- beforeEach(function() {
+ describe('given a greater snapshot version in a production bucket', function () {
+ beforeEach(function () {
this.getRemoteVersionsStub = m.sinon.stub(s3Packages, 'getRemoteVersions');
this.getRemoteVersionsStub.returns(Bluebird.resolve([
'1.0.0',
@@ -959,22 +902,20 @@ describe('Shared: s3Packages', function() {
]));
});
- afterEach(function() {
+ afterEach(function () {
this.getRemoteVersionsStub.restore();
});
- it('should ignore snapshot versions', function(done) {
+ it('should ignore snapshot versions', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION).then((latestVersion) => {
m.chai.expect(latestVersion).to.equal('1.0.0');
done();
}).catch(done);
});
-
});
- describe('given production v1, v2, and v3 remote versions', function() {
-
- beforeEach(function() {
+ describe('given production v1, v2, and v3 remote versions', function () {
+ beforeEach(function () {
this.getRemoteVersionsStub = m.sinon.stub(s3Packages, 'getRemoteVersions');
this.getRemoteVersionsStub.returns(Bluebird.resolve([
'3.0.1',
@@ -990,11 +931,11 @@ describe('Shared: s3Packages', function() {
]));
});
- afterEach(function() {
+ afterEach(function () {
this.getRemoteVersionsStub.restore();
});
- it('should be able to resolve the latest v1 version with a semver range', function(done) {
+ it('should be able to resolve the latest v1 version with a semver range', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION, {
range: '<2.0.0'
}).then((latestVersion) => {
@@ -1003,7 +944,7 @@ describe('Shared: s3Packages', function() {
}).catch(done);
});
- it('should be able to resolve the latest v2 version with a semver range', function(done) {
+ it('should be able to resolve the latest v2 version with a semver range', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION, {
range: '>=2.0.0 <3.0.0'
}).then((latestVersion) => {
@@ -1012,7 +953,7 @@ describe('Shared: s3Packages', function() {
}).catch(done);
});
- it('should be able to resolve the latest v3 version with a semver range', function(done) {
+ it('should be able to resolve the latest v3 version with a semver range', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION, {
range: '>=3.0.0'
}).then((latestVersion) => {
@@ -1021,7 +962,7 @@ describe('Shared: s3Packages', function() {
}).catch(done);
});
- it('should resolve the latest version if includeUnstableChannel is true', function(done) {
+ it('should resolve the latest version if includeUnstableChannel is true', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION, {
includeUnstableChannel: true
}).then((latestVersion) => {
@@ -1030,7 +971,7 @@ describe('Shared: s3Packages', function() {
}).catch(done);
});
- it('should resolve the latest version if includeUnstableChannel is false', function(done) {
+ it('should resolve the latest version if includeUnstableChannel is false', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION, {
includeUnstableChannel: false
}).then((latestVersion) => {
@@ -1038,12 +979,10 @@ describe('Shared: s3Packages', function() {
done();
}).catch(done);
});
-
});
- describe('given unstable and stable versions where the last version is stable', function() {
-
- beforeEach(function() {
+ describe('given unstable and stable versions where the last version is stable', function () {
+ beforeEach(function () {
this.getRemoteVersionsStub = m.sinon.stub(s3Packages, 'getRemoteVersions');
this.getRemoteVersionsStub.returns(Bluebird.resolve([
'3.0.1',
@@ -1055,11 +994,11 @@ describe('Shared: s3Packages', function() {
]));
});
- afterEach(function() {
+ afterEach(function () {
this.getRemoteVersionsStub.restore();
});
- it('should resolve the latest stable version if includeUnstableChannel is false', function(done) {
+ it('should resolve the latest stable version if includeUnstableChannel is false', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION, {
includeUnstableChannel: false
}).then((latestVersion) => {
@@ -1068,7 +1007,7 @@ describe('Shared: s3Packages', function() {
}).catch(done);
});
- it('should resolve the latest stable version if includeUnstableChannel is true', function(done) {
+ it('should resolve the latest stable version if includeUnstableChannel is true', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION, {
includeUnstableChannel: true
}).then((latestVersion) => {
@@ -1076,12 +1015,10 @@ describe('Shared: s3Packages', function() {
done();
}).catch(done);
});
-
});
- describe('given unstable and stable versions where the last version is unstable', function() {
-
- beforeEach(function() {
+ describe('given unstable and stable versions where the last version is unstable', function () {
+ beforeEach(function () {
this.getRemoteVersionsStub = m.sinon.stub(s3Packages, 'getRemoteVersions');
this.getRemoteVersionsStub.returns(Bluebird.resolve([
'3.0.2-beta.1',
@@ -1094,11 +1031,11 @@ describe('Shared: s3Packages', function() {
]));
});
- afterEach(function() {
+ afterEach(function () {
this.getRemoteVersionsStub.restore();
});
- it('should resolve the latest stable version if includeUnstableChannel is false', function(done) {
+ it('should resolve the latest stable version if includeUnstableChannel is false', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION, {
includeUnstableChannel: false
}).then((latestVersion) => {
@@ -1107,7 +1044,7 @@ describe('Shared: s3Packages', function() {
}).catch(done);
});
- it('should resolve the latest unstable version if includeUnstableChannel is true', function(done) {
+ it('should resolve the latest unstable version if includeUnstableChannel is true', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION, {
includeUnstableChannel: true
}).then((latestVersion) => {
@@ -1115,12 +1052,10 @@ describe('Shared: s3Packages', function() {
done();
}).catch(done);
});
-
});
- describe('given pre-release production remote versions', function() {
-
- beforeEach(function() {
+ describe('given pre-release production remote versions', function () {
+ beforeEach(function () {
this.getRemoteVersionsStub = m.sinon.stub(s3Packages, 'getRemoteVersions');
this.getRemoteVersionsStub.returns(Bluebird.resolve([
'2.0.0-beta.3',
@@ -1134,11 +1069,11 @@ describe('Shared: s3Packages', function() {
]));
});
- afterEach(function() {
+ afterEach(function () {
this.getRemoteVersionsStub.restore();
});
- it('should be able to resolve the latest v2 pre-release version with a non pre-release semver range', function(done) {
+ it('should be able to resolve the latest v2 pre-release version with a non pre-release semver range', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION, {
range: '>=2.0.0',
includeUnstableChannel: true
@@ -1148,7 +1083,7 @@ describe('Shared: s3Packages', function() {
}).catch(done);
});
- it('should resolve undefined if includeUnstableChannel is false', function(done) {
+ it('should resolve undefined if includeUnstableChannel is false', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.PRODUCTION, {
includeUnstableChannel: false
}).then((latestVersion) => {
@@ -1156,12 +1091,10 @@ describe('Shared: s3Packages', function() {
done();
}).catch(done);
});
-
});
- describe('given pre-release snapshot remote versions', function() {
-
- beforeEach(function() {
+ describe('given pre-release snapshot remote versions', function () {
+ beforeEach(function () {
this.getRemoteVersionsStub = m.sinon.stub(s3Packages, 'getRemoteVersions');
this.getRemoteVersionsStub.returns(Bluebird.resolve([
'2.0.0-beta.3+5370ef2',
@@ -1175,11 +1108,11 @@ describe('Shared: s3Packages', function() {
]));
});
- afterEach(function() {
+ afterEach(function () {
this.getRemoteVersionsStub.restore();
});
- it('should be able to resolve the latest v2 pre-release version with a non pre-release semver range', function(done) {
+ it('should be able to resolve the latest v2 pre-release version with a non pre-release semver range', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.SNAPSHOT, {
range: '>=2.0.0',
includeUnstableChannel: true
@@ -1189,7 +1122,7 @@ describe('Shared: s3Packages', function() {
}).catch(done);
});
- it('should resolve undefined if includeUnstableChannel is false', function(done) {
+ it('should resolve undefined if includeUnstableChannel is false', function (done) {
s3Packages.getLatestVersion(release.RELEASE_TYPE.SNAPSHOT, {
includeUnstableChannel: false
}).then((latestVersion) => {
@@ -1197,9 +1130,6 @@ describe('Shared: s3Packages', function() {
done();
}).catch(done);
});
-
});
-
});
-
});
diff --git a/tests/shared/supported-formats.spec.js b/tests/shared/supported-formats.spec.js
index 5b7a51e2..5f91e06f 100644
--- a/tests/shared/supported-formats.spec.js
+++ b/tests/shared/supported-formats.spec.js
@@ -20,38 +20,30 @@ const m = require('mochainon');
const _ = require('lodash');
const supportedFormats = require('../../lib/shared/supported-formats');
-describe('Shared: SupportedFormats', function() {
-
- describe('.getCompressedExtensions()', function() {
-
- it('should return the supported compressed extensions', function() {
+describe('Shared: SupportedFormats', function () {
+ describe('.getCompressedExtensions()', function () {
+ it('should return the supported compressed extensions', function () {
const extensions = supportedFormats.getCompressedExtensions();
m.chai.expect(extensions).to.deep.equal([ 'gz', 'bz2', 'xz' ]);
});
-
});
- describe('.getNonCompressedExtensions()', function() {
-
- it('should return the supported non compressed extensions', function() {
+ describe('.getNonCompressedExtensions()', function () {
+ it('should return the supported non compressed extensions', function () {
const extensions = supportedFormats.getNonCompressedExtensions();
m.chai.expect(extensions).to.deep.equal([ 'img', 'iso', 'dsk', 'hddimg', 'raw', 'dmg', 'sdcard', 'rpi-sdimg' ]);
});
-
});
- describe('.getArchiveExtensions()', function() {
-
- it('should return the supported archive extensions', function() {
+ describe('.getArchiveExtensions()', function () {
+ it('should return the supported archive extensions', function () {
const extensions = supportedFormats.getArchiveExtensions();
m.chai.expect(extensions).to.deep.equal([ 'zip', 'etch' ]);
});
-
});
- describe('.getAllExtensions()', function() {
-
- it('should return the union of all compressed, uncompressed, and archive extensions', function() {
+ describe('.getAllExtensions()', function () {
+ it('should return the union of all compressed, uncompressed, and archive extensions', function () {
const archiveExtensions = supportedFormats.getArchiveExtensions();
const compressedExtensions = supportedFormats.getCompressedExtensions();
const nonCompressedExtensions = supportedFormats.getNonCompressedExtensions();
@@ -59,11 +51,9 @@ describe('Shared: SupportedFormats', function() {
const extensions = supportedFormats.getAllExtensions();
m.chai.expect(extensions).to.deep.equal(expected);
});
-
});
- describe('.isSupportedImage()', function() {
-
+ describe('.isSupportedImage()', function () {
_.forEach([
// Type: 'archive'
@@ -85,58 +75,58 @@ describe('Shared: SupportedFormats', function() {
'path/to/filename.sdcard'
], (filename) => {
- it(`should return true for ${filename}`, function() {
+ it(`should return true for ${filename}`, function () {
const isSupported = supportedFormats.isSupportedImage(filename);
m.chai.expect(isSupported).to.be.true;
});
});
- it('should return false if the file has no extension', function() {
+ it('should return false if the file has no extension', function () {
const isSupported = supportedFormats.isSupportedImage('/path/to/foo');
m.chai.expect(isSupported).to.be.false;
});
- it('should return false if the extension is not included in .getAllExtensions()', function() {
+ it('should return false if the extension is not included in .getAllExtensions()', function () {
const isSupported = supportedFormats.isSupportedImage('/path/to/foo.jpg');
m.chai.expect(isSupported).to.be.false;
});
- it('should return true if the extension is included in .getAllExtensions()', function() {
+ it('should return true if the extension is included in .getAllExtensions()', function () {
const nonCompressedExtension = _.first(supportedFormats.getNonCompressedExtensions());
const imagePath = `/path/to/foo.${nonCompressedExtension}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.true;
});
- it('should ignore casing when determining extension validity', function() {
+ it('should ignore casing when determining extension validity', function () {
const nonCompressedExtension = _.first(supportedFormats.getNonCompressedExtensions());
const imagePath = `/path/to/foo.${_.toUpper(nonCompressedExtension)}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.true;
});
- it('should not consider an extension before a non compressed extension', function() {
+ it('should not consider an extension before a non compressed extension', function () {
const nonCompressedExtension = _.first(supportedFormats.getNonCompressedExtensions());
const imagePath = `/path/to/foo.1234.${nonCompressedExtension}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.true;
});
- it('should return true if the extension is supported and the file name includes dots', function() {
+ it('should return true if the extension is supported and the file name includes dots', function () {
const nonCompressedExtension = _.first(supportedFormats.getNonCompressedExtensions());
const imagePath = `/path/to/foo.1.2.3-bar.${nonCompressedExtension}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.true;
});
- it('should return true if the extension is only a supported archive extension', function() {
+ it('should return true if the extension is only a supported archive extension', function () {
const archiveExtension = _.first(supportedFormats.getArchiveExtensions());
const imagePath = `/path/to/foo.${archiveExtension}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.true;
});
- it('should return true if the extension is a supported one plus a supported compressed extensions', function() {
+ it('should return true if the extension is a supported one plus a supported compressed extensions', function () {
const nonCompressedExtension = _.first(supportedFormats.getNonCompressedExtensions());
const compressedExtension = _.first(supportedFormats.getCompressedExtensions());
const imagePath = `/path/to/foo.${nonCompressedExtension}.${compressedExtension}`;
@@ -144,59 +134,59 @@ describe('Shared: SupportedFormats', function() {
m.chai.expect(isSupported).to.be.true;
});
- it('should return false if the extension is an unsupported one plus a supported compressed extensions', function() {
+ it('should return false if the extension is an unsupported one plus a supported compressed extensions', function () {
const compressedExtension = _.first(supportedFormats.getCompressedExtensions());
const imagePath = `/path/to/foo.jpg.${compressedExtension}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.false;
});
- it('should return false if the file has no extension', function() {
+ it('should return false if the file has no extension', function () {
const isSupported = supportedFormats.isSupportedImage('/path/to/foo');
m.chai.expect(isSupported).to.be.false;
});
- it('should return false if the extension is not included in .getAllExtensions()', function() {
+ it('should return false if the extension is not included in .getAllExtensions()', function () {
const isSupported = supportedFormats.isSupportedImage('/path/to/foo.jpg');
m.chai.expect(isSupported).to.be.false;
});
- it('should return true if the extension is included in .getAllExtensions()', function() {
+ it('should return true if the extension is included in .getAllExtensions()', function () {
const nonCompressedExtension = _.first(supportedFormats.getNonCompressedExtensions());
const imagePath = `/path/to/foo.${nonCompressedExtension}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.true;
});
- it('should ignore casing when determining extension validity', function() {
+ it('should ignore casing when determining extension validity', function () {
const nonCompressedExtension = _.first(supportedFormats.getNonCompressedExtensions());
const imagePath = `/path/to/foo.${_.toUpper(nonCompressedExtension)}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.true;
});
- it('should not consider an extension before a non compressed extension', function() {
+ it('should not consider an extension before a non compressed extension', function () {
const nonCompressedExtension = _.first(supportedFormats.getNonCompressedExtensions());
const imagePath = `/path/to/foo.1234.${nonCompressedExtension}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.true;
});
- it('should return true if the extension is supported and the file name includes dots', function() {
+ it('should return true if the extension is supported and the file name includes dots', function () {
const nonCompressedExtension = _.first(supportedFormats.getNonCompressedExtensions());
const imagePath = `/path/to/foo.1.2.3-bar.${nonCompressedExtension}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.true;
});
- it('should return true if the extension is only a supported archive extension', function() {
+ it('should return true if the extension is only a supported archive extension', function () {
const archiveExtension = _.first(supportedFormats.getArchiveExtensions());
const imagePath = `/path/to/foo.${archiveExtension}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.true;
});
- it('should return true if the extension is a supported one plus a supported compressed extensions', function() {
+ it('should return true if the extension is a supported one plus a supported compressed extensions', function () {
const nonCompressedExtension = _.first(supportedFormats.getNonCompressedExtensions());
const compressedExtension = _.first(supportedFormats.getCompressedExtensions());
const imagePath = `/path/to/foo.${nonCompressedExtension}.${compressedExtension}`;
@@ -204,43 +194,35 @@ describe('Shared: SupportedFormats', function() {
m.chai.expect(isSupported).to.be.true;
});
- it('should return false if the extension is an unsupported one plus a supported compressed extensions', function() {
+ it('should return false if the extension is an unsupported one plus a supported compressed extensions', function () {
const compressedExtension = _.first(supportedFormats.getCompressedExtensions());
const imagePath = `/path/to/foo.jpg.${compressedExtension}`;
const isSupported = supportedFormats.isSupportedImage(imagePath);
m.chai.expect(isSupported).to.be.false;
});
-
});
- describe('.looksLikeWindowsImage()', function() {
-
+ describe('.looksLikeWindowsImage()', function () {
_.each([
'C:\\path\\to\\en_windows_10_multiple_editions_version_1607_updated_jan_2017_x64_dvd_9714399.iso',
'/path/to/en_windows_10_multiple_editions_version_1607_updated_jan_2017_x64_dvd_9714399.iso',
'/path/to/Win10_1607_SingleLang_English_x32.iso',
'/path/to/en_winxp_pro_x86_build2600_iso.img'
], (imagePath) => {
-
- it(`should return true if filename is ${imagePath}`, function() {
+ it(`should return true if filename is ${imagePath}`, function () {
const looksLikeWindowsImage = supportedFormats.looksLikeWindowsImage(imagePath);
m.chai.expect(looksLikeWindowsImage).to.be.true;
});
-
});
_.each([
'C:\\path\\to\\2017-01-11-raspbian-jessie.img',
'/path/to/2017-01-11-raspbian-jessie.img'
], (imagePath) => {
-
- it(`should return false if filename is ${imagePath}`, function() {
+ it(`should return false if filename is ${imagePath}`, function () {
const looksLikeWindowsImage = supportedFormats.looksLikeWindowsImage(imagePath);
m.chai.expect(looksLikeWindowsImage).to.be.false;
});
-
});
-
});
-
});
diff --git a/tests/shared/units.spec.js b/tests/shared/units.spec.js
index 7d71ed0f..7a8c5c46 100644
--- a/tests/shared/units.spec.js
+++ b/tests/shared/units.spec.js
@@ -19,49 +19,43 @@
const m = require('mochainon');
const units = require('../../lib/shared/units');
-describe('Shared: Units', function() {
-
- describe('.bytesToClosestUnit()', function() {
-
- it('should convert bytes to terabytes', function() {
+describe('Shared: Units', function () {
+ describe('.bytesToClosestUnit()', function () {
+ it('should convert bytes to terabytes', function () {
m.chai.expect(units.bytesToClosestUnit(1000000000000)).to.equal('1 TB');
m.chai.expect(units.bytesToClosestUnit(2987801405440)).to.equal('2.99 TB');
m.chai.expect(units.bytesToClosestUnit(999900000000000)).to.equal('999.9 TB');
});
- it('should convert bytes to gigabytes', function() {
+ it('should convert bytes to gigabytes', function () {
m.chai.expect(units.bytesToClosestUnit(1000000000)).to.equal('1 GB');
m.chai.expect(units.bytesToClosestUnit(7801405440)).to.equal('7.8 GB');
m.chai.expect(units.bytesToClosestUnit(999900000000)).to.equal('999.9 GB');
});
- it('should convert bytes to megabytes', function() {
+ it('should convert bytes to megabytes', function () {
m.chai.expect(units.bytesToClosestUnit(1000000)).to.equal('1 MB');
m.chai.expect(units.bytesToClosestUnit(801405440)).to.equal('801.41 MB');
m.chai.expect(units.bytesToClosestUnit(999900000)).to.equal('999.9 MB');
});
- it('should convert bytes to kilobytes', function() {
+ it('should convert bytes to kilobytes', function () {
m.chai.expect(units.bytesToClosestUnit(1000)).to.equal('1 kB');
m.chai.expect(units.bytesToClosestUnit(5440)).to.equal('5.44 kB');
m.chai.expect(units.bytesToClosestUnit(999900)).to.equal('999.9 kB');
});
- it('should keep bytes as bytes', function() {
+ it('should keep bytes as bytes', function () {
m.chai.expect(units.bytesToClosestUnit(1)).to.equal('1 B');
m.chai.expect(units.bytesToClosestUnit(8)).to.equal('8 B');
m.chai.expect(units.bytesToClosestUnit(999)).to.equal('999 B');
});
-
});
- describe('.bytesToMegabytes()', function() {
-
- it('should convert bytes to megabytes', function() {
+ describe('.bytesToMegabytes()', function () {
+ it('should convert bytes to megabytes', function () {
m.chai.expect(units.bytesToMegabytes(1.2e+7)).to.equal(12);
m.chai.expect(units.bytesToMegabytes(332000)).to.equal(0.332);
});
-
});
-
});
diff --git a/tests/shared/utils.spec.js b/tests/shared/utils.spec.js
index fd604ec3..4d17d1e4 100644
--- a/tests/shared/utils.spec.js
+++ b/tests/shared/utils.spec.js
@@ -19,116 +19,110 @@
const m = require('mochainon');
const utils = require('../../lib/shared/utils');
-describe('Shared: Utils', function() {
-
- describe('.isValidPercentage()', function() {
-
- it('should return false if percentage is not a number', function() {
+describe('Shared: Utils', function () {
+ describe('.isValidPercentage()', function () {
+ it('should return false if percentage is not a number', function () {
m.chai.expect(utils.isValidPercentage('50')).to.be.false;
});
- it('should return false if percentage is null', function() {
+ it('should return false if percentage is null', function () {
m.chai.expect(utils.isValidPercentage(null)).to.be.false;
});
- it('should return false if percentage is undefined', function() {
+ it('should return false if percentage is undefined', function () {
m.chai.expect(utils.isValidPercentage(undefined)).to.be.false;
});
- it('should return false if percentage is an integer less than 0', function() {
+ it('should return false if percentage is an integer less than 0', function () {
m.chai.expect(utils.isValidPercentage(-1)).to.be.false;
});
- it('should return false if percentage is a float less than 0', function() {
+ it('should return false if percentage is a float less than 0', function () {
m.chai.expect(utils.isValidPercentage(-0.1)).to.be.false;
});
- it('should return true if percentage is 0', function() {
+ it('should return true if percentage is 0', function () {
m.chai.expect(utils.isValidPercentage(0)).to.be.true;
});
- it('should return true if percentage is an integer greater than 0, but less than 100', function() {
+ it('should return true if percentage is an integer greater than 0, but less than 100', function () {
m.chai.expect(utils.isValidPercentage(50)).to.be.true;
});
- it('should return true if percentage is a float greater than 0, but less than 100', function() {
+ it('should return true if percentage is a float greater than 0, but less than 100', function () {
m.chai.expect(utils.isValidPercentage(49.55)).to.be.true;
});
- it('should return true if percentage is 100', function() {
+ it('should return true if percentage is 100', function () {
m.chai.expect(utils.isValidPercentage(100)).to.be.true;
});
- it('should return false if percentage is an integer greater than 100', function() {
+ it('should return false if percentage is an integer greater than 100', function () {
m.chai.expect(utils.isValidPercentage(101)).to.be.false;
});
- it('should return false if percentage is a float greater than 100', function() {
+ it('should return false if percentage is a float greater than 100', function () {
m.chai.expect(utils.isValidPercentage(100.001)).to.be.false;
});
-
});
- describe('.percentageToFloat()', function() {
-
- it('should throw an error if given a string percentage', function() {
- m.chai.expect(function() {
+ describe('.percentageToFloat()', function () {
+ it('should throw an error if given a string percentage', function () {
+ m.chai.expect(function () {
utils.percentageToFloat('50');
}).to.throw('Invalid percentage: 50');
});
- it('should throw an error if given a null percentage', function() {
- m.chai.expect(function() {
+ it('should throw an error if given a null percentage', function () {
+ m.chai.expect(function () {
utils.percentageToFloat(null);
}).to.throw('Invalid percentage: null');
});
- it('should throw an error if given an undefined percentage', function() {
- m.chai.expect(function() {
+ it('should throw an error if given an undefined percentage', function () {
+ m.chai.expect(function () {
utils.percentageToFloat(undefined);
}).to.throw('Invalid percentage: undefined');
});
- it('should throw an error if given an integer percentage < 0', function() {
- m.chai.expect(function() {
+ it('should throw an error if given an integer percentage < 0', function () {
+ m.chai.expect(function () {
utils.percentageToFloat(-1);
}).to.throw('Invalid percentage: -1');
});
- it('should throw an error if given a float percentage < 0', function() {
- m.chai.expect(function() {
+ it('should throw an error if given a float percentage < 0', function () {
+ m.chai.expect(function () {
utils.percentageToFloat(-0.1);
}).to.throw('Invalid percentage: -0.1');
});
- it('should covert a 0 percentage to 0', function() {
+ it('should covert a 0 percentage to 0', function () {
m.chai.expect(utils.percentageToFloat(0)).to.equal(0);
});
- it('should covert an integer percentage to a float', function() {
+ it('should covert an integer percentage to a float', function () {
m.chai.expect(utils.percentageToFloat(50)).to.equal(0.5);
});
- it('should covert an float percentage to a float', function() {
+ it('should covert an float percentage to a float', function () {
m.chai.expect(utils.percentageToFloat(46.54)).to.equal(0.4654);
});
- it('should covert a 100 percentage to 1', function() {
+ it('should covert a 100 percentage to 1', function () {
m.chai.expect(utils.percentageToFloat(100)).to.equal(1);
});
- it('should throw an error if given an integer percentage > 100', function() {
- m.chai.expect(function() {
+ it('should throw an error if given an integer percentage > 100', function () {
+ m.chai.expect(function () {
utils.percentageToFloat(101);
}).to.throw('Invalid percentage: 101');
});
- it('should throw an error if given a float percentage > 100', function() {
- m.chai.expect(function() {
+ it('should throw an error if given a float percentage > 100', function () {
+ m.chai.expect(function () {
utils.percentageToFloat(100.01);
}).to.throw('Invalid percentage: 100.01');
});
-
});
-
});