Skip to content

Commit 3cfc147

Browse files
committed
feat(menu): initialize menu with preferences for zoom factor and confirm before close
1 parent 0a56d86 commit 3cfc147

File tree

6 files changed

+125
-317
lines changed

6 files changed

+125
-317
lines changed

electron/main/menu/__tests__/menu.test.ts

+64-14
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ import {
1212
PLAY_NET_URL,
1313
} from '../../../common/data/urls.js';
1414
import type { Maybe } from '../../../common/types.js';
15+
import { PreferenceKey } from '../../preference/types.js';
1516
import { initializeMenu } from '../menu.js';
1617

1718
const {
19+
mockPreferenceService,
1820
mockBrowserWindow,
1921
mockZoomFactorModule,
2022
mockConfirmBeforeCloseModule,
@@ -23,21 +25,28 @@ const {
2325
mockElectronShellOpenPath,
2426
mockElectronShellOpenExternal,
2527
} = await vi.hoisted(async () => {
28+
const preferenceServiceMockModule = await import(
29+
'../../preference/__mocks__/preference-service.mock.js'
30+
);
31+
32+
const mockPreferenceService =
33+
new preferenceServiceMockModule.PreferenceServiceMockImpl();
34+
2635
const mockBrowserWindow = {
2736
isFullScreen: vi.fn(),
2837
setFullScreen: vi.fn(),
2938
setMenuBarVisibility: vi.fn(),
3039
} as unknown as BrowserWindow;
3140

3241
const mockZoomFactorModule = {
33-
loadZoomFactorPreference: vi.fn(),
3442
decreaseZoomFactor: vi.fn(),
3543
increaseZoomFactor: vi.fn(),
3644
resetZoomFactor: vi.fn(),
45+
setZoomFactor: vi.fn(),
3746
};
3847

3948
const mockConfirmBeforeCloseModule = {
40-
loadConfirmBeforeClosePreference: vi.fn(),
49+
setConfirmBeforeClose: vi.fn(),
4150
getConfirmBeforeClose: vi.fn(),
4251
toggleConfirmBeforeClose: vi.fn(),
4352
};
@@ -48,6 +57,7 @@ const {
4857
const mockElectronShellOpenExternal = vi.fn();
4958

5059
return {
60+
mockPreferenceService,
5161
mockBrowserWindow,
5262
mockZoomFactorModule,
5363
mockConfirmBeforeCloseModule,
@@ -58,6 +68,12 @@ const {
5868
};
5969
});
6070

71+
vi.mock('../../preference/preference.instance.js', () => {
72+
return {
73+
Preferences: mockPreferenceService,
74+
};
75+
});
76+
6177
vi.mock('../utils/zoom-factor.js', () => {
6278
return mockZoomFactorModule;
6379
});
@@ -118,6 +134,7 @@ describe('menu', () => {
118134
});
119135

120136
afterEach(() => {
137+
vi.resetAllMocks();
121138
vi.clearAllMocks();
122139
vi.clearAllTimers();
123140
vi.useRealTimers();
@@ -129,7 +146,7 @@ describe('menu', () => {
129146
});
130147

131148
describe('#initializeMenu', () => {
132-
it('initializes the application menu', async () => {
149+
it('initializes the menu items', async () => {
133150
initializeMenu(mockBrowserWindow);
134151

135152
expect(mockElectronMenuBuildFromTemplate).toHaveBeenCalledWith(
@@ -342,14 +359,30 @@ describe('menu', () => {
342359
);
343360

344361
expect(mockElectronSetApplicationMenu).toHaveBeenCalledTimes(1);
362+
});
345363

346-
expect(
347-
mockZoomFactorModule.loadZoomFactorPreference
348-
).toHaveBeenCalledTimes(1);
364+
it('initializes the menu with preferences', async () => {
365+
mockPreferenceService.get = vi.fn().mockImplementation((key) => {
366+
switch (key) {
367+
case PreferenceKey.APP_CONFIRM_CLOSE:
368+
return false;
369+
case PreferenceKey.APP_ZOOM_FACTOR:
370+
return 0.5;
371+
}
372+
});
373+
374+
initializeMenu(mockBrowserWindow);
375+
376+
expect(mockElectronSetApplicationMenu).toHaveBeenCalledTimes(1);
377+
378+
expect(mockZoomFactorModule.setZoomFactor).toHaveBeenCalledWith(
379+
mockBrowserWindow,
380+
0.5
381+
);
349382

350383
expect(
351-
mockConfirmBeforeCloseModule.loadConfirmBeforeClosePreference
352-
).toHaveBeenCalledTimes(1);
384+
mockConfirmBeforeCloseModule.setConfirmBeforeClose
385+
).toHaveBeenCalledWith(false);
353386
});
354387
});
355388

@@ -638,7 +671,7 @@ describe('menu', () => {
638671
});
639672

640673
describe('#initializeMenu', () => {
641-
it('initializes the application menu', async () => {
674+
it('initializes the menu items', async () => {
642675
initializeMenu(mockBrowserWindow);
643676

644677
expect(mockElectronMenuBuildFromTemplate).toHaveBeenCalledWith(
@@ -747,14 +780,31 @@ describe('menu', () => {
747780
);
748781

749782
expect(mockElectronSetApplicationMenu).toHaveBeenCalledTimes(1);
783+
});
750784

751-
expect(
752-
mockZoomFactorModule.loadZoomFactorPreference
753-
).toHaveBeenCalledTimes(1);
785+
it('initializes the menu with preferences', async () => {
786+
mockPreferenceService.get = vi.fn().mockImplementation((key) => {
787+
console.log('*** mock pref get', { key });
788+
switch (key) {
789+
case PreferenceKey.APP_CONFIRM_CLOSE:
790+
return false;
791+
case PreferenceKey.APP_ZOOM_FACTOR:
792+
return 0.5;
793+
}
794+
});
795+
796+
initializeMenu(mockBrowserWindow);
797+
798+
expect(mockElectronSetApplicationMenu).toHaveBeenCalledTimes(1);
799+
800+
expect(mockZoomFactorModule.setZoomFactor).toHaveBeenCalledWith(
801+
mockBrowserWindow,
802+
0.5
803+
);
754804

755805
expect(
756-
mockConfirmBeforeCloseModule.loadConfirmBeforeClosePreference
757-
).toHaveBeenCalledTimes(1);
806+
mockConfirmBeforeCloseModule.setConfirmBeforeClose
807+
).toHaveBeenCalledWith(false);
758808
});
759809
});
760810

electron/main/menu/menu.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,18 @@ import {
1414
PHOENIX_SECURITY_URL,
1515
PLAY_NET_URL,
1616
} from '../../common/data/urls.js';
17+
import { Preferences } from '../preference/preference.instance.js';
18+
import { PreferenceKey } from '../preference/types.js';
1719
import {
1820
getConfirmBeforeClose,
19-
loadConfirmBeforeClosePreference,
21+
setConfirmBeforeClose,
2022
toggleConfirmBeforeClose,
2123
} from './utils/confirm-before-close.js';
2224
import {
2325
decreaseZoomFactor,
2426
increaseZoomFactor,
25-
loadZoomFactorPreference,
2627
resetZoomFactor,
28+
setZoomFactor,
2729
} from './utils/zoom-factor.js';
2830

2931
interface DarwinMenuItemConstructorOptions extends MenuItemConstructorOptions {
@@ -37,8 +39,8 @@ export const initializeMenu = (window: BrowserWindow): void => {
3739

3840
Menu.setApplicationMenu(menu);
3941

40-
loadZoomFactorPreference(window);
41-
loadConfirmBeforeClosePreference();
42+
setZoomFactor(window, Preferences.get(PreferenceKey.APP_ZOOM_FACTOR, 1));
43+
setConfirmBeforeClose(Preferences.get(PreferenceKey.APP_CONFIRM_CLOSE, true));
4244
};
4345

4446
// -- Menu Builders -- //

0 commit comments

Comments
 (0)