mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-17 19:20:39 +09:00
98 lines
2.5 KiB
TypeScript
98 lines
2.5 KiB
TypeScript
|
|
// @vitest-environment node
|
||
|
|
|
||
|
|
import { describe, expect, it } from "vitest";
|
||
|
|
import { buildAssigneeAdapterOverrides } from "./issue-assignee-overrides";
|
||
|
|
|
||
|
|
describe("buildAssigneeAdapterOverrides", () => {
|
||
|
|
it("returns null for adapters that do not accept issue overrides", () => {
|
||
|
|
expect(
|
||
|
|
buildAssigneeAdapterOverrides({
|
||
|
|
adapterType: "process",
|
||
|
|
lane: "custom",
|
||
|
|
modelOverride: "anything",
|
||
|
|
thinkingEffortOverride: "high",
|
||
|
|
chrome: true,
|
||
|
|
}),
|
||
|
|
).toBeNull();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("primary lane sends nothing", () => {
|
||
|
|
expect(
|
||
|
|
buildAssigneeAdapterOverrides({
|
||
|
|
adapterType: "claude_local",
|
||
|
|
lane: "primary",
|
||
|
|
modelOverride: "",
|
||
|
|
thinkingEffortOverride: "",
|
||
|
|
chrome: false,
|
||
|
|
}),
|
||
|
|
).toBeNull();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("cheap lane sends modelProfile=cheap and no adapterConfig", () => {
|
||
|
|
expect(
|
||
|
|
buildAssigneeAdapterOverrides({
|
||
|
|
adapterType: "codex_local",
|
||
|
|
lane: "cheap",
|
||
|
|
modelOverride: "ignored",
|
||
|
|
thinkingEffortOverride: "high",
|
||
|
|
chrome: false,
|
||
|
|
}),
|
||
|
|
).toEqual({ modelProfile: "cheap" });
|
||
|
|
});
|
||
|
|
|
||
|
|
it("custom lane preserves explicit model + thinking effort + chrome overrides", () => {
|
||
|
|
expect(
|
||
|
|
buildAssigneeAdapterOverrides({
|
||
|
|
adapterType: "claude_local",
|
||
|
|
lane: "custom",
|
||
|
|
modelOverride: "claude-haiku-4-5",
|
||
|
|
thinkingEffortOverride: "high",
|
||
|
|
chrome: true,
|
||
|
|
}),
|
||
|
|
).toEqual({
|
||
|
|
adapterConfig: {
|
||
|
|
model: "claude-haiku-4-5",
|
||
|
|
effort: "high",
|
||
|
|
chrome: true,
|
||
|
|
},
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it("custom lane returns null when no fields are set", () => {
|
||
|
|
expect(
|
||
|
|
buildAssigneeAdapterOverrides({
|
||
|
|
adapterType: "codex_local",
|
||
|
|
lane: "custom",
|
||
|
|
modelOverride: "",
|
||
|
|
thinkingEffortOverride: "",
|
||
|
|
chrome: false,
|
||
|
|
}),
|
||
|
|
).toBeNull();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("custom lane uses adapter-specific keys for thinking effort", () => {
|
||
|
|
expect(
|
||
|
|
buildAssigneeAdapterOverrides({
|
||
|
|
adapterType: "codex_local",
|
||
|
|
lane: "custom",
|
||
|
|
modelOverride: "",
|
||
|
|
thinkingEffortOverride: "minimal",
|
||
|
|
chrome: false,
|
||
|
|
}),
|
||
|
|
).toEqual({
|
||
|
|
adapterConfig: { modelReasoningEffort: "minimal" },
|
||
|
|
});
|
||
|
|
expect(
|
||
|
|
buildAssigneeAdapterOverrides({
|
||
|
|
adapterType: "opencode_local",
|
||
|
|
lane: "custom",
|
||
|
|
modelOverride: "",
|
||
|
|
thinkingEffortOverride: "max",
|
||
|
|
chrome: false,
|
||
|
|
}),
|
||
|
|
).toEqual({
|
||
|
|
adapterConfig: { variant: "max" },
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|