@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
text/typescript
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();
});
});