Files
Epicnabbo-Catalogus-Updated…/src/lib/services/alert.test.ts
T

67 lines
1.5 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const insertValues = vi.hoisted(() => vi.fn());
vi.mock("@/lib/db", () => ({
db: {
insert: vi.fn(() => ({ values: insertValues })),
},
AlertLogs: {},
}));
vi.mock("@/lib/services/email", () => ({
sendMail: vi.fn().mockResolvedValue(true),
}));
vi.mock("@/env", () => ({
env: {
DISCORD_WEBHOOK_URL: "",
ALERT_EMAIL: "",
HOTEL_NAME: "TestHotel",
APP_URL: "http://localhost:3000",
NODE_ENV: "test",
},
}));
import { sendMail } from "@/lib/services/email";
import { sendAlert } from "./alert";
beforeEach(() => {
insertValues.mockReset();
vi.mocked(sendMail).mockReset();
vi.mocked(sendMail).mockResolvedValue(true);
insertValues.mockResolvedValue([{ insertId: 1 }]);
});
describe("sendAlert", () => {
it("persists an alert log entry", async () => {
await sendAlert({
type: "test",
severity: "warning",
message: "test alert",
});
expect(insertValues).toHaveBeenCalledWith(
expect.objectContaining({
type: "test",
severity: "warning",
message: "test alert",
isRead: false,
}),
);
});
it("returns logged=true when DB write succeeds", async () => {
const result = await sendAlert({
type: "test",
severity: "info",
message: "ok",
});
expect(result.logged).toBe(true);
});
it("does not call sendMail when ALERT_EMAIL is unset", async () => {
await sendAlert({ type: "test", severity: "error", message: "m" });
expect(sendMail).not.toHaveBeenCalled();
});
});