67 lines
1.5 KiB
TypeScript
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();
|
|
});
|
|
});
|