Barazo AppView backend barazo.forum
at main 85 lines 2.5 kB view raw
1import { describe, expect, it, vi } from 'vitest' 2 3import { 4 resolveHookRef, 5 getPluginShortName, 6 executeHook, 7} from '../../../../src/lib/plugins/runtime.js' 8 9function makeLogger() { 10 return { 11 info: vi.fn(), 12 warn: vi.fn(), 13 error: vi.fn(), 14 debug: vi.fn(), 15 trace: vi.fn(), 16 fatal: vi.fn(), 17 child: vi.fn().mockReturnThis(), 18 level: 'info', 19 } as never 20} 21 22describe('resolveHookRef', () => { 23 it('parses module path and export name from hook reference', () => { 24 const result = resolveHookRef('./backend/hooks.js#onInstall') 25 expect(result).toEqual({ modulePath: './backend/hooks.js', exportName: 'onInstall' }) 26 }) 27 28 it('returns null for reference without hash separator', () => { 29 expect(resolveHookRef('./backend/hooks.js')).toBeNull() 30 }) 31 32 it('returns null for empty string', () => { 33 expect(resolveHookRef('')).toBeNull() 34 }) 35 36 it('handles hash at position 0 as invalid', () => { 37 expect(resolveHookRef('#onInstall')).toBeNull() 38 }) 39}) 40 41describe('getPluginShortName', () => { 42 it('strips @barazo/plugin- prefix', () => { 43 expect(getPluginShortName('@barazo/plugin-signatures')).toBe('signatures') 44 }) 45 46 it('strips barazo-plugin- prefix', () => { 47 expect(getPluginShortName('barazo-plugin-editor')).toBe('editor') 48 }) 49 50 it('returns name unchanged if no known prefix', () => { 51 expect(getPluginShortName('some-plugin')).toBe('some-plugin') 52 }) 53}) 54 55describe('executeHook', () => { 56 it('calls the hook function and returns true on success', async () => { 57 const hook = vi.fn().mockResolvedValue(undefined) 58 const logger = makeLogger() 59 const result = await executeHook('onEnable', hook, {} as never, logger, '@barazo/plugin-test') 60 expect(result).toBe(true) 61 expect(hook).toHaveBeenCalledWith({}) 62 }) 63 64 it('returns false and logs error when hook throws', async () => { 65 const hook = vi.fn().mockRejectedValue(new Error('boom')) 66 const logger = makeLogger() 67 const result = await executeHook('onEnable', hook, {} as never, logger, '@barazo/plugin-test') 68 expect(result).toBe(false) 69 expect(logger.error).toHaveBeenCalled() 70 }) 71 72 it('passes extra args to the hook for onProfileSync', async () => { 73 const hook = vi.fn().mockResolvedValue(undefined) 74 const logger = makeLogger() 75 await executeHook( 76 'onProfileSync', 77 hook, 78 {} as never, 79 logger, 80 '@barazo/plugin-test', 81 'did:plc:user1' 82 ) 83 expect(hook).toHaveBeenCalledWith({}, 'did:plc:user1') 84 }) 85})