Barazo AppView backend
barazo.forum
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})