mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-15 06:52:04 +00:00
69 lines
2.2 KiB
TypeScript
69 lines
2.2 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
import type * as ModuleGateModule from "@/lib/modules/gate";
|
|
|
|
vi.mock("@/lib/db", () => ({
|
|
prisma: {
|
|
correlationPattern: { findMany: vi.fn() },
|
|
},
|
|
}));
|
|
vi.mock("@/lib/auth/session", () => ({ getSession: vi.fn() }));
|
|
vi.mock("@/lib/logging/transports", () => ({ emitIfSampled: vi.fn() }));
|
|
vi.mock("@/lib/db-compat", () => ({
|
|
ensureDbCompatibility: vi.fn().mockResolvedValue(undefined),
|
|
}));
|
|
vi.mock("@/lib/modules/gate", async (importOriginal) => ({
|
|
...(await importOriginal<typeof ModuleGateModule>()),
|
|
requireModuleEnabled: vi.fn(),
|
|
}));
|
|
vi.mock("next/headers", () => ({
|
|
headers: vi.fn(async () => ({ get: () => null })),
|
|
cookies: vi.fn(async () => ({
|
|
get: () => undefined,
|
|
set: () => {},
|
|
delete: () => {},
|
|
})),
|
|
}));
|
|
|
|
import { GET } from "../route";
|
|
import { getSession } from "@/lib/auth/session";
|
|
import { apiError } from "@/lib/api-response";
|
|
import { prisma } from "@/lib/db";
|
|
import { requireModuleEnabled } from "@/lib/modules/gate";
|
|
|
|
const SESSION = {
|
|
session: { id: "sess-1", expiresAt: new Date(Date.now() + 3_600_000) },
|
|
user: { id: "owner-1", username: "owner", role: "USER", locale: "en" },
|
|
};
|
|
|
|
beforeEach(() => {
|
|
vi.resetAllMocks();
|
|
vi.mocked(getSession).mockResolvedValue(SESSION as never);
|
|
vi.mocked(requireModuleEnabled).mockResolvedValue({ enabled: true });
|
|
vi.mocked(prisma.correlationPattern.findMany).mockResolvedValue([]);
|
|
});
|
|
|
|
describe("GET /api/insights/patterns", () => {
|
|
it("lists only the authenticated account's current patterns", async () => {
|
|
const response = await GET();
|
|
|
|
expect(response.status).toBe(200);
|
|
expect(prisma.correlationPattern.findMany).toHaveBeenCalledWith(
|
|
expect.objectContaining({
|
|
where: { userId: "owner-1", isCurrent: true },
|
|
}),
|
|
);
|
|
});
|
|
|
|
it("refuses the list when Insights is disabled", async () => {
|
|
vi.mocked(requireModuleEnabled).mockResolvedValueOnce({
|
|
enabled: false,
|
|
response: apiError('Module "insights" is not enabled', 403),
|
|
});
|
|
|
|
const response = await GET();
|
|
|
|
expect(response.status).toBe(403);
|
|
expect(prisma.correlationPattern.findMany).not.toHaveBeenCalled();
|
|
});
|
|
});
|