File size: 1,355 Bytes
0dbc9de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { expect, test } from "bun:test"
import { createPluginRuntime } from "../../src/plugin/runtime"

test("routes use the latest registration and restore previous registrations", () => {
  const runtime = createPluginRuntime()
  const first = () => "first"
  const second = () => "second"
  runtime.routes.register([{ name: "demo", render: first }])
  const dispose = runtime.routes.register([{ name: "demo", render: second }])

  expect(runtime.routes.get("demo")).toBe(second)
  dispose()
  expect(runtime.routes.get("demo")).toBe(first)
})

test("facade publishes and clears presentation state", async () => {
  const runtime = createPluginRuntime()
  runtime.update({
    commands: {
      async activate() {
        return true
      },
      async deactivate() {
        return true
      },
      async add() {
        return true
      },
      async install() {
        return { ok: true, dir: "/tmp", tui: true }
      },
    },
    status: [
      {
        id: "demo",
        source: "internal",
        spec: "demo",
        target: "demo",
        enabled: true,
        active: true,
      },
    ],
  })

  expect(await runtime.commands().activate("demo")).toBe(true)
  expect(runtime.status()).toHaveLength(1)
  runtime.clear()
  expect(await runtime.commands().activate("demo")).toBe(false)
  expect(runtime.status()).toEqual([])
})