Files
switchmon/test/cli.tests.js
2016-03-14 13:16:54 +01:00

185 lines
5.9 KiB
JavaScript

'use strict';
const sinon = require('sinon');
const assert = require('assert');
const proxyquire = require('proxyquire');
describe('cli', () => {
let sandbox;
let consoleLogSpy;
beforeEach(() => {
sandbox = sinon.sandbox.create();
consoleLogSpy = sandbox.spy(console, 'log');
});
afterEach(() => {
sandbox.restore();
});
it('shows help', () => {
const minimistStub = sandbox.stub();
minimistStub.returns({h: true});
const cli = proxyquire('../cli.js', {
'minimist': minimistStub,
'./usage.js': '[usage]'
});
assert.equal(consoleLogSpy.callCount, 1);
assert.equal(consoleLogSpy.args[0][0], '[usage]');
});
describe('device list', () => {
let minimistStub, getDevicesStub;
beforeEach(() => {
minimistStub = sandbox.stub();
minimistStub.returns({l: true});
getDevicesStub = sandbox.stub();
proxyquire('../cli.js', {
'minimist': minimistStub,
'./swm.js': {
getDevices: getDevicesStub
}
});
});
it('lists devices', () => {
getDevicesStub.args[0][0](null, {
LVDS1: {connected: true},
HDMI2: {connected: false}
});
assert.equal(getDevicesStub.callCount, 1);
assert.equal(consoleLogSpy.callCount, 3);
assert.equal(consoleLogSpy.args[0][0], 'Detected devices:\n');
assert.equal(consoleLogSpy.args[1].join(' '), 'LVDS1: Connected');
assert.equal(consoleLogSpy.args[2].join(' '), 'HDMI2: Disconnected');
});
it('throws error when listing devices fails', () => {
assert.throws(() => {
getDevicesStub.args[0][0]('[some err]');
}, /some err/);
});
});
describe('switching', () => {
let minimistStub;
let deviceData;
let getDevicesStub;
let generateXrandrOptionsStub;
let switchDevicesStub;
let executePostCmdStub;
beforeEach(() => {
minimistStub = sandbox.stub();
minimistStub.returns({
_: ['LVDS1'],
postCmd: '[some post cmd]'
});
deviceData = {
LVDS1: {connected: true},
HDMI2: {connected: false}
};
getDevicesStub = sandbox.stub();
generateXrandrOptionsStub = sandbox.stub().returns('[some xrandr options]');
switchDevicesStub = sandbox.stub();
executePostCmdStub = sandbox.stub();
const cli = proxyquire('../cli.js', {
'minimist': minimistStub,
'./swm.js': {
getDevices: getDevicesStub,
generateXrandrOptions: generateXrandrOptionsStub,
switchDevices: switchDevicesStub,
executePostCmd: executePostCmdStub
},
'./config.js': {}
});
});
it('calls getDevices', () => {
getDevicesStub.args[0][0](null, deviceData);
assert.equal(getDevicesStub.callCount, 1, 'calls device stub');
});
it('throws error when getDevices fails', () => {
assert.throws(() => {
getDevicesStub.args[0][0]('[some err]');
}, /some err/);
});
it('calls generateXrandrOptions', () => {
getDevicesStub.args[0][0](null, deviceData);
assert.equal(generateXrandrOptionsStub.callCount, 1, 'calls generateXrandrOptions');
assert.deepEqual(generateXrandrOptionsStub.args[0][0], ['LVDS1']);
});
it('calls switchDevices', () => {
getDevicesStub.args[0][0](null, deviceData);
assert.equal(switchDevicesStub.callCount, 1);
assert.equal(switchDevicesStub.args[0][0], '[some xrandr options]');
});
it('calls executePostCmd', () => {
getDevicesStub.args[0][0](null, deviceData);
assert.equal(executePostCmdStub.callCount, 1);
assert.equal(executePostCmdStub.args[0][0], '[some post cmd]');
});
});
describe('switching with profiles', () => {
let minimistStub;
let deviceData;
let getDevicesStub;
let generateXrandrOptionsStub;
let switchDevicesStub;
let executePostCmdStub;
beforeEach(() => {
minimistStub = sandbox.stub();
minimistStub.returns({
_: ['LVDS1'],
postCmd: '[some post cmd]',
profile: 'profile1'
});
deviceData = {
LVDS1: {connected: true},
HDMI2: {connected: false}
};
getDevicesStub = sandbox.stub();
generateXrandrOptionsStub = sandbox.stub().returns('[some xrandr options]');
switchDevicesStub = sandbox.stub();
executePostCmdStub = sandbox.stub();
proxyquire('../cli.js', {
'minimist': minimistStub,
'./swm.js': {
getDevices: getDevicesStub,
generateXrandrOptions: generateXrandrOptionsStub,
switchDevices: switchDevicesStub,
executePostCmd: executePostCmdStub
},
'./config.js': {
profiles: {
profile1: ['HDMI1', 'HDMI2']
}
}
});
});
it('calls generateXrandrOptions with profile settings', () => {
getDevicesStub.args[0][0](null, deviceData);
assert.equal(generateXrandrOptionsStub.callCount, 1, 'calls generateXrandrOptions');
assert.deepEqual(generateXrandrOptionsStub.args[0][0], ['HDMI1', 'HDMI2']);
});
});
});