* test: add web helpers tests * fix: coverage report * test: add more tests * test: add more generated tests * chore: add more tests * test: add more tests
132 lines
4.0 KiB
TypeScript
132 lines
4.0 KiB
TypeScript
// ExtensionManager.test.ts
|
|
import { AIEngine, BaseExtension, ExtensionTypeEnum } from '@janhq/core'
|
|
import { ExtensionManager } from './ExtensionManager'
|
|
import Extension from './Extension'
|
|
|
|
class TestExtension extends BaseExtension {
|
|
onLoad(): void {}
|
|
onUnload(): void {}
|
|
}
|
|
class TestEngine extends AIEngine {
|
|
provider: string = 'testEngine'
|
|
onUnload(): void {}
|
|
}
|
|
|
|
describe('ExtensionManager', () => {
|
|
let manager: ExtensionManager
|
|
|
|
beforeEach(() => {
|
|
manager = new ExtensionManager()
|
|
})
|
|
|
|
it('should register an extension', () => {
|
|
const extension = new TestExtension('', '')
|
|
manager.register('testExtension', extension)
|
|
expect(manager.getByName('testExtension')).toBe(extension)
|
|
})
|
|
|
|
it('should register an AI engine', () => {
|
|
const extension = { provider: 'testEngine' } as unknown as BaseExtension
|
|
manager.register('testExtension', extension)
|
|
expect(manager.getEngine('testEngine')).toBe(extension)
|
|
})
|
|
|
|
it('should retrieve an extension by type', () => {
|
|
const extension = new TestExtension('', '')
|
|
jest.spyOn(extension, 'type').mockReturnValue(ExtensionTypeEnum.Assistant)
|
|
manager.register('testExtension', extension)
|
|
expect(manager.get(ExtensionTypeEnum.Assistant)).toBe(extension)
|
|
})
|
|
|
|
it('should retrieve an extension by name', () => {
|
|
const extension = new TestExtension('', '')
|
|
manager.register('testExtension', extension)
|
|
expect(manager.getByName('testExtension')).toBe(extension)
|
|
})
|
|
|
|
it('should retrieve all extensions', () => {
|
|
const extension1 = new TestExtension('', '')
|
|
const extension2 = new TestExtension('', '')
|
|
manager.register('testExtension1', extension1)
|
|
manager.register('testExtension2', extension2)
|
|
expect(manager.getAll()).toEqual([extension1, extension2])
|
|
})
|
|
|
|
it('should retrieve an engine by name', () => {
|
|
const engine = new TestEngine('', '')
|
|
manager.register('anything', engine)
|
|
expect(manager.getEngine('testEngine')).toBe(engine)
|
|
})
|
|
|
|
it('should load all extensions', () => {
|
|
const extension = new TestExtension('', '')
|
|
jest.spyOn(extension, 'onLoad')
|
|
manager.register('testExtension', extension)
|
|
manager.load()
|
|
expect(extension.onLoad).toHaveBeenCalled()
|
|
})
|
|
|
|
it('should unload all extensions', () => {
|
|
const extension = new TestExtension('', '')
|
|
jest.spyOn(extension, 'onUnload')
|
|
manager.register('testExtension', extension)
|
|
manager.unload()
|
|
expect(extension.onUnload).toHaveBeenCalled()
|
|
})
|
|
|
|
it('should list all extensions', () => {
|
|
const extension1 = new TestExtension('', '')
|
|
const extension2 = new TestExtension('', '')
|
|
manager.register('testExtension1', extension1)
|
|
manager.register('testExtension2', extension2)
|
|
expect(manager.listExtensions()).toEqual([extension1, extension2])
|
|
})
|
|
|
|
it('should retrieve active extensions', async () => {
|
|
const extension = new Extension(
|
|
'url',
|
|
'name',
|
|
'productName',
|
|
true,
|
|
'description',
|
|
'version'
|
|
)
|
|
window.core = {
|
|
api: {
|
|
getActiveExtensions: jest.fn(),
|
|
},
|
|
}
|
|
jest
|
|
.spyOn(window.core.api, 'getActiveExtensions')
|
|
.mockResolvedValue([extension])
|
|
const activeExtensions = await manager.getActive()
|
|
expect(activeExtensions).toEqual([extension])
|
|
})
|
|
|
|
it('should register all active extensions', async () => {
|
|
const extension = new Extension(
|
|
'url',
|
|
'name',
|
|
'productName',
|
|
true,
|
|
'description',
|
|
'version'
|
|
)
|
|
jest.spyOn(manager, 'getActive').mockResolvedValue([extension])
|
|
jest.spyOn(manager, 'activateExtension').mockResolvedValue()
|
|
await manager.registerActive()
|
|
expect(manager.activateExtension).toHaveBeenCalledWith(extension)
|
|
})
|
|
|
|
it('should uninstall extensions', async () => {
|
|
window.core = {
|
|
api: {
|
|
uninstallExtension: jest.fn(),
|
|
},
|
|
}
|
|
jest.spyOn(window.core.api, 'uninstallExtension').mockResolvedValue(true)
|
|
const result = await manager.uninstall(['testExtension'])
|
|
expect(result).toBe(true)
|
|
})
|
|
})
|