File size: 1,644 Bytes
5cb63c1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
// Plugin management descriptor tests keep read/admin scopes and write budgets explicit.
import { describe, expect, it } from "vitest";
import type { GatewayRequestHandler } from "../server-methods/types.js";
import { createCoreGatewayMethodDescriptors } from "./core-descriptors.js";

const handler: GatewayRequestHandler = ({ respond }) => respond(true, { ok: true });

describe("plugin management gateway descriptors", () => {
  it("keeps catalog reads separate from control-plane mutations", () => {
    const descriptors = createCoreGatewayMethodDescriptors({
      "plugins.list": handler,
      "plugins.inspect": handler,
      "plugins.search": handler,
      "plugins.install": handler,
      "plugins.setEnabled": handler,
      "plugins.uninstall": handler,
      "plugins.refresh": handler,
    });
    const byName = new Map(descriptors.map((descriptor) => [descriptor.name, descriptor]));

    expect(byName.get("plugins.list")?.scope).toBe("operator.read");
    expect(byName.get("plugins.inspect")?.scope).toBe("operator.read");
    expect(byName.get("plugins.search")?.scope).toBe("operator.read");
    expect(byName.get("plugins.install")).toMatchObject({
      scope: "operator.admin",
      controlPlaneWrite: true,
    });
    expect(byName.get("plugins.setEnabled")).toMatchObject({
      scope: "operator.admin",
      controlPlaneWrite: true,
    });
    expect(byName.get("plugins.uninstall")).toMatchObject({
      scope: "operator.admin",
      controlPlaneWrite: true,
    });
    expect(byName.get("plugins.refresh")).toMatchObject({
      scope: "operator.admin",
      controlPlaneWrite: true,
    });
  });
});