aboutsummaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-05-03 19:47:39 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-05-16 00:55:02 +0200
commitd2aa484b600dc0d122bb994b9bb29504ffe4cf12 (patch)
tree1d3e38fdb22f7afe02f1ebcf4b07734761970985 /packages
parentrefactor: config file saving and debugging (diff)
downloadsophie-d2aa484b600dc0d122bb994b9bb29504ffe4cf12.tar.gz
sophie-d2aa484b600dc0d122bb994b9bb29504ffe4cf12.tar.zst
sophie-d2aa484b600dc0d122bb994b9bb29504ffe4cf12.zip
build: integration testing support
Run integration tests in an electron environment for the main process. Signed-off-by: Kristóf Marussy <kristof@marussy.com>
Diffstat (limited to 'packages')
-rw-r--r--packages/main/jest.integ.config.cjs20
-rw-r--r--packages/main/package.json10
-rw-r--r--packages/main/src/i18n/I18nStore.ts2
-rw-r--r--packages/main/src/i18n/RepositoryBasedI18nBackend.ts2
-rw-r--r--packages/main/src/i18n/i18nLog.ts2
-rw-r--r--packages/main/src/i18n/impl/LocaltizationFiles.ts2
-rw-r--r--packages/main/src/i18n/loadLocalization.ts2
-rw-r--r--packages/main/src/index.ts8
-rw-r--r--packages/main/src/infrastructure/config/impl/ConfigFile.ts2
-rw-r--r--packages/main/src/infrastructure/electron/RendererBridge.ts2
-rw-r--r--packages/main/src/infrastructure/electron/impl/ElectronMainWindow.ts2
-rw-r--r--packages/main/src/infrastructure/electron/impl/ElectronServiceView.ts2
-rw-r--r--packages/main/src/infrastructure/electron/impl/__tests__/electron.integ.spec.ts9
-rw-r--r--packages/main/src/infrastructure/electron/impl/__tests__/hardenSession.spec.ts5
-rw-r--r--packages/main/src/infrastructure/electron/impl/__tests__/lockWebContentsToFile.spec.ts7
-rw-r--r--packages/main/src/infrastructure/electron/impl/devTools.ts13
-rw-r--r--packages/main/src/infrastructure/electron/impl/hardenSession.ts2
-rw-r--r--packages/main/src/infrastructure/electron/impl/lockWebContentsToFile.ts2
-rw-r--r--packages/main/src/reactions/__tests__/synchronizeConfig.spec.ts8
-rw-r--r--packages/main/src/reactions/loadServices.ts2
-rw-r--r--packages/main/src/reactions/synchronizeConfig.ts2
-rw-r--r--packages/main/src/reactions/synchronizeNativeTheme.ts2
-rw-r--r--packages/main/src/stores/GlobalSettings.ts2
-rw-r--r--packages/main/src/stores/MainStore.ts2
-rw-r--r--packages/main/src/stores/Service.ts2
-rw-r--r--packages/main/src/stores/SharedStore.ts2
-rw-r--r--packages/main/src/utils/getLogger.ts (renamed from packages/main/src/utils/log.ts)24
-rw-r--r--packages/main/tsconfig.json3
-rw-r--r--packages/preload/package.json10
-rw-r--r--packages/renderer/package.json13
-rw-r--r--packages/service-preload/package.json2
-rw-r--r--packages/test-utils/package.json6
32 files changed, 88 insertions, 86 deletions
diff --git a/packages/main/jest.integ.config.cjs b/packages/main/jest.integ.config.cjs
new file mode 100644
index 0000000..474d722
--- /dev/null
+++ b/packages/main/jest.integ.config.cjs
@@ -0,0 +1,20 @@
1const path = require('node:path');
2
3const baseConfig = require('../../config/jest.config.base.cjs');
4
5/** @type {import('@jest/types').Config.InitialOptions} */
6module.exports = {
7 ...baseConfig,
8 globalSetup: path.join(__dirname, '../../config/electronJestGlobalSetup.cjs'),
9 globalTeardown: path.join(
10 __dirname,
11 '../../config/electronJestGlobalTeardown.cjs',
12 ),
13 testEnvironment: path.join(
14 __dirname,
15 '../../config/electronJestEnvironment.cjs',
16 ),
17 setupFilesAfterEnv: [
18 path.join(__dirname, '../../config/electronJestSetup.cjs'),
19 ],
20};
diff --git a/packages/main/package.json b/packages/main/package.json
index fc972ba..ab8155c 100644
--- a/packages/main/package.json
+++ b/packages/main/package.json
@@ -11,7 +11,7 @@
11 "@sophie/service-shared": "workspace:*", 11 "@sophie/service-shared": "workspace:*",
12 "@sophie/shared": "workspace:*", 12 "@sophie/shared": "workspace:*",
13 "chalk": "^5.0.1", 13 "chalk": "^5.0.1",
14 "electron": "^19.0.0-alpha.1", 14 "electron": "^19.0.0-beta.3",
15 "i18next": "^21.6.16", 15 "i18next": "^21.6.16",
16 "lodash-es": "^4.17.21", 16 "lodash-es": "^4.17.21",
17 "loglevel": "^1.8.0", 17 "loglevel": "^1.8.0",
@@ -22,19 +22,19 @@
22 "slug": "^5.3.0" 22 "slug": "^5.3.0"
23 }, 23 },
24 "devDependencies": { 24 "devDependencies": {
25 "@jest/globals": "^27.5.1", 25 "@jest/globals": "^28.0.3",
26 "@sophie/test-utils": "workspace:*", 26 "@sophie/test-utils": "workspace:*",
27 "@types/electron-devtools-installer": "^2.2.2", 27 "@types/electron-devtools-installer": "^2.2.2",
28 "@types/lodash-es": "^4.17.6", 28 "@types/lodash-es": "^4.17.6",
29 "@types/mkdirp": "^1", 29 "@types/mkdirp": "^1",
30 "@types/node": "^17.0.25", 30 "@types/node": "^17.0.31",
31 "@types/slug": "^5.0.3", 31 "@types/slug": "^5.0.3",
32 "@types/source-map-support": "^0.5.4", 32 "@types/source-map-support": "^0.5.4",
33 "electron-devtools-installer": "^3.2.0", 33 "electron-devtools-installer": "^3.2.0",
34 "esbuild": "^0.14.38", 34 "esbuild": "^0.14.38",
35 "git-repo-info": "^2.1.1", 35 "git-repo-info": "^2.1.1",
36 "jest": "^27.5.1", 36 "jest": "^28.0.3",
37 "jest-mock": "^27.5.1", 37 "jest-mock": "^28.0.2",
38 "mkdirp": "^1.0.4", 38 "mkdirp": "^1.0.4",
39 "source-map-support": "^0.5.21" 39 "source-map-support": "^0.5.21"
40 } 40 }
diff --git a/packages/main/src/i18n/I18nStore.ts b/packages/main/src/i18n/I18nStore.ts
index 54c3d20..8ea4430 100644
--- a/packages/main/src/i18n/I18nStore.ts
+++ b/packages/main/src/i18n/I18nStore.ts
@@ -21,7 +21,7 @@
21import type { i18n, ResourceKey, TFunction } from 'i18next'; 21import type { i18n, ResourceKey, TFunction } from 'i18next';
22import { IAtom, createAtom } from 'mobx'; 22import { IAtom, createAtom } from 'mobx';
23 23
24import { getLogger } from '../utils/log'; 24import getLogger from '../utils/getLogger';
25 25
26const log = getLogger('I18nStore'); 26const log = getLogger('I18nStore');
27 27
diff --git a/packages/main/src/i18n/RepositoryBasedI18nBackend.ts b/packages/main/src/i18n/RepositoryBasedI18nBackend.ts
index 1f7bf5d..23f70d7 100644
--- a/packages/main/src/i18n/RepositoryBasedI18nBackend.ts
+++ b/packages/main/src/i18n/RepositoryBasedI18nBackend.ts
@@ -26,7 +26,7 @@ import type {
26} from 'i18next'; 26} from 'i18next';
27import { debounce } from 'lodash-es'; 27import { debounce } from 'lodash-es';
28 28
29import { getLogger } from '../utils/log'; 29import getLogger from '../utils/getLogger';
30 30
31import type LocatlizationRepository from './LocalizationRepository'; 31import type LocatlizationRepository from './LocalizationRepository';
32 32
diff --git a/packages/main/src/i18n/i18nLog.ts b/packages/main/src/i18n/i18nLog.ts
index 33a8c4e..308a1cc 100644
--- a/packages/main/src/i18n/i18nLog.ts
+++ b/packages/main/src/i18n/i18nLog.ts
@@ -20,7 +20,7 @@
20 20
21import type { LoggerModule } from 'i18next'; 21import type { LoggerModule } from 'i18next';
22 22
23import { getLogger } from '../utils/log'; 23import getLogger from '../utils/getLogger';
24 24
25const log = getLogger('i18nLog'); 25const log = getLogger('i18nLog');
26 26
diff --git a/packages/main/src/i18n/impl/LocaltizationFiles.ts b/packages/main/src/i18n/impl/LocaltizationFiles.ts
index 73a769e..9cd854e 100644
--- a/packages/main/src/i18n/impl/LocaltizationFiles.ts
+++ b/packages/main/src/i18n/impl/LocaltizationFiles.ts
@@ -23,8 +23,8 @@ import { readFile, writeFile } from 'node:fs/promises';
23import type { ResourceKey } from 'i18next'; 23import type { ResourceKey } from 'i18next';
24 24
25import type Resources from '../../infrastructure/resources/Resources'; 25import type Resources from '../../infrastructure/resources/Resources';
26import getLogger from '../../utils/getLogger';
26import isErrno from '../../utils/isErrno'; 27import isErrno from '../../utils/isErrno';
27import { getLogger } from '../../utils/log';
28import type LocatlizationRepository from '../LocalizationRepository'; 28import type LocatlizationRepository from '../LocalizationRepository';
29 29
30const log = getLogger('LocalizationFiles'); 30const log = getLogger('LocalizationFiles');
diff --git a/packages/main/src/i18n/loadLocalization.ts b/packages/main/src/i18n/loadLocalization.ts
index 507075d..e62b3e3 100644
--- a/packages/main/src/i18n/loadLocalization.ts
+++ b/packages/main/src/i18n/loadLocalization.ts
@@ -24,7 +24,7 @@ import { reaction } from 'mobx';
24import { addDisposer } from 'mobx-state-tree'; 24import { addDisposer } from 'mobx-state-tree';
25 25
26import type MainStore from '../stores/MainStore'; 26import type MainStore from '../stores/MainStore';
27import { getLogger } from '../utils/log'; 27import getLogger from '../utils/getLogger';
28 28
29import I18nStore from './I18nStore'; 29import I18nStore from './I18nStore';
30import type LocatlizationRepository from './LocalizationRepository'; 30import type LocatlizationRepository from './LocalizationRepository';
diff --git a/packages/main/src/index.ts b/packages/main/src/index.ts
index 78861c2..3494f25 100644
--- a/packages/main/src/index.ts
+++ b/packages/main/src/index.ts
@@ -23,14 +23,11 @@ import os from 'node:os';
23 23
24import { app } from 'electron'; 24import { app } from 'electron';
25 25
26import { 26import { enableStacktraceSourceMaps } from './infrastructure/electron/impl/devTools';
27 enableStacktraceSourceMaps,
28 ensureDevDataDir,
29} from './infrastructure/electron/impl/devTools';
30import electronShell from './infrastructure/electron/impl/electronShell'; 27import electronShell from './infrastructure/electron/impl/electronShell';
31import initReactions from './initReactions'; 28import initReactions from './initReactions';
32import MainStore from './stores/MainStore'; 29import MainStore from './stores/MainStore';
33import { getLogger } from './utils/log'; 30import getLogger from './utils/getLogger';
34 31
35const isDevelopment = import.meta.env.MODE === 'development'; 32const isDevelopment = import.meta.env.MODE === 'development';
36 33
@@ -40,7 +37,6 @@ const log = getLogger('index');
40app.enableSandbox(); 37app.enableSandbox();
41 38
42if (isDevelopment) { 39if (isDevelopment) {
43 ensureDevDataDir();
44 enableStacktraceSourceMaps(); 40 enableStacktraceSourceMaps();
45} 41}
46 42
diff --git a/packages/main/src/infrastructure/config/impl/ConfigFile.ts b/packages/main/src/infrastructure/config/impl/ConfigFile.ts
index 8b110a2..6203c89 100644
--- a/packages/main/src/infrastructure/config/impl/ConfigFile.ts
+++ b/packages/main/src/infrastructure/config/impl/ConfigFile.ts
@@ -25,8 +25,8 @@ import path from 'node:path';
25import { throttle } from 'lodash-es'; 25import { throttle } from 'lodash-es';
26 26
27import type Disposer from '../../../utils/Disposer'; 27import type Disposer from '../../../utils/Disposer';
28import getLogger from '../../../utils/getLogger';
28import isErrno from '../../../utils/isErrno'; 29import isErrno from '../../../utils/isErrno';
29import { getLogger } from '../../../utils/log';
30import type ConfigRepository from '../ConfigRepository'; 30import type ConfigRepository from '../ConfigRepository';
31import type { ReadConfigResult } from '../ConfigRepository'; 31import type { ReadConfigResult } from '../ConfigRepository';
32 32
diff --git a/packages/main/src/infrastructure/electron/RendererBridge.ts b/packages/main/src/infrastructure/electron/RendererBridge.ts
index c26aa94..3f9b512 100644
--- a/packages/main/src/infrastructure/electron/RendererBridge.ts
+++ b/packages/main/src/infrastructure/electron/RendererBridge.ts
@@ -29,7 +29,7 @@ import {
29 29
30import type MainStore from '../../stores/MainStore'; 30import type MainStore from '../../stores/MainStore';
31import Disposer from '../../utils/Disposer'; 31import Disposer from '../../utils/Disposer';
32import { getLogger } from '../../utils/log'; 32import getLogger from '../../utils/getLogger';
33 33
34const log = getLogger('RendererBridge'); 34const log = getLogger('RendererBridge');
35 35
diff --git a/packages/main/src/infrastructure/electron/impl/ElectronMainWindow.ts b/packages/main/src/infrastructure/electron/impl/ElectronMainWindow.ts
index b0db115..20a1f70 100644
--- a/packages/main/src/infrastructure/electron/impl/ElectronMainWindow.ts
+++ b/packages/main/src/infrastructure/electron/impl/ElectronMainWindow.ts
@@ -28,7 +28,7 @@ import { BrowserWindow, ipcMain, IpcMainEvent } from 'electron';
28import type { IJsonPatch } from 'mobx-state-tree'; 28import type { IJsonPatch } from 'mobx-state-tree';
29 29
30import type MainStore from '../../../stores/MainStore'; 30import type MainStore from '../../../stores/MainStore';
31import { getLogger } from '../../../utils/log'; 31import getLogger from '../../../utils/getLogger';
32import RendererBridge from '../RendererBridge'; 32import RendererBridge from '../RendererBridge';
33import type { MainWindow, ServiceView } from '../types'; 33import type { MainWindow, ServiceView } from '../types';
34 34
diff --git a/packages/main/src/infrastructure/electron/impl/ElectronServiceView.ts b/packages/main/src/infrastructure/electron/impl/ElectronServiceView.ts
index 3118efc..a9298bd 100644
--- a/packages/main/src/infrastructure/electron/impl/ElectronServiceView.ts
+++ b/packages/main/src/infrastructure/electron/impl/ElectronServiceView.ts
@@ -21,7 +21,7 @@
21import { BrowserView } from 'electron'; 21import { BrowserView } from 'electron';
22 22
23import type Service from '../../../stores/Service'; 23import type Service from '../../../stores/Service';
24import { getLogger } from '../../../utils/log'; 24import getLogger from '../../../utils/getLogger';
25import type Resources from '../../resources/Resources'; 25import type Resources from '../../resources/Resources';
26import type { ServiceView } from '../types'; 26import type { ServiceView } from '../types';
27 27
diff --git a/packages/main/src/infrastructure/electron/impl/__tests__/electron.integ.spec.ts b/packages/main/src/infrastructure/electron/impl/__tests__/electron.integ.spec.ts
new file mode 100644
index 0000000..f6bd440
--- /dev/null
+++ b/packages/main/src/infrastructure/electron/impl/__tests__/electron.integ.spec.ts
@@ -0,0 +1,9 @@
1import { BrowserWindow } from 'electron';
2
3import '../ElectronMainWindow';
4
5it('should create a BrowserWindow', async () => {
6 const w = new BrowserWindow();
7 await expect(w.loadURL('https://example.org')).resolves.toBeUndefined();
8 w.close();
9});
diff --git a/packages/main/src/infrastructure/electron/impl/__tests__/hardenSession.spec.ts b/packages/main/src/infrastructure/electron/impl/__tests__/hardenSession.spec.ts
index 7457729..ae10677 100644
--- a/packages/main/src/infrastructure/electron/impl/__tests__/hardenSession.spec.ts
+++ b/packages/main/src/infrastructure/electron/impl/__tests__/hardenSession.spec.ts
@@ -30,7 +30,6 @@ import type {
30 WebContents, 30 WebContents,
31} from 'electron'; 31} from 'electron';
32 32
33import { silenceLogger } from '../../../../utils/log';
34import type Resources from '../../../resources/Resources'; 33import type Resources from '../../../resources/Resources';
35import hardenSession from '../hardenSession'; 34import hardenSession from '../hardenSession';
36 35
@@ -90,10 +89,6 @@ const fakeSession = fake<Session>({
90 }, 89 },
91}); 90});
92 91
93beforeAll(() => {
94 silenceLogger();
95});
96
97beforeEach(() => { 92beforeEach(() => {
98 permissionRequestHandler = undefined; 93 permissionRequestHandler = undefined;
99 onBeforeRequest = undefined; 94 onBeforeRequest = undefined;
diff --git a/packages/main/src/infrastructure/electron/impl/__tests__/lockWebContentsToFile.spec.ts b/packages/main/src/infrastructure/electron/impl/__tests__/lockWebContentsToFile.spec.ts
index 29c0516..f7bad0a 100644
--- a/packages/main/src/infrastructure/electron/impl/__tests__/lockWebContentsToFile.spec.ts
+++ b/packages/main/src/infrastructure/electron/impl/__tests__/lockWebContentsToFile.spec.ts
@@ -25,7 +25,6 @@ import { fake } from '@sophie/test-utils';
25import type { Event, HandlerDetails, WebContents } from 'electron'; 25import type { Event, HandlerDetails, WebContents } from 'electron';
26import { mocked } from 'jest-mock'; 26import { mocked } from 'jest-mock';
27 27
28import { silenceLogger } from '../../../../utils/log';
29import type Resources from '../../../resources/Resources'; 28import type Resources from '../../../resources/Resources';
30import lockWebContentsToFile from '../lockWebContentsToFile'; 29import lockWebContentsToFile from '../lockWebContentsToFile';
31 30
@@ -59,17 +58,13 @@ const fakeWebContents = fake<WebContents>({
59 } 58 }
60 return this as WebContents; 59 return this as WebContents;
61 }, 60 },
62 loadURL: jest.fn(), 61 loadURL: jest.fn<WebContents['loadURL']>(),
63}); 62});
64 63
65const event: Event = { 64const event: Event = {
66 preventDefault: jest.fn(), 65 preventDefault: jest.fn(),
67}; 66};
68 67
69beforeAll(() => {
70 silenceLogger();
71});
72
73beforeEach(async () => { 68beforeEach(async () => {
74 windowOpenHandler = undefined; 69 windowOpenHandler = undefined;
75 willNavigate = undefined; 70 willNavigate = undefined;
diff --git a/packages/main/src/infrastructure/electron/impl/devTools.ts b/packages/main/src/infrastructure/electron/impl/devTools.ts
index 6db88d1..6b06d8f 100644
--- a/packages/main/src/infrastructure/electron/impl/devTools.ts
+++ b/packages/main/src/infrastructure/electron/impl/devTools.ts
@@ -18,7 +18,7 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21import { app, type BrowserWindow } from 'electron'; 21import type { BrowserWindow } from 'electron';
22 22
23/* eslint-disable 23/* eslint-disable
24 import/no-extraneous-dependencies, 24 import/no-extraneous-dependencies,
@@ -29,17 +29,6 @@ import { app, type BrowserWindow } from 'electron';
29*/ 29*/
30 30
31/** 31/**
32 * Makes sure we use a separate data dir for development.
33 */
34export function ensureDevDataDir(): void {
35 // Use alternative directory when debugging to avoid clobbering the main installation.
36 app.setPath('userData', `${app.getPath('userData')}-dev`);
37 const userData = app.getPath('userData');
38 const mkdirp = require('mkdirp') as typeof import('mkdirp');
39 mkdirp.sync(userData);
40}
41
42/**
43 * Enables using source maps for node stack traces. 32 * Enables using source maps for node stack traces.
44 */ 33 */
45export function enableStacktraceSourceMaps(): void { 34export function enableStacktraceSourceMaps(): void {
diff --git a/packages/main/src/infrastructure/electron/impl/hardenSession.ts b/packages/main/src/infrastructure/electron/impl/hardenSession.ts
index 53675a7..fc358a1 100644
--- a/packages/main/src/infrastructure/electron/impl/hardenSession.ts
+++ b/packages/main/src/infrastructure/electron/impl/hardenSession.ts
@@ -22,7 +22,7 @@ import { URL } from 'node:url';
22 22
23import type { Session } from 'electron'; 23import type { Session } from 'electron';
24 24
25import { getLogger } from '../../../utils/log'; 25import getLogger from '../../../utils/getLogger';
26import type Resources from '../../resources/Resources'; 26import type Resources from '../../resources/Resources';
27 27
28/** 28/**
diff --git a/packages/main/src/infrastructure/electron/impl/lockWebContentsToFile.ts b/packages/main/src/infrastructure/electron/impl/lockWebContentsToFile.ts
index 48b1bf0..8d557c4 100644
--- a/packages/main/src/infrastructure/electron/impl/lockWebContentsToFile.ts
+++ b/packages/main/src/infrastructure/electron/impl/lockWebContentsToFile.ts
@@ -20,7 +20,7 @@
20 20
21import type { WebContents } from 'electron'; 21import type { WebContents } from 'electron';
22 22
23import { getLogger } from '../../../utils/log'; 23import getLogger from '../../../utils/getLogger';
24import type Resources from '../../resources/Resources'; 24import type Resources from '../../resources/Resources';
25 25
26const log = getLogger('lockWebContentsToFile'); 26const log = getLogger('lockWebContentsToFile');
diff --git a/packages/main/src/reactions/__tests__/synchronizeConfig.spec.ts b/packages/main/src/reactions/__tests__/synchronizeConfig.spec.ts
index d3338d0..403a608 100644
--- a/packages/main/src/reactions/__tests__/synchronizeConfig.spec.ts
+++ b/packages/main/src/reactions/__tests__/synchronizeConfig.spec.ts
@@ -24,21 +24,19 @@ import { mocked } from 'jest-mock';
24import type ConfigRepository from '../../infrastructure/config/ConfigRepository'; 24import type ConfigRepository from '../../infrastructure/config/ConfigRepository';
25import SharedStore from '../../stores/SharedStore'; 25import SharedStore from '../../stores/SharedStore';
26import type Disposer from '../../utils/Disposer'; 26import type Disposer from '../../utils/Disposer';
27import { silenceLogger } from '../../utils/log';
28import synchronizeConfig, { serializeConfig } from '../synchronizeConfig'; 27import synchronizeConfig, { serializeConfig } from '../synchronizeConfig';
29 28
30let store: SharedStore; 29let store: SharedStore;
31const repository: ConfigRepository = { 30const repository: ConfigRepository = {
32 readConfig: jest.fn(), 31 readConfig: jest.fn<ConfigRepository['readConfig']>(),
33 writeConfig: jest.fn(), 32 writeConfig: jest.fn<ConfigRepository['writeConfig']>(),
34 watchConfig: jest.fn(), 33 watchConfig: jest.fn<ConfigRepository['watchConfig']>(),
35}; 34};
36const lessThanThrottleMs = 100; 35const lessThanThrottleMs = 100;
37const throttleMs = 1000; 36const throttleMs = 1000;
38 37
39beforeAll(() => { 38beforeAll(() => {
40 jest.useFakeTimers(); 39 jest.useFakeTimers();
41 silenceLogger();
42}); 40});
43 41
44beforeEach(() => { 42beforeEach(() => {
diff --git a/packages/main/src/reactions/loadServices.ts b/packages/main/src/reactions/loadServices.ts
index f56ac62..50fd2cb 100644
--- a/packages/main/src/reactions/loadServices.ts
+++ b/packages/main/src/reactions/loadServices.ts
@@ -29,7 +29,7 @@ import type {
29} from '../infrastructure/electron/types'; 29} from '../infrastructure/electron/types';
30import type MainStore from '../stores/MainStore'; 30import type MainStore from '../stores/MainStore';
31import type Service from '../stores/Service'; 31import type Service from '../stores/Service';
32import { getLogger } from '../utils/log'; 32import getLogger from '../utils/getLogger';
33 33
34const log = getLogger('loadServices'); 34const log = getLogger('loadServices');
35 35
diff --git a/packages/main/src/reactions/synchronizeConfig.ts b/packages/main/src/reactions/synchronizeConfig.ts
index 247c2e2..5fe924a 100644
--- a/packages/main/src/reactions/synchronizeConfig.ts
+++ b/packages/main/src/reactions/synchronizeConfig.ts
@@ -25,7 +25,7 @@ import type ConfigRepository from '../infrastructure/config/ConfigRepository';
25import type SharedStore from '../stores/SharedStore'; 25import type SharedStore from '../stores/SharedStore';
26import type Config from '../stores/config/Config'; 26import type Config from '../stores/config/Config';
27import type Disposer from '../utils/Disposer'; 27import type Disposer from '../utils/Disposer';
28import { getLogger } from '../utils/log'; 28import getLogger from '../utils/getLogger';
29 29
30const DEFAULT_CONFIG_DEBOUNCE_TIME_MS = 1000; 30const DEFAULT_CONFIG_DEBOUNCE_TIME_MS = 1000;
31 31
diff --git a/packages/main/src/reactions/synchronizeNativeTheme.ts b/packages/main/src/reactions/synchronizeNativeTheme.ts
index 8c4edb3..384d54d 100644
--- a/packages/main/src/reactions/synchronizeNativeTheme.ts
+++ b/packages/main/src/reactions/synchronizeNativeTheme.ts
@@ -23,7 +23,7 @@ import { autorun } from 'mobx';
23 23
24import type SharedStore from '../stores/SharedStore'; 24import type SharedStore from '../stores/SharedStore';
25import type Disposer from '../utils/Disposer'; 25import type Disposer from '../utils/Disposer';
26import { getLogger } from '../utils/log'; 26import getLogger from '../utils/getLogger';
27 27
28const log = getLogger('synchronizeNativeTheme'); 28const log = getLogger('synchronizeNativeTheme');
29 29
diff --git a/packages/main/src/stores/GlobalSettings.ts b/packages/main/src/stores/GlobalSettings.ts
index 4e6aa13..84248ea 100644
--- a/packages/main/src/stores/GlobalSettings.ts
+++ b/packages/main/src/stores/GlobalSettings.ts
@@ -21,7 +21,7 @@
21import { defineGlobalSettingsModel, ThemeSource } from '@sophie/shared'; 21import { defineGlobalSettingsModel, ThemeSource } from '@sophie/shared';
22import { Instance, resolveIdentifier } from 'mobx-state-tree'; 22import { Instance, resolveIdentifier } from 'mobx-state-tree';
23 23
24import { getLogger } from '../utils/log'; 24import getLogger from '../utils/getLogger';
25 25
26import Service from './Service'; 26import Service from './Service';
27 27
diff --git a/packages/main/src/stores/MainStore.ts b/packages/main/src/stores/MainStore.ts
index 9affbd0..b3e2830 100644
--- a/packages/main/src/stores/MainStore.ts
+++ b/packages/main/src/stores/MainStore.ts
@@ -25,7 +25,7 @@ import { flow, Instance, types } from 'mobx-state-tree';
25import type I18nStore from '../i18n/I18nStore'; 25import type I18nStore from '../i18n/I18nStore';
26import type { UseTranslationResult } from '../i18n/I18nStore'; 26import type { UseTranslationResult } from '../i18n/I18nStore';
27import type { MainWindow } from '../infrastructure/electron/types'; 27import type { MainWindow } from '../infrastructure/electron/types';
28import { getLogger } from '../utils/log'; 28import getLogger from '../utils/getLogger';
29 29
30import GlobalSettings from './GlobalSettings'; 30import GlobalSettings from './GlobalSettings';
31import { getEnv } from './MainEnv'; 31import { getEnv } from './MainEnv';
diff --git a/packages/main/src/stores/Service.ts b/packages/main/src/stores/Service.ts
index 8ba8098..9256f65 100644
--- a/packages/main/src/stores/Service.ts
+++ b/packages/main/src/stores/Service.ts
@@ -30,7 +30,7 @@ import {
30import { type Instance, getSnapshot, cast, flow } from 'mobx-state-tree'; 30import { type Instance, getSnapshot, cast, flow } from 'mobx-state-tree';
31 31
32import type { ServiceView } from '../infrastructure/electron/types'; 32import type { ServiceView } from '../infrastructure/electron/types';
33import { getLogger } from '../utils/log'; 33import getLogger from '../utils/getLogger';
34 34
35import { getEnv } from './MainEnv'; 35import { getEnv } from './MainEnv';
36import ServiceSettings from './ServiceSettings'; 36import ServiceSettings from './ServiceSettings';
diff --git a/packages/main/src/stores/SharedStore.ts b/packages/main/src/stores/SharedStore.ts
index 3aa8c73..f93c3d4 100644
--- a/packages/main/src/stores/SharedStore.ts
+++ b/packages/main/src/stores/SharedStore.ts
@@ -21,7 +21,7 @@
21import { defineSharedStoreModel, WritingDirection } from '@sophie/shared'; 21import { defineSharedStoreModel, WritingDirection } from '@sophie/shared';
22import { getSnapshot, Instance } from 'mobx-state-tree'; 22import { getSnapshot, Instance } from 'mobx-state-tree';
23 23
24import { getLogger } from '../utils/log'; 24import getLogger from '../utils/getLogger';
25 25
26import GlobalSettings from './GlobalSettings'; 26import GlobalSettings from './GlobalSettings';
27import Profile from './Profile'; 27import Profile from './Profile';
diff --git a/packages/main/src/utils/log.ts b/packages/main/src/utils/getLogger.ts
index d9748f4..7ed38de 100644
--- a/packages/main/src/utils/log.ts
+++ b/packages/main/src/utils/getLogger.ts
@@ -23,10 +23,16 @@ import chalk, { ChalkInstance } from 'chalk';
23import loglevel from 'loglevel'; 23import loglevel from 'loglevel';
24import prefix from 'loglevel-plugin-prefix'; 24import prefix from 'loglevel-plugin-prefix';
25 25
26if (import.meta.env?.DEV) { 26switch (import.meta.env.MODE) {
27 loglevel.setLevel('debug'); 27 case 'development':
28} else { 28 loglevel.setLevel('debug', false);
29 loglevel.setLevel('info'); 29 break;
30 case 'test':
31 loglevel.setLevel('silent', false);
32 break;
33 default:
34 loglevel.setLevel('info', false);
35 break;
30} 36}
31 37
32const COLORS: Map<string, ChalkInstance> = new Map([ 38const COLORS: Map<string, ChalkInstance> = new Map([
@@ -51,14 +57,6 @@ prefix.apply(loglevel, {
51 }, 57 },
52}); 58});
53 59
54export function getLogger(loggerName: string): loglevel.Logger { 60export default function getLogger(loggerName: string): loglevel.Logger {
55 return loglevel.getLogger(loggerName); 61 return loglevel.getLogger(loggerName);
56} 62}
57
58export function silenceLogger(): void {
59 loglevel.disableAll();
60 const loggers = loglevel.getLoggers();
61 Object.values(loggers).forEach((logger) => {
62 logger.disableAll();
63 });
64}
diff --git a/packages/main/tsconfig.json b/packages/main/tsconfig.json
index e18e7d3..943a8e3 100644
--- a/packages/main/tsconfig.json
+++ b/packages/main/tsconfig.json
@@ -20,6 +20,7 @@
20 "types/**/*.d.ts", 20 "types/**/*.d.ts",
21 ".eslintrc.cjs", 21 ".eslintrc.cjs",
22 "esbuild.config.js", 22 "esbuild.config.js",
23 "jest.config.js" 23 "jest.config.js",
24 "jest.integ.config.cjs"
24 ] 25 ]
25} 26}
diff --git a/packages/preload/package.json b/packages/preload/package.json
index 5e5f0bf..516e455 100644
--- a/packages/preload/package.json
+++ b/packages/preload/package.json
@@ -10,17 +10,17 @@
10 }, 10 },
11 "dependencies": { 11 "dependencies": {
12 "@sophie/shared": "workspace:*", 12 "@sophie/shared": "workspace:*",
13 "electron": "^19.0.0-alpha.1", 13 "electron": "^19.0.0-beta.3",
14 "i18next": "^21.6.16", 14 "i18next": "^21.6.16",
15 "loglevel": "^1.8.0", 15 "loglevel": "^1.8.0",
16 "mobx": "^6.5.0", 16 "mobx": "^6.5.0",
17 "mobx-state-tree": "^5.1.3" 17 "mobx-state-tree": "^5.1.3"
18 }, 18 },
19 "devDependencies": { 19 "devDependencies": {
20 "@jest/globals": "^27.5.1", 20 "@jest/globals": "^28.0.3",
21 "@types/jest": "^27.4.1", 21 "@types/jest": "^27.5.0",
22 "jest": "^27.5.1", 22 "jest": "^28.0.3",
23 "jest-mock": "^27.5.1", 23 "jest-mock": "^28.0.2",
24 "jsdom": "^19.0.0" 24 "jsdom": "^19.0.0"
25 } 25 }
26} 26}
diff --git a/packages/renderer/package.json b/packages/renderer/package.json
index 2e24f35..6358009 100644
--- a/packages/renderer/package.json
+++ b/packages/renderer/package.json
@@ -29,18 +29,19 @@
29 "stylis-plugin-rtl": "^2.1.1" 29 "stylis-plugin-rtl": "^2.1.1"
30 }, 30 },
31 "devDependencies": { 31 "devDependencies": {
32 "@jest/globals": "^27.5.1", 32 "@jest/globals": "^28.0.3",
33 "@types/jest": "^27.4.1", 33 "@types/jest": "^27.5.0",
34 "@types/lodash-es": "^4.17.6", 34 "@types/lodash-es": "^4.17.6",
35 "@types/react": "^17.0.44", 35 "@types/react": "^17.0.44",
36 "@types/react-dom": "^17.0.15", 36 "@types/react-dom": "^17.0.15",
37 "@types/stylis": "^4.0.2", 37 "@types/stylis": "^4.0.2",
38 "@vitejs/plugin-react": "^1.3.1", 38 "@vitejs/plugin-react": "^1.3.2",
39 "jest": "^27.5.1", 39 "jest": "^28.0.3",
40 "jest-mock": "^27.5.1", 40 "jest-environment-jsdom": "^28.0.2",
41 "jest-mock": "^28.0.2",
41 "jsdom": "^19.0.0", 42 "jsdom": "^19.0.0",
42 "mst-middlewares": "^5.1.3", 43 "mst-middlewares": "^5.1.3",
43 "remotedev": "^0.2.9", 44 "remotedev": "^0.2.9",
44 "vite": "^2.9.5" 45 "vite": "^2.9.7"
45 } 46 }
46} 47}
diff --git a/packages/service-preload/package.json b/packages/service-preload/package.json
index 28d1129..6cbefb0 100644
--- a/packages/service-preload/package.json
+++ b/packages/service-preload/package.json
@@ -10,7 +10,7 @@
10 "dependencies": { 10 "dependencies": {
11 "@sophie/service-inject": "workspace:*", 11 "@sophie/service-inject": "workspace:*",
12 "@sophie/service-shared": "workspace:*", 12 "@sophie/service-shared": "workspace:*",
13 "electron": "^19.0.0-alpha.1" 13 "electron": "^19.0.0-beta.3"
14 }, 14 },
15 "devDependencies": { 15 "devDependencies": {
16 "@types/color-string": "^1.5.2" 16 "@types/color-string": "^1.5.2"
diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json
index a4f8e52..c6f4945 100644
--- a/packages/test-utils/package.json
+++ b/packages/test-utils/package.json
@@ -10,9 +10,9 @@
10 "types": "yarn g:types" 10 "types": "yarn g:types"
11 }, 11 },
12 "dependencies": { 12 "dependencies": {
13 "@types/jest": "^27.4.1", 13 "@types/jest": "^27.5.0",
14 "jest": "^27.5.1", 14 "jest": "^28.0.3",
15 "jest-each": "^27.5.1", 15 "jest-each": "^28.0.2",
16 "type-fest": "^2.12.2" 16 "type-fest": "^2.12.2"
17 } 17 }
18} 18}