Skip to content

Commit

Permalink
typescript: activityDetection unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
Victor R. Braga de Sales Mascarenhasm committed Feb 1, 2019
1 parent efe914d commit 2146c7e
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 1 deletion.
14 changes: 13 additions & 1 deletion spec/__mocks__/electron.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@ import { EventEmitter } from 'events';
import * as path from 'path';
const ipcEmitter = new EventEmitter();

const mockIdleTime: number = 15;
const appName: string = 'Symphony';
const executableName = '/Symphony.exe';
const executableName: string = '/Symphony.exe';
const isReady: boolean = true;
interface IApp {
getAppPath(): string;
getPath(type: string): string;
getName(): string;
isReady(): boolean;
}
interface IIpcMain {
on(event: any, cb: any): void;
Expand All @@ -19,6 +22,9 @@ interface IIpcRenderer {
send(event: any, cb: any): void;
removeListener(eventName: any, cb: any): void;
}
interface IPowerMonitor {
querySystemIdleTime(): void;
}

// use config provided by test framework
const pathToConfigDir = (): string => {
Expand All @@ -35,6 +41,7 @@ const app: IApp = {
return pathToConfigDir();
},
getName: () => appName,
isReady: () => isReady,
};

// simple ipc mocks for render and main process ipc using
Expand All @@ -55,6 +62,10 @@ const ipcMain: IIpcMain = {
},
};

const powerMonitor: IPowerMonitor = {
querySystemIdleTime: jest.fn().mockImplementation((cb) => cb(mockIdleTime)),
};

const ipcRenderer: IIpcRenderer = {
sendSync: (event, args) => {
const listeners = ipcEmitter.listeners(event);
Expand Down Expand Up @@ -88,6 +99,7 @@ export = {
app,
ipcMain,
ipcRenderer,
powerMonitor,
require: jest.fn(),
match: jest.fn(),
remote: jest.fn(),
Expand Down
63 changes: 63 additions & 0 deletions spec/activityDetection.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
describe('activity detection', () => {
const originalTimeout: number = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000;
let activityDetectionInstance;

beforeEach(() => {
jest.resetModules();
jest.useFakeTimers();
// I did it for reset module imported between tests
const { activityDetection } = require('../src/app/activity-detection');
activityDetectionInstance = activityDetection;
});

afterAll((done) => {
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
done();
});

it('should call `setWindowAndThreshold` correctly', () => {
// mocking startActivityMonitor
const spy: jest.SpyInstance = jest.spyOn(activityDetectionInstance, 'setWindowAndThreshold');
const idleThresholdMock: number = 1000;

jest.spyOn(activityDetectionInstance, 'startActivityMonitor')
.mockImplementation(() => jest.fn());

activityDetectionInstance.setWindowAndThreshold({}, idleThresholdMock);

expect(spy).toBeCalledWith({}, 1000);
});

it('should start activity monitor when `setWindowAndThreshold` is called', () => {
const idleThresholdMock: number = 1000;
const spy: jest.SpyInstance = jest.spyOn(activityDetectionInstance, 'startActivityMonitor')
.mockImplementation(() => jest.fn());

activityDetectionInstance.setWindowAndThreshold({}, idleThresholdMock);

expect(spy).toBeCalled();
});

it('should call `activity` when `startActivityMonitor` is called', () => {
const spy: jest.SpyInstance = jest.spyOn(activityDetectionInstance, 'activity');

activityDetectionInstance.startActivityMonitor();

jest.runOnlyPendingTimers();

expect(spy).toBeCalled();
});

it('should call `sendActivity` when period was greater than idleTime', () => {
// period is this.idleThreshold = 60 * 60 * 1000;
const mockIdleTime: number = 50;
const spy: jest.SpyInstance = jest.spyOn(activityDetectionInstance, 'sendActivity');
const mockIdleTimeinMillis: number = mockIdleTime * 1000;

activityDetectionInstance.activity(mockIdleTime);

expect(spy).toBeCalledWith(mockIdleTimeinMillis);
});

});

0 comments on commit 2146c7e

Please sign in to comment.