mirror of
https://github.com/lobehub/lobehub
synced 2026-04-21 17:47:27 +00:00
44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
|
|
import { PluginChannel } from '@lobehub/chat-plugin-sdk/client';
|
||
|
|
import { renderHook } from '@testing-library/react';
|
||
|
|
import { afterEach, describe, expect, it, vi } from 'vitest';
|
||
|
|
|
||
|
|
import { useOnPluginStateUpdate } from './pluginState';
|
||
|
|
|
||
|
|
describe('useOnPluginStateUpdate', () => {
|
||
|
|
// Mock for the callback function to be used in tests
|
||
|
|
const mockCallback = vi.fn();
|
||
|
|
|
||
|
|
afterEach(() => {
|
||
|
|
// Reset the mock callback after each test
|
||
|
|
mockCallback.mockReset();
|
||
|
|
// Ensure no event listeners are left hanging after each test
|
||
|
|
window.removeEventListener('message', expect.any(Function));
|
||
|
|
});
|
||
|
|
|
||
|
|
it('calls the callback when a PluginChannel update message is received', () => {
|
||
|
|
renderHook(() => useOnPluginStateUpdate(mockCallback));
|
||
|
|
|
||
|
|
const testKey = 'testKey';
|
||
|
|
const testValue = 'testValue';
|
||
|
|
const event = new MessageEvent('message', {
|
||
|
|
data: { type: PluginChannel.updatePluginState, key: testKey, value: testValue },
|
||
|
|
});
|
||
|
|
|
||
|
|
window.dispatchEvent(event);
|
||
|
|
|
||
|
|
expect(mockCallback).toHaveBeenCalledWith(testKey, testValue);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('does not call the callback for non-PluginChannel messages', () => {
|
||
|
|
renderHook(() => useOnPluginStateUpdate(mockCallback));
|
||
|
|
|
||
|
|
const event = new MessageEvent('message', {
|
||
|
|
data: { type: 'nonPluginMessage', key: 'key', value: 'value' },
|
||
|
|
});
|
||
|
|
|
||
|
|
window.dispatchEvent(event);
|
||
|
|
|
||
|
|
expect(mockCallback).not.toHaveBeenCalled();
|
||
|
|
});
|
||
|
|
});
|