/** * Tests for Preload Script Security * Verifies that the IPC bridge is properly configured */ describe('Preload Security', () => { describe('Allowed Channels', () => { const EXPECTED_SEND_CHANNELS = [ 'save-file', 'save-current-file', 'set-current-file', 'save-recent-files', 'clear-recent-files', 'renderer-ready', 'get-theme', 'do-print', 'export-with-options', 'export-spreadsheet', 'batch-convert', 'select-folder', 'universal-convert', 'universal-convert-batch', 'get-header-footer-settings', 'save-header-footer-settings', 'browse-header-footer-logo', 'save-header-footer-logo', 'clear-header-footer-logo', 'get-page-settings', 'update-page-settings', 'set-custom-start-page', 'process-pdf-operation', 'get-pdf-page-count', 'select-pdf-folder' ]; const EXPECTED_RECEIVE_CHANNELS = [ 'file-new', 'file-opened', 'file-save', 'get-content-for-save', 'get-content-for-spreadsheet', 'recent-files-cleared', 'toggle-preview', 'toggle-find', 'theme-changed', 'theme-data', 'undo', 'redo', 'adjust-font-size', 'print-preview', 'print-preview-styled', 'show-export-dialog', 'show-batch-dialog', 'show-universal-converter-dialog', 'show-table-generator', 'show-pdf-editor-dialog', 'conversion-status', 'conversion-complete', 'batch-progress', 'folder-selected', 'pdf-folder-selected', 'header-footer-settings-data', 'header-footer-logo-selected', 'header-footer-logo-saved', 'page-settings-data', 'pdf-page-count', 'pdf-operation-complete', 'pdf-operation-error' ]; test('should define all expected send channels', () => { // This test documents expected channels expect(EXPECTED_SEND_CHANNELS.length).toBeGreaterThan(0); }); test('should define all expected receive channels', () => { // This test documents expected channels expect(EXPECTED_RECEIVE_CHANNELS.length).toBeGreaterThan(0); }); }); describe('electronAPI Interface', () => { test('should expose send method', () => { expect(window.electronAPI.send).toBeDefined(); expect(typeof window.electronAPI.send).toBe('function'); }); test('should expose on method', () => { expect(window.electronAPI.on).toBeDefined(); expect(typeof window.electronAPI.on).toBe('function'); }); test('should expose once method', () => { expect(window.electronAPI.once).toBeDefined(); expect(typeof window.electronAPI.once).toBe('function'); }); test('should expose invoke method', () => { expect(window.electronAPI.invoke).toBeDefined(); expect(typeof window.electronAPI.invoke).toBe('function'); }); test('should expose file convenience methods', () => { expect(window.electronAPI.file).toBeDefined(); expect(window.electronAPI.file.save).toBeDefined(); expect(window.electronAPI.file.saveCurrent).toBeDefined(); expect(window.electronAPI.file.setCurrent).toBeDefined(); }); test('should expose theme convenience methods', () => { expect(window.electronAPI.theme).toBeDefined(); expect(window.electronAPI.theme.get).toBeDefined(); }); test('should expose pdf convenience methods', () => { expect(window.electronAPI.pdf).toBeDefined(); expect(window.electronAPI.pdf.processOperation).toBeDefined(); expect(window.electronAPI.pdf.getPageCount).toBeDefined(); }); }); });