Port Settings and OS to TypeScript

This commit is contained in:
Daniel Gasienica 2018-05-02 19:57:02 -04:00
parent 38b23c6627
commit a102016ed8
6 changed files with 36 additions and 23 deletions

15
ts/OS.ts Normal file
View file

@ -0,0 +1,15 @@
import is from '@sindresorhus/is';
import os from 'os';
import semver from 'semver';
export const isMacOS = () => process.platform === 'darwin';
export const isLinux = () => process.platform === 'linux';
export const isWindows = (minVersion?: string) => {
const isPlatformValid = process.platform === 'win32';
const osRelease = os.release();
const isVersionValid = is.undefined(minVersion)
? true
: semver.gte(osRelease, minVersion);
return isPlatformValid && isVersionValid;
};

View file

@ -0,0 +1,56 @@
import os from 'os';
import sinon from 'sinon';
import { assert } from 'chai';
import * as Settings from '../../../ts/types/Settings';
describe('Settings', () => {
const sandbox = sinon.createSandbox();
describe('isAudioNotificationSupported', () => {
context('on macOS', () => {
beforeEach(() => {
sandbox.stub(process, 'platform').value('darwin');
});
afterEach(() => {
sandbox.restore();
});
it('should return true', () => {
assert.isTrue(Settings.isAudioNotificationSupported());
});
});
context('on Windows', () => {
context('version 8+', () => {
beforeEach(() => {
sandbox.stub(process, 'platform').value('win32');
sandbox.stub(os, 'release').returns('8.0.0');
});
afterEach(() => {
sandbox.restore();
});
it('should return true', () => {
assert.isTrue(Settings.isAudioNotificationSupported());
});
});
});
context('on Linux', () => {
beforeEach(() => {
sandbox.stub(process, 'platform').value('linux');
});
afterEach(() => {
sandbox.restore();
});
it('should return false', () => {
assert.isFalse(Settings.isAudioNotificationSupported());
});
});
});
});

4
ts/types/Settings.ts Normal file
View file

@ -0,0 +1,4 @@
import * as OS from '../OS';
export const isAudioNotificationSupported = () =>
OS.isWindows() || OS.isMacOS();