mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-12 01:03:43 +00:00
refactor(test): dedupe model directive persist setup
This commit is contained in:
@@ -94,22 +94,31 @@ describe("handleDirectiveOnly model persist behavior (fixes #1435)", () => {
|
|||||||
{ provider: "anthropic", id: "claude-opus-4-5" },
|
{ provider: "anthropic", id: "claude-opus-4-5" },
|
||||||
{ provider: "openai", id: "gpt-4o" },
|
{ provider: "openai", id: "gpt-4o" },
|
||||||
];
|
];
|
||||||
|
const sessionKey = "agent:main:dm:1";
|
||||||
|
const storePath = "/tmp/sessions.json";
|
||||||
|
|
||||||
it("shows success message when session state is available", async () => {
|
type HandleParams = Parameters<typeof handleDirectiveOnly>[0];
|
||||||
const directives = parseInlineDirectives("/model openai/gpt-4o");
|
|
||||||
const sessionEntry: SessionEntry = {
|
function createSessionEntry(overrides?: Partial<SessionEntry>): SessionEntry {
|
||||||
|
return {
|
||||||
sessionId: "s1",
|
sessionId: "s1",
|
||||||
updatedAt: Date.now(),
|
updatedAt: Date.now(),
|
||||||
|
...overrides,
|
||||||
};
|
};
|
||||||
const sessionStore = { "agent:main:dm:1": sessionEntry };
|
}
|
||||||
|
|
||||||
const result = await handleDirectiveOnly({
|
function createHandleParams(overrides: Partial<HandleParams>): HandleParams {
|
||||||
|
const entryOverride = overrides.sessionEntry;
|
||||||
|
const storeOverride = overrides.sessionStore;
|
||||||
|
const entry = entryOverride ?? createSessionEntry();
|
||||||
|
const store = storeOverride ?? ({ [sessionKey]: entry } as const);
|
||||||
|
const { sessionEntry: _ignoredEntry, sessionStore: _ignoredStore, ...rest } = overrides;
|
||||||
|
|
||||||
|
return {
|
||||||
cfg: baseConfig(),
|
cfg: baseConfig(),
|
||||||
directives,
|
directives: rest.directives ?? parseInlineDirectives(""),
|
||||||
sessionEntry,
|
sessionKey,
|
||||||
sessionStore,
|
storePath,
|
||||||
sessionKey: "agent:main:dm:1",
|
|
||||||
storePath: "/tmp/sessions.json",
|
|
||||||
elevatedEnabled: false,
|
elevatedEnabled: false,
|
||||||
elevatedAllowed: false,
|
elevatedAllowed: false,
|
||||||
defaultProvider: "anthropic",
|
defaultProvider: "anthropic",
|
||||||
@@ -122,7 +131,21 @@ describe("handleDirectiveOnly model persist behavior (fixes #1435)", () => {
|
|||||||
model: "claude-opus-4-5",
|
model: "claude-opus-4-5",
|
||||||
initialModelLabel: "anthropic/claude-opus-4-5",
|
initialModelLabel: "anthropic/claude-opus-4-5",
|
||||||
formatModelSwitchEvent: (label) => `Switched to ${label}`,
|
formatModelSwitchEvent: (label) => `Switched to ${label}`,
|
||||||
});
|
...rest,
|
||||||
|
sessionEntry: entry,
|
||||||
|
sessionStore: store,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
it("shows success message when session state is available", async () => {
|
||||||
|
const directives = parseInlineDirectives("/model openai/gpt-4o");
|
||||||
|
const sessionEntry = createSessionEntry();
|
||||||
|
const result = await handleDirectiveOnly(
|
||||||
|
createHandleParams({
|
||||||
|
directives,
|
||||||
|
sessionEntry,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
expect(result?.text).toContain("Model set to");
|
expect(result?.text).toContain("Model set to");
|
||||||
expect(result?.text).toContain("openai/gpt-4o");
|
expect(result?.text).toContain("openai/gpt-4o");
|
||||||
@@ -131,32 +154,13 @@ describe("handleDirectiveOnly model persist behavior (fixes #1435)", () => {
|
|||||||
|
|
||||||
it("shows no model message when no /model directive", async () => {
|
it("shows no model message when no /model directive", async () => {
|
||||||
const directives = parseInlineDirectives("hello world");
|
const directives = parseInlineDirectives("hello world");
|
||||||
const sessionEntry: SessionEntry = {
|
const sessionEntry = createSessionEntry();
|
||||||
sessionId: "s1",
|
const result = await handleDirectiveOnly(
|
||||||
updatedAt: Date.now(),
|
createHandleParams({
|
||||||
};
|
directives,
|
||||||
const sessionStore = { "agent:main:dm:1": sessionEntry };
|
sessionEntry,
|
||||||
|
}),
|
||||||
const result = await handleDirectiveOnly({
|
);
|
||||||
cfg: baseConfig(),
|
|
||||||
directives,
|
|
||||||
sessionEntry,
|
|
||||||
sessionStore,
|
|
||||||
sessionKey: "agent:main:dm:1",
|
|
||||||
storePath: "/tmp/sessions.json",
|
|
||||||
elevatedEnabled: false,
|
|
||||||
elevatedAllowed: false,
|
|
||||||
defaultProvider: "anthropic",
|
|
||||||
defaultModel: "claude-opus-4-5",
|
|
||||||
aliasIndex: baseAliasIndex(),
|
|
||||||
allowedModelKeys,
|
|
||||||
allowedModelCatalog,
|
|
||||||
resetModelOverride: false,
|
|
||||||
provider: "anthropic",
|
|
||||||
model: "claude-opus-4-5",
|
|
||||||
initialModelLabel: "anthropic/claude-opus-4-5",
|
|
||||||
formatModelSwitchEvent: (label) => `Switched to ${label}`,
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(result?.text ?? "").not.toContain("Model set to");
|
expect(result?.text ?? "").not.toContain("Model set to");
|
||||||
expect(result?.text ?? "").not.toContain("failed");
|
expect(result?.text ?? "").not.toContain("failed");
|
||||||
@@ -164,33 +168,15 @@ describe("handleDirectiveOnly model persist behavior (fixes #1435)", () => {
|
|||||||
|
|
||||||
it("persists thinkingLevel=off (does not clear)", async () => {
|
it("persists thinkingLevel=off (does not clear)", async () => {
|
||||||
const directives = parseInlineDirectives("/think off");
|
const directives = parseInlineDirectives("/think off");
|
||||||
const sessionEntry: SessionEntry = {
|
const sessionEntry = createSessionEntry({ thinkingLevel: "low" });
|
||||||
sessionId: "s1",
|
const sessionStore = { [sessionKey]: sessionEntry };
|
||||||
updatedAt: Date.now(),
|
const result = await handleDirectiveOnly(
|
||||||
thinkingLevel: "low",
|
createHandleParams({
|
||||||
};
|
directives,
|
||||||
const sessionStore = { "agent:main:dm:1": sessionEntry };
|
sessionEntry,
|
||||||
|
sessionStore,
|
||||||
const result = await handleDirectiveOnly({
|
}),
|
||||||
cfg: baseConfig(),
|
);
|
||||||
directives,
|
|
||||||
sessionEntry,
|
|
||||||
sessionStore,
|
|
||||||
sessionKey: "agent:main:dm:1",
|
|
||||||
storePath: "/tmp/sessions.json",
|
|
||||||
elevatedEnabled: false,
|
|
||||||
elevatedAllowed: false,
|
|
||||||
defaultProvider: "anthropic",
|
|
||||||
defaultModel: "claude-opus-4-5",
|
|
||||||
aliasIndex: baseAliasIndex(),
|
|
||||||
allowedModelKeys,
|
|
||||||
allowedModelCatalog,
|
|
||||||
resetModelOverride: false,
|
|
||||||
provider: "anthropic",
|
|
||||||
model: "claude-opus-4-5",
|
|
||||||
initialModelLabel: "anthropic/claude-opus-4-5",
|
|
||||||
formatModelSwitchEvent: (label) => `Switched to ${label}`,
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(result?.text ?? "").not.toContain("failed");
|
expect(result?.text ?? "").not.toContain("failed");
|
||||||
expect(sessionEntry.thinkingLevel).toBe("off");
|
expect(sessionEntry.thinkingLevel).toBe("off");
|
||||||
|
|||||||
Reference in New Issue
Block a user