97 lines
2.6 KiB
TypeScript
97 lines
2.6 KiB
TypeScript
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);
|
|
});
|
|
});
|