From f8d1317626cfc7e6e69fc78682f0237a8706cde4 Mon Sep 17 00:00:00 2001 From: Nicolas Bonamy Date: Thu, 16 May 2024 19:54:49 -0500 Subject: [PATCH] monitor test --- src/main/monitor.ts | 7 +++- tests/unit/monitor.test.ts | 75 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 tests/unit/monitor.test.ts diff --git a/src/main/monitor.ts b/src/main/monitor.ts index f4bc9c9..80f48a7 100644 --- a/src/main/monitor.ts +++ b/src/main/monitor.ts @@ -4,13 +4,15 @@ import fs from 'fs' export default class { + delay: number filepath: string filesize: number signal: string timer: NodeJS.Timeout - constructor(signal: string) { + constructor(signal: string, delay = 1000) { this.signal = signal + this.delay = delay } start(filepath: string): void { @@ -29,7 +31,7 @@ export default class { this.filesize = size this.notify() } - }, 1000) + }, this.delay) } stop(): void { @@ -43,6 +45,7 @@ export default class { try { return fs.statSync(this.filepath).size } catch (error) { + //console.error('Error while getting file size', error) return 0 } } diff --git a/tests/unit/monitor.test.ts b/tests/unit/monitor.test.ts new file mode 100644 index 0000000..7056bcb --- /dev/null +++ b/tests/unit/monitor.test.ts @@ -0,0 +1,75 @@ + +import { vi, expect, test, beforeEach, afterEach, beforeAll, afterAll } from 'vitest' +import { BrowserWindow } from 'electron' +import Monitor from '../../src/main/monitor' +import { wait } from '../../src/main/utils' +import path from 'path' +import fs from 'fs' +import os from 'os' + +vi.mock('electron', async () => { + const BrowserWindow = vi.fn() + BrowserWindow.prototype.isDestroyed = vi.fn(function() { return false }) + BrowserWindow.getAllWindows = vi.fn(() => [ new BrowserWindow(), new BrowserWindow(), new Monitor('test') ]) + BrowserWindow.prototype.webContents = { + send: vi.fn(), + } + return { + BrowserWindow, + } +}) + +let monitor: Monitor = null +const tempFile = path.join(os.tmpdir(), 'vitest') + +beforeAll(async () => { + fs.writeFileSync(tempFile, 'Hello') +}) + +afterAll(async () => { + try { + fs.unlinkSync(tempFile) + } catch (error) { + console.error(error) + } +}) + +beforeEach(async () => { + vi.clearAllMocks() +}) + +afterEach(async () => { + monitor.stop() +}) + +test('Start monitor', async () => { + monitor = new Monitor('test') + monitor.start(tempFile) + expect(monitor.size()).toBe(5) +}) + +test('Stop monitor', async () => { + monitor = new Monitor('test') + monitor.start(tempFile) + monitor.stop() + expect(monitor.size()).toBe(0) +}) + +test('Notify monitor', async () => { + monitor = new Monitor('test', 50) + monitor.start(tempFile) + fs.appendFileSync(tempFile, ' World') + await wait(150) + expect(BrowserWindow.getAllWindows).toHaveBeenCalledTimes(1) + expect(BrowserWindow.prototype.webContents.send).toHaveBeenCalledTimes(2) +}) + +test('Notify after stop', async () => { + monitor = new Monitor('test', 500) + monitor.start(tempFile) + monitor.stop() + fs.appendFileSync(tempFile, ' World') + await wait(150) + expect(BrowserWindow.getAllWindows).toHaveBeenCalledTimes(0) + expect(BrowserWindow.prototype.webContents.send).toHaveBeenCalledTimes(0) +})