Files
9router/tests/unit/deleted-models-enforcement.test.js
T

51 lines
1.7 KiB
JavaScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const isDeletedModel = vi.fn();
vi.mock("@/lib/db", () => ({ isDeletedModel }));
const { getDeletedModelResponse } = await import("../../src/sse/services/deletedModels.js");
describe("getDeletedModelResponse", () => {
beforeEach(() => {
isDeletedModel.mockReset();
});
it("allows a model that has not been permanently deleted", async () => {
isDeletedModel.mockResolvedValue(false);
await expect(getDeletedModelResponse("openai", "gpt-available")).resolves.toBeNull();
expect(isDeletedModel).toHaveBeenCalledWith("openai", "gpt-available");
});
it("blocks a permanently deleted model", async () => {
isDeletedModel.mockResolvedValue(true);
const response = await getDeletedModelResponse("openai", "gpt-deleted");
expect(response.status).toBe(404);
await expect(response.json()).resolves.toMatchObject({
error: {
code: "model_not_found",
message: "Model openai/gpt-deleted has been deleted by an administrator",
},
});
});
it("blocks permanently deleted thinking variants", async () => {
isDeletedModel.mockResolvedValue(true);
const response = await getDeletedModelResponse("codex", "gpt-deleted(high)");
expect(response.status).toBe(404);
expect(isDeletedModel).toHaveBeenCalledWith("codex", "gpt-deleted(high)");
});
it("fails closed when deleted-model storage cannot be read", async () => {
isDeletedModel.mockRejectedValue(new Error("database unavailable"));
const response = await getDeletedModelResponse("openai", "gpt-available");
expect(response.status).toBe(500);
});
});