1
0

ipc-registry.test.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import { describe, it, expect, beforeEach, vi } from 'vitest'
  2. // Mock electron's ipcMain
  3. vi.mock('electron', () => ({
  4. ipcMain: {
  5. handle: vi.fn(),
  6. removeHandler: vi.fn()
  7. }
  8. }))
  9. // Import after mocking
  10. import {
  11. registerHandler,
  12. registerHandlers,
  13. removeHandler,
  14. removeAllHandlers,
  15. getRegisteredHandlers,
  16. isHandlerRegistered
  17. } from '../electron/modules/ipc-registry'
  18. import { ipcMain } from 'electron'
  19. describe('ipc-registry', () => {
  20. beforeEach(() => {
  21. // Clear all registered handlers before each test
  22. removeAllHandlers()
  23. vi.clearAllMocks()
  24. })
  25. describe('registerHandler', () => {
  26. it('should register a handler', () => {
  27. const handler = vi.fn()
  28. registerHandler('test-channel', handler)
  29. expect(ipcMain.handle).toHaveBeenCalledWith('test-channel', handler)
  30. expect(isHandlerRegistered('test-channel')).toBe(true)
  31. })
  32. it('should replace existing handler with same name', () => {
  33. const handler1 = vi.fn()
  34. const handler2 = vi.fn()
  35. registerHandler('test-channel', handler1)
  36. registerHandler('test-channel', handler2)
  37. expect(ipcMain.removeHandler).toHaveBeenCalledWith('test-channel')
  38. expect(ipcMain.handle).toHaveBeenCalledTimes(2)
  39. })
  40. })
  41. describe('registerHandlers', () => {
  42. it('should register multiple handlers', () => {
  43. const handlers = {
  44. 'channel-1': vi.fn(),
  45. 'channel-2': vi.fn(),
  46. 'channel-3': vi.fn()
  47. }
  48. registerHandlers(handlers)
  49. expect(ipcMain.handle).toHaveBeenCalledTimes(3)
  50. expect(isHandlerRegistered('channel-1')).toBe(true)
  51. expect(isHandlerRegistered('channel-2')).toBe(true)
  52. expect(isHandlerRegistered('channel-3')).toBe(true)
  53. })
  54. })
  55. describe('removeHandler', () => {
  56. it('should remove a registered handler', () => {
  57. const handler = vi.fn()
  58. registerHandler('test-channel', handler)
  59. removeHandler('test-channel')
  60. expect(ipcMain.removeHandler).toHaveBeenCalledWith('test-channel')
  61. expect(isHandlerRegistered('test-channel')).toBe(false)
  62. })
  63. it('should do nothing for non-existent handler', () => {
  64. removeHandler('non-existent')
  65. expect(ipcMain.removeHandler).not.toHaveBeenCalled()
  66. })
  67. })
  68. describe('removeAllHandlers', () => {
  69. it('should remove all registered handlers', () => {
  70. registerHandler('channel-1', vi.fn())
  71. registerHandler('channel-2', vi.fn())
  72. registerHandler('channel-3', vi.fn())
  73. removeAllHandlers()
  74. expect(ipcMain.removeHandler).toHaveBeenCalledTimes(3)
  75. expect(getRegisteredHandlers()).toHaveLength(0)
  76. })
  77. })
  78. describe('getRegisteredHandlers', () => {
  79. it('should return all registered handler names', () => {
  80. registerHandler('channel-1', vi.fn())
  81. registerHandler('channel-2', vi.fn())
  82. const handlers = getRegisteredHandlers()
  83. expect(handlers).toContain('channel-1')
  84. expect(handlers).toContain('channel-2')
  85. expect(handlers).toHaveLength(2)
  86. })
  87. it('should return empty array when no handlers registered', () => {
  88. const handlers = getRegisteredHandlers()
  89. expect(handlers).toHaveLength(0)
  90. })
  91. })
  92. describe('isHandlerRegistered', () => {
  93. it('should return true for registered handler', () => {
  94. registerHandler('test-channel', vi.fn())
  95. expect(isHandlerRegistered('test-channel')).toBe(true)
  96. })
  97. it('should return false for non-registered handler', () => {
  98. expect(isHandlerRegistered('non-existent')).toBe(false)
  99. })
  100. })
  101. })