UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

54 lines (37 loc) 1.65 kB
import { PluginChannel } from '@lobehub/chat-plugin-sdk/client'; import { renderHook } from '@testing-library/react'; import { afterEach, describe, expect, it, vi } from 'vitest'; import { useOnPluginSettingsUpdate } from './pluginSettings'; describe('useOnPluginSettingsUpdate', () => { const mockCallback = vi.fn(); afterEach(() => { mockCallback.mockReset(); window.removeEventListener('message', () => {}); }); it('calls the callback when a PluginChannel updatePluginSettings message is received', () => { renderHook(() => useOnPluginSettingsUpdate(mockCallback)); const testSettings = { theme: 'dark', notifications: true }; const event = new MessageEvent('message', { data: { type: PluginChannel.updatePluginSettings, value: testSettings }, }); window.dispatchEvent(event); expect(mockCallback).toHaveBeenCalledWith(testSettings); }); it('does not call the callback for non-updatePluginSettings messages', () => { renderHook(() => useOnPluginSettingsUpdate(mockCallback)); const event = new MessageEvent('message', { data: { type: 'nonPluginSettingsUpdate', value: { irrelevant: true } }, }); window.dispatchEvent(event); expect(mockCallback).not.toHaveBeenCalled(); }); it('cleans up message event listener on unmount', () => { const { unmount } = renderHook(() => useOnPluginSettingsUpdate(mockCallback)); unmount(); const event = new MessageEvent('message', { data: { type: PluginChannel.updatePluginSettings, value: {} }, }); window.dispatchEvent(event); expect(mockCallback).not.toHaveBeenCalled(); }); });