ai_api / src /app /api /settings /__tests__ /settings.test.ts
Yogesh
initial deploy
cd8bd0a
Raw
History Blame Contribute Delete
3.26 kB
import { describe, it, expect, vi, beforeEach } from "vitest";
import { PATCH } from "../route";
// Mock the localDb functions used in the route
vi.mock("../../../../lib/localDb", () => {
const original = vi.importActual("../../../../lib/localDb");
return {
...original,
getSettings: vi.fn(),
updateSettings: vi.fn(),
};
});
import { getSettings, updateSettings } from "../../../../lib/localDb";
// Helper to create a Request with JSON body
function createPatchRequest(body: unknown) {
return new Request("http://localhost/api/settings", {
method: "PATCH",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
}
describe("PATCH /api/settings", () => {
beforeEach(() => {
vi.resetAllMocks();
// Default settings before each test
(getSettings as any).mockResolvedValue({
debugMode: false,
hiddenSidebarItems: [],
hiddenSidebarGroupLabels: [],
comboConfigMode: "guided",
});
// Mock updateSettings to merge updates into the original
(updateSettings as any).mockImplementation(async (updates: Record<string, unknown>) => {
const current = await (getSettings as any)();
return { ...current, ...updates };
});
});
it("toggles debugMode via PATCH", async () => {
const req = createPatchRequest({ debugMode: true });
const res = await PATCH(req as any);
expect(res.status).toBe(200);
const json = await res.json();
expect(json.debugMode).toBe(true);
// Ensure password is not leaked
expect(json).not.toHaveProperty("password");
// Verify DB update called with correct payload
expect(updateSettings).toHaveBeenCalledOnce();
const calledWith = (updateSettings as any).mock.calls[0][0];
expect(calledWith.debugMode).toBe(true);
});
it("updates hiddenSidebarItems via PATCH", async () => {
const req = createPatchRequest({ hiddenSidebarItems: [] });
const res = await PATCH(req as any);
expect(res.status).toBe(200);
const json = await res.json();
expect(json.hiddenSidebarItems).toEqual([]);
expect(updateSettings).toHaveBeenCalledOnce();
const calledWith = (updateSettings as any).mock.calls[0][0];
expect(calledWith.hiddenSidebarItems).toEqual([]);
});
it("updates hiddenSidebarGroupLabels via PATCH", async () => {
const req = createPatchRequest({ hiddenSidebarGroupLabels: ["logs", "audit"] });
const res = await PATCH(req as any);
expect(res.status).toBe(200);
const json = await res.json();
expect(json.hiddenSidebarGroupLabels).toEqual(["logs", "audit"]);
expect(updateSettings).toHaveBeenCalledOnce();
const calledWith = (updateSettings as any).mock.calls[0][0];
expect(calledWith.hiddenSidebarGroupLabels).toEqual(["logs", "audit"]);
});
it("updates comboConfigMode via PATCH", async () => {
const req = createPatchRequest({ comboConfigMode: "expert" });
const res = await PATCH(req as any);
expect(res.status).toBe(200);
const json = await res.json();
expect(json.comboConfigMode).toBe("expert");
expect(updateSettings).toHaveBeenCalledOnce();
const calledWith = (updateSettings as any).mock.calls[0][0];
expect(calledWith.comboConfigMode).toBe("expert");
});
});