Repository navigation
Expand file tree
/
Copy pathindex.test.ts
More file actions
71 lines (66 loc) · 2.64 KB
/
Copy pathindex.test.ts
File metadata and controls
71 lines (66 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { describe, expect, it, vi } from 'vitest'
import { register } from './index.js'
function createRegistry() {
const calls = {}
const record = (key) => (value) => {
calls[key] = [...(calls[key] ?? []), value]
}
const registry = {
runtime: { mode: 'production', configDirectory: '/tmp' },
context: {
id: 'openfox-hello-plugin',
version: '1.0.0',
runtime: { mode: 'production', configDirectory: '/tmp' },
logger: { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() },
storage: { get: () => undefined, set: vi.fn() },
settings: () => ({ greeting: 'Hi' }),
notify: vi.fn(),
publish: vi.fn(),
},
registerAuth: record('auth'),
registerTransport: record('transport'),
registerPreset: record('preset'),
registerModelMetadataProvider: record('modelMetadata'),
registerTool: record('tool'),
registerCommand: record('command'),
registerSkillSource: record('skillSource'),
registerSettings: record('settings'),
registerUiAction: record('uiAction'),
registerUiBadge: record('uiBadge'),
registerUiPanel: record('uiPanel'),
registerHook: (event, handler) => record(`hook:${event}`)(handler),
registerTransitionHandler: (name, handler) => record(`transition:${name}`)(handler),
registerRpc: (method, handler) => record(`rpc:${method}`)(handler),
registerAsset: record('asset'),
}
return { registry, calls }
}
describe('hello plugin', () => {
it('registers every documented contribution point', () => {
const { registry, calls } = createRegistry()
register(registry as never)
expect(calls.tool).toHaveLength(1)
expect(calls.command).toHaveLength(1)
expect(calls.settings).toHaveLength(1)
expect(calls.uiAction).toHaveLength(1)
expect(calls.uiPanel).toHaveLength(1)
expect(calls['rpc:notify']).toHaveLength(1)
expect(calls['hook:turn.completed']).toHaveLength(1)
expect(calls['transition:hello_plugin_never']).toHaveLength(1)
})
it('greets with the configured setting', async () => {
const { registry, calls } = createRegistry()
register(registry as never)
const tool = calls.tool[0]
const result = await tool.execute({ name: 'Conrad' })
expect(result).toEqual({ success: true, output: 'Hi, Conrad!' })
})
it('emits a notification from the RPC method', async () => {
const { registry, calls } = createRegistry()
register(registry as never)
const handler = calls['rpc:notify'][0]
await expect(handler()).resolves.toBe('ok')
expect(registry.context.notify).toHaveBeenCalled()
expect(registry.context.publish).toHaveBeenCalledWith('hello-panel', 'greeting', 'Hi')
})
})