|
1 | 1 | import { describe, expect, it } from "vitest"; |
2 | 2 | import type { SessionEntry } from "../config/sessions.js"; |
3 | | -import { applyModelOverrideToSessionEntry } from "./model-overrides.js"; |
| 3 | +import { |
| 4 | + applyModelOverrideToSessionEntry, |
| 5 | + repairProviderWrappedModelOverride, |
| 6 | +} from "./model-overrides.js"; |
4 | 7 |
|
5 | 8 | function applyOpenAiSelection(entry: SessionEntry) { |
6 | 9 | return applyModelOverrideToSessionEntry({ |
@@ -173,3 +176,57 @@ describe("applyModelOverrideToSessionEntry", () => { |
173 | 176 | expect(withFlagEntry.liveModelSwitchPending).toBe(true); |
174 | 177 | }); |
175 | 178 | }); |
| 179 | + |
| 180 | +describe("repairProviderWrappedModelOverride", () => { |
| 181 | + it("restores a provider-wrapped override from aligned runtime model fields", () => { |
| 182 | + const before = Date.now() - 5_000; |
| 183 | + const entry: SessionEntry = { |
| 184 | + sessionId: "sess-openrouter-repair-runtime", |
| 185 | + updatedAt: before, |
| 186 | + providerOverride: "anthropic", |
| 187 | + modelOverride: "claude-haiku-4.5", |
| 188 | + modelOverrideSource: "user", |
| 189 | + modelProvider: "openrouter", |
| 190 | + model: "anthropic/claude-haiku-4.5", |
| 191 | + contextTokens: 200_000, |
| 192 | + }; |
| 193 | + |
| 194 | + const result = repairProviderWrappedModelOverride({ |
| 195 | + entry, |
| 196 | + defaultProvider: "openai", |
| 197 | + defaultModel: "gpt-5.4", |
| 198 | + }); |
| 199 | + |
| 200 | + expect(result.updated).toBe(true); |
| 201 | + expect(entry.providerOverride).toBe("openrouter"); |
| 202 | + expect(entry.modelOverride).toBe("anthropic/claude-haiku-4.5"); |
| 203 | + expect(entry.modelOverrideSource).toBe("user"); |
| 204 | + expect(entry.modelProvider).toBeUndefined(); |
| 205 | + expect(entry.model).toBeUndefined(); |
| 206 | + expect(entry.contextTokens).toBeUndefined(); |
| 207 | + expect((entry.updatedAt ?? 0) > before).toBe(true); |
| 208 | + }); |
| 209 | + |
| 210 | + it("clears a provider-wrapped override that matches the configured default", () => { |
| 211 | + const before = Date.now() - 5_000; |
| 212 | + const entry: SessionEntry = { |
| 213 | + sessionId: "sess-openrouter-repair-default", |
| 214 | + updatedAt: before, |
| 215 | + providerOverride: "anthropic", |
| 216 | + modelOverride: "claude-haiku-4.5", |
| 217 | + modelOverrideSource: "user", |
| 218 | + }; |
| 219 | + |
| 220 | + const result = repairProviderWrappedModelOverride({ |
| 221 | + entry, |
| 222 | + defaultProvider: "openrouter", |
| 223 | + defaultModel: "anthropic/claude-haiku-4.5", |
| 224 | + }); |
| 225 | + |
| 226 | + expect(result.updated).toBe(true); |
| 227 | + expect(entry.providerOverride).toBeUndefined(); |
| 228 | + expect(entry.modelOverride).toBeUndefined(); |
| 229 | + expect(entry.modelOverrideSource).toBeUndefined(); |
| 230 | + expect((entry.updatedAt ?? 0) > before).toBe(true); |
| 231 | + }); |
| 232 | +}); |
0 commit comments