From df07a89b52ca4f4a6408dee5e88afdc4a91a1621 Mon Sep 17 00:00:00 2001 From: Shakker Date: Mon, 27 Apr 2026 16:25:04 +0100 Subject: [PATCH] test: cover manifest suppression precedence --- src/agents/model-suppression.test.ts | 57 ++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/agents/model-suppression.test.ts diff --git a/src/agents/model-suppression.test.ts b/src/agents/model-suppression.test.ts new file mode 100644 index 00000000000..bc93e41bde2 --- /dev/null +++ b/src/agents/model-suppression.test.ts @@ -0,0 +1,57 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; + +const mocks = vi.hoisted(() => ({ + resolveManifestBuiltInModelSuppression: vi.fn(), + resolveProviderBuiltInModelSuppression: vi.fn(), +})); + +vi.mock("../plugins/manifest-model-suppression.js", () => ({ + resolveManifestBuiltInModelSuppression: mocks.resolveManifestBuiltInModelSuppression, +})); + +vi.mock("../plugins/provider-runtime.js", () => ({ + resolveProviderBuiltInModelSuppression: mocks.resolveProviderBuiltInModelSuppression, +})); + +import { shouldSuppressBuiltInModel } from "./model-suppression.js"; + +describe("model suppression", () => { + beforeEach(() => { + mocks.resolveManifestBuiltInModelSuppression.mockReset(); + mocks.resolveProviderBuiltInModelSuppression.mockReset(); + }); + + it("uses manifest suppression before runtime hooks", () => { + mocks.resolveManifestBuiltInModelSuppression.mockReturnValueOnce({ + suppress: true, + errorMessage: "manifest suppression", + }); + + expect( + shouldSuppressBuiltInModel({ + provider: "openai", + id: "gpt-5.3-codex-spark", + config: {}, + }), + ).toBe(true); + + expect(mocks.resolveProviderBuiltInModelSuppression).not.toHaveBeenCalled(); + }); + + it("falls back to runtime hooks when no manifest suppression matches", () => { + mocks.resolveProviderBuiltInModelSuppression.mockReturnValueOnce({ + suppress: true, + errorMessage: "runtime suppression", + }); + + expect( + shouldSuppressBuiltInModel({ + provider: "openai", + id: "gpt-5.3-codex-spark", + config: {}, + }), + ).toBe(true); + + expect(mocks.resolveProviderBuiltInModelSuppression).toHaveBeenCalledOnce(); + }); +});