72 lines
2.4 KiB
TypeScript
72 lines
2.4 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
|
|
vi.mock('electron', () => ({
|
|
default: {
|
|
app: {
|
|
on: vi.fn(),
|
|
getPath: vi.fn(),
|
|
getVersion: vi.fn(() => '0.2.7'),
|
|
isPackaged: false,
|
|
getLoginItemSettings: vi.fn(() => ({ openAtLogin: false }))
|
|
},
|
|
Tray: vi.fn(function (this: unknown) {
|
|
Object.assign(this as object, {
|
|
setToolTip: vi.fn(),
|
|
setContextMenu: vi.fn(),
|
|
on: vi.fn()
|
|
});
|
|
}),
|
|
Menu: { buildFromTemplate: vi.fn((items: unknown) => ({ items })) },
|
|
nativeImage: { createEmpty: vi.fn() },
|
|
dialog: {},
|
|
shell: {},
|
|
clipboard: {}
|
|
}
|
|
}));
|
|
|
|
import { createTray, type TrayCallbacks } from '../../src/main/tray';
|
|
|
|
describe('tray menu — slim 4 items', () => {
|
|
beforeEach(() => { vi.clearAllMocks(); });
|
|
|
|
function makeCallbacks(): TrayCallbacks {
|
|
return {
|
|
showInbox: vi.fn(),
|
|
showCapture: vi.fn(),
|
|
showSettings: vi.fn()
|
|
};
|
|
}
|
|
|
|
it('builds menu with 4 click items + 2 separators', async () => {
|
|
createTray(makeCallbacks());
|
|
const electron = (await import('electron')).default;
|
|
const calls = (electron.Menu.buildFromTemplate as any).mock.calls;
|
|
const items = calls[calls.length - 1][0];
|
|
const labels = items.filter((i: any) => i.type !== 'separator').map((i: any) => i.label);
|
|
expect(labels).toEqual(['한 줄 적기', '보관한 메모 보기', '설정...', '종료']);
|
|
});
|
|
|
|
it('does not include removed items', async () => {
|
|
createTray(makeCallbacks());
|
|
const electron = (await import('electron')).default;
|
|
const calls = (electron.Menu.buildFromTemplate as any).mock.calls;
|
|
const items = calls[calls.length - 1][0];
|
|
const labels = items.filter((i: any) => i.type !== 'separator').map((i: any) => i.label);
|
|
expect(labels).not.toContain('지금 백업');
|
|
expect(labels).not.toContain('내보내기...');
|
|
expect(labels).not.toContain('Ollama 재확인');
|
|
expect(labels).not.toContain('Ollama 설정...');
|
|
});
|
|
|
|
it('"설정..." click invokes showSettings callback', async () => {
|
|
const cb = makeCallbacks();
|
|
createTray(cb);
|
|
const electron = (await import('electron')).default;
|
|
const calls = (electron.Menu.buildFromTemplate as any).mock.calls;
|
|
const items = calls[calls.length - 1][0];
|
|
const settingsItem = items.find((i: any) => i.label === '설정...');
|
|
settingsItem.click();
|
|
expect(cb.showSettings).toHaveBeenCalled();
|
|
});
|
|
});
|