118 lines
3.1 KiB
TypeScript
118 lines
3.1 KiB
TypeScript
import { describe, it, expect, vi, afterEach } from 'vitest';
|
|
|
|
describe('main bootstrap preview behavior', () => {
|
|
afterEach(() => {
|
|
vi.restoreAllMocks();
|
|
vi.resetModules();
|
|
});
|
|
|
|
it('starts preview server during app startup', async () => {
|
|
const mockApp = {
|
|
name: 'bDS',
|
|
whenReady: vi.fn(() => Promise.resolve()),
|
|
on: vi.fn(),
|
|
quit: vi.fn(),
|
|
};
|
|
|
|
const mockBrowserWindowGetAllWindows = vi.fn(() => [{ id: 1 }]);
|
|
|
|
class MockBrowserWindow {
|
|
static getAllWindows = mockBrowserWindowGetAllWindows;
|
|
|
|
loadURL = vi.fn();
|
|
loadFile = vi.fn();
|
|
on = vi.fn();
|
|
isDestroyed = vi.fn(() => false);
|
|
webContents = {
|
|
on: vi.fn(),
|
|
send: vi.fn(),
|
|
openDevTools: vi.fn(),
|
|
toggleDevTools: vi.fn(),
|
|
};
|
|
}
|
|
|
|
vi.doMock('electron', () => ({
|
|
app: mockApp,
|
|
BrowserWindow: MockBrowserWindow,
|
|
Menu: {
|
|
buildFromTemplate: vi.fn(() => ({})),
|
|
setApplicationMenu: vi.fn(),
|
|
},
|
|
ipcMain: {
|
|
on: vi.fn(),
|
|
handle: vi.fn(),
|
|
removeHandler: vi.fn(),
|
|
},
|
|
protocol: {
|
|
registerSchemesAsPrivileged: vi.fn(),
|
|
handle: vi.fn(),
|
|
},
|
|
net: {
|
|
fetch: vi.fn(),
|
|
},
|
|
shell: {
|
|
openExternal: vi.fn(),
|
|
openPath: vi.fn(),
|
|
},
|
|
}));
|
|
|
|
const mockPreviewStart = vi.fn().mockResolvedValue(4123);
|
|
const mockPreviewStop = vi.fn().mockResolvedValue(undefined);
|
|
const mockPreviewGetBaseUrl = vi.fn(() => 'http://127.0.0.1:4123');
|
|
|
|
class MockPreviewServer {
|
|
start = mockPreviewStart;
|
|
stop = mockPreviewStop;
|
|
getBaseUrl = mockPreviewGetBaseUrl;
|
|
}
|
|
|
|
vi.doMock('../../src/main/engine/PreviewServer', () => ({
|
|
PreviewServer: MockPreviewServer,
|
|
}));
|
|
|
|
vi.doMock('../../src/main/database', () => ({
|
|
getDatabase: vi.fn(() => ({
|
|
initializeLocal: vi.fn().mockResolvedValue(undefined),
|
|
close: vi.fn().mockResolvedValue(undefined),
|
|
getLocal: vi.fn(() => ({
|
|
select: vi.fn(() => ({
|
|
from: vi.fn(() => ({
|
|
where: vi.fn(() => ({
|
|
get: vi.fn().mockResolvedValue(null),
|
|
})),
|
|
})),
|
|
})),
|
|
})),
|
|
getDataPaths: vi.fn(() => ({ database: '/tmp/mock.db' })),
|
|
})),
|
|
}));
|
|
|
|
vi.doMock('../../src/main/ipc', () => ({
|
|
registerIpcHandlers: vi.fn(),
|
|
registerChatHandlers: vi.fn(),
|
|
initializeChatHandlers: vi.fn(),
|
|
cleanupChatHandlers: vi.fn().mockResolvedValue(undefined),
|
|
}));
|
|
|
|
vi.doMock('../../src/main/database/schema', () => ({
|
|
media: {},
|
|
}));
|
|
|
|
vi.doMock('drizzle-orm', () => ({
|
|
eq: vi.fn(),
|
|
}));
|
|
|
|
vi.doMock('../../src/main/engine/MediaEngine', () => ({
|
|
getMediaEngine: vi.fn(() => ({
|
|
getThumbnailPaths: vi.fn().mockResolvedValue({ small: null }),
|
|
})),
|
|
}));
|
|
|
|
await import('../../src/main/main');
|
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
|
|
expect(mockPreviewStart).toHaveBeenCalledWith(4123);
|
|
expect(mockApp.whenReady).toHaveBeenCalled();
|
|
});
|
|
});
|