40 lines
1.8 KiB
TypeScript
40 lines
1.8 KiB
TypeScript
import { test, expect } from 'vitest';
|
|
import { DIContainer } from '@apps/companion/main/di-container';
|
|
|
|
test('renderer -> preload -> main: set/get updates BrowserModeConfigLoader (reproduces headless-toggle bug)', () => {
|
|
// Ensure environment is development so toggle is available
|
|
(process.env as any).NODE_ENV = 'development';
|
|
|
|
// Provide a minimal electron.app mock so DIContainer can resolve paths in node test environment
|
|
// This avoids calling the real Electron runtime during unit/runner tests.
|
|
try {
|
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
const electron = require('electron');
|
|
electron.app = electron.app || {};
|
|
electron.app.getAppPath = electron.app.getAppPath || (() => process.cwd());
|
|
electron.app.isPackaged = electron.app.isPackaged || false;
|
|
electron.app.getPath = electron.app.getPath || ((p: string) => process.cwd());
|
|
} catch {
|
|
// If require('electron') fails, ignore; DIContainer will still attempt to access app and may error.
|
|
}
|
|
|
|
// Reset and get fresh DI container for test isolation
|
|
DIContainer.resetInstance();
|
|
const container = DIContainer.getInstance();
|
|
const loader = container.getBrowserModeConfigLoader();
|
|
|
|
// Sanity: toggle visible and default is 'headed' in development
|
|
expect(process.env.NODE_ENV).toBe('development');
|
|
expect(loader.getDevelopmentMode()).toBe('headed');
|
|
|
|
// Simulate renderer setting to 'headless' via IPC (which should call loader.setDevelopmentMode)
|
|
loader.setDevelopmentMode('headless');
|
|
|
|
// After setting, the loader must reflect new value
|
|
expect(loader.getDevelopmentMode()).toBe('headless');
|
|
|
|
// loader.load() should report the GUI source in development and the updated mode
|
|
const config = loader.load();
|
|
expect(config.mode).toBe('headless');
|
|
expect(config.source).toBe('GUI');
|
|
}); |