Plugins: auto-select exclusive slots
This commit is contained in:
96
src/plugins/slots.test.ts
Normal file
96
src/plugins/slots.test.ts
Normal file
@@ -0,0 +1,96 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import type { ClawdbotConfig } from "../config/config.js";
|
||||
import { applyExclusiveSlotSelection } from "./slots.js";
|
||||
|
||||
describe("applyExclusiveSlotSelection", () => {
|
||||
it("selects the slot and disables other entries for the same kind", () => {
|
||||
const config: ClawdbotConfig = {
|
||||
plugins: {
|
||||
slots: { memory: "memory-core" },
|
||||
entries: {
|
||||
"memory-core": { enabled: true },
|
||||
memory: { enabled: true },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const result = applyExclusiveSlotSelection({
|
||||
config,
|
||||
selectedId: "memory",
|
||||
selectedKind: "memory",
|
||||
registry: {
|
||||
plugins: [
|
||||
{ id: "memory-core", kind: "memory" },
|
||||
{ id: "memory", kind: "memory" },
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
expect(result.changed).toBe(true);
|
||||
expect(result.config.plugins?.slots?.memory).toBe("memory");
|
||||
expect(result.config.plugins?.entries?.["memory-core"]?.enabled).toBe(false);
|
||||
expect(result.warnings).toContain(
|
||||
'Exclusive slot "memory" switched from "memory-core" to "memory".',
|
||||
);
|
||||
expect(result.warnings).toContain(
|
||||
'Disabled other "memory" slot plugins: memory-core.',
|
||||
);
|
||||
});
|
||||
|
||||
it("does nothing when the slot already matches", () => {
|
||||
const config: ClawdbotConfig = {
|
||||
plugins: {
|
||||
slots: { memory: "memory" },
|
||||
entries: {
|
||||
memory: { enabled: true },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const result = applyExclusiveSlotSelection({
|
||||
config,
|
||||
selectedId: "memory",
|
||||
selectedKind: "memory",
|
||||
registry: { plugins: [{ id: "memory", kind: "memory" }] },
|
||||
});
|
||||
|
||||
expect(result.changed).toBe(false);
|
||||
expect(result.warnings).toHaveLength(0);
|
||||
expect(result.config).toBe(config);
|
||||
});
|
||||
|
||||
it("warns when the slot falls back to a default", () => {
|
||||
const config: ClawdbotConfig = {
|
||||
plugins: {
|
||||
entries: {
|
||||
memory: { enabled: true },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const result = applyExclusiveSlotSelection({
|
||||
config,
|
||||
selectedId: "memory",
|
||||
selectedKind: "memory",
|
||||
registry: { plugins: [{ id: "memory", kind: "memory" }] },
|
||||
});
|
||||
|
||||
expect(result.changed).toBe(true);
|
||||
expect(result.warnings).toContain(
|
||||
'Exclusive slot "memory" switched from "memory-core" to "memory".',
|
||||
);
|
||||
});
|
||||
|
||||
it("skips changes when no exclusive slot applies", () => {
|
||||
const config: ClawdbotConfig = {};
|
||||
const result = applyExclusiveSlotSelection({
|
||||
config,
|
||||
selectedId: "custom",
|
||||
});
|
||||
|
||||
expect(result.changed).toBe(false);
|
||||
expect(result.warnings).toHaveLength(0);
|
||||
expect(result.config).toBe(config);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user