mirror of
https://github.com/finos/SymphonyElectron.git
synced 2024-12-27 17:31:36 -06:00
typescript: activityDetection unit test (#560)
This commit is contained in:
parent
a0a3d77ca0
commit
7de0f1f529
@ -2,12 +2,15 @@ import { EventEmitter } from 'events';
|
|||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
const ipcEmitter = new EventEmitter();
|
const ipcEmitter = new EventEmitter();
|
||||||
|
|
||||||
|
const mockIdleTime: number = 15;
|
||||||
const appName: string = 'Symphony';
|
const appName: string = 'Symphony';
|
||||||
const executableName = '/Symphony.exe';
|
const executableName: string = '/Symphony.exe';
|
||||||
|
const isReady: boolean = true;
|
||||||
interface IApp {
|
interface IApp {
|
||||||
getAppPath(): string;
|
getAppPath(): string;
|
||||||
getPath(type: string): string;
|
getPath(type: string): string;
|
||||||
getName(): string;
|
getName(): string;
|
||||||
|
isReady(): boolean;
|
||||||
}
|
}
|
||||||
interface IIpcMain {
|
interface IIpcMain {
|
||||||
on(event: any, cb: any): void;
|
on(event: any, cb: any): void;
|
||||||
@ -19,6 +22,9 @@ interface IIpcRenderer {
|
|||||||
send(event: any, cb: any): void;
|
send(event: any, cb: any): void;
|
||||||
removeListener(eventName: any, cb: any): void;
|
removeListener(eventName: any, cb: any): void;
|
||||||
}
|
}
|
||||||
|
interface IPowerMonitor {
|
||||||
|
querySystemIdleTime(): void;
|
||||||
|
}
|
||||||
|
|
||||||
// use config provided by test framework
|
// use config provided by test framework
|
||||||
const pathToConfigDir = (): string => {
|
const pathToConfigDir = (): string => {
|
||||||
@ -35,6 +41,7 @@ const app: IApp = {
|
|||||||
return pathToConfigDir();
|
return pathToConfigDir();
|
||||||
},
|
},
|
||||||
getName: () => appName,
|
getName: () => appName,
|
||||||
|
isReady: () => isReady,
|
||||||
};
|
};
|
||||||
|
|
||||||
// simple ipc mocks for render and main process ipc using
|
// simple ipc mocks for render and main process ipc using
|
||||||
@ -55,6 +62,10 @@ const ipcMain: IIpcMain = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const powerMonitor: IPowerMonitor = {
|
||||||
|
querySystemIdleTime: jest.fn().mockImplementation((cb) => cb(mockIdleTime)),
|
||||||
|
};
|
||||||
|
|
||||||
const ipcRenderer: IIpcRenderer = {
|
const ipcRenderer: IIpcRenderer = {
|
||||||
sendSync: (event, args) => {
|
sendSync: (event, args) => {
|
||||||
const listeners = ipcEmitter.listeners(event);
|
const listeners = ipcEmitter.listeners(event);
|
||||||
@ -88,6 +99,7 @@ export = {
|
|||||||
app,
|
app,
|
||||||
ipcMain,
|
ipcMain,
|
||||||
ipcRenderer,
|
ipcRenderer,
|
||||||
|
powerMonitor,
|
||||||
require: jest.fn(),
|
require: jest.fn(),
|
||||||
match: jest.fn(),
|
match: jest.fn(),
|
||||||
remote: jest.fn(),
|
remote: jest.fn(),
|
||||||
|
63
spec/activityDetection.spec.ts
Normal file
63
spec/activityDetection.spec.ts
Normal file
@ -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);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user