import { PluginManager } from '../plugin-manager'; describe('PluginManager', () => { let pluginManager: PluginManager; const mockFn = jest.fn(); beforeEach(() => { pluginManager = new PluginManager(); }); it('should create a PluginManager instance', () => { expect(pluginManager).toBeInstanceOf(PluginManager); }); it('should register plugins correctly', () => { const pluginList = [ { componentName: 'TestComponent1', plugins: [ { name: 'plugin1', sourceCode: mockFn, lowCode: {}, }, { name: 'plugin1', sourceCode: mockFn, lowCode: {}, }, { name: 'plugin2', sourceCode: mockFn, lowCode: {}, }, ], }, { componentName: 'TestComponent2', plugins: [ { name: 'plugin3', sourceCode: mockFn, lowCode: {}, }, ], }, ]; pluginManager.registerPlugin(pluginList); // duplicate register pluginManager.registerPlugin(pluginList); expect(window.CN_UI_PLUGIN).toEqual([ { name: 'TestComponent1', plugins: [ { name: 'plugin1', method: mockFn, lowCodeConfig: {}, }, { name: 'plugin2', method: mockFn, lowCodeConfig: {}, }, ], }, { name: 'TestComponent2', plugins: [ { name: 'plugin3', method: mockFn, lowCodeConfig: {}, }, ], }, ]); }); it('should load plugins for a specific component correctly', () => { const componentName = 'TestComponent1'; const expectedPlugins = [ { name: 'plugin1', method: mockFn, lowCodeConfig: {}, }, { name: 'plugin2', method: mockFn, lowCodeConfig: {}, }, ]; pluginManager.loadPlugins(componentName); expect(pluginManager.registeredPlugin[componentName]).toEqual( expectedPlugins, ); }); it('should load plugins for multi component correctly', () => { const expectedPlugins = [ { name: 'plugin1', method: mockFn, lowCodeConfig: {}, }, { name: 'plugin2', method: mockFn, lowCodeConfig: {}, }, ]; const expectedPlugins2 = [ { name: 'plugin3', method: mockFn, lowCodeConfig: {}, }, ]; pluginManager.loadPlugins(['TestComponent1', 'TestComponent2']); expect(pluginManager.registeredPlugin.TestComponent1).toEqual( expectedPlugins, ); expect(pluginManager.registeredPlugin.TestComponent2).toEqual( expectedPlugins2, ); }); it('should get plugin by plugin name correctly', () => { const pluginName = 'plugin2'; const componentName = 'TestComponent1'; const expectedPlugin = { name: 'plugin2', method: mockFn, lowCodeConfig: {}, }; const plugin = pluginManager.getPluginByPluginName( pluginName, componentName, ); expect(plugin).toEqual(expectedPlugin); }); });