/** * 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', 'do-print-with-options', 'export-with-options', 'export-spreadsheet', 'batch-convert', 'select-folder', 'universal-convert', 'universal-convert-batch', 'image-convert', 'image-batch-convert', 'image-resize', 'image-compress', 'image-rotate', 'audio-convert', 'audio-batch-convert', 'audio-extract', 'audio-trim', 'audio-merge', 'video-convert', 'video-batch-convert', 'video-compress', 'video-trim', 'video-frames', 'video-gif', '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', 'insert-generated-content', 'save-pasted-image', 'load-template', 'list-directory', 'read-file', 'write-file', 'delete-file', 'ensure-directory', 'path-exists', 'is-directory', 'copy-path', 'move-path', 'open-file-path', 'git-status', 'git-stage', 'git-commit', 'git-log', 'git-diff', 'get-snippets', 'save-snippet', 'delete-snippet', 'execute-code', 'show-pdf-editor-from-toolbar', 'menu-open', 'export', ]; 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', 'show-export-dialog', 'show-batch-dialog', 'show-universal-converter-dialog', 'show-pdf-editor-dialog', 'show-image-converter', 'show-audio-converter', 'show-video-converter', 'open-pdf-viewer', 'conversion-status', 'conversion-complete', 'batch-progress', 'image-conversion-complete', 'audio-conversion-complete', 'video-conversion-complete', 'folder-selected', 'pdf-folder-selected', 'header-footer-settings-data', 'header-footer-logo-selected', 'header-footer-logo-saved', 'header-footer-logo-cleared', 'page-settings-data', 'pdf-page-count', 'pdf-operation-complete', 'pdf-operation-error', 'pdf-operation-progress', 'open-header-footer-dialog', 'insert-content', 'load-template-menu', 'toggle-sidebar-panel', 'toggle-bottom-panel', ]; 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(); }); }); });