import nodemailer from "nodemailer";
import { describe, expect, it, vi } from "vitest";
import type { Logger } from "../src/logger.js";
import { handleVerifyAccount } from "../src/tools/verify_account.js";
vi.mock("nodemailer", () => ({
default: {
createTransport: vi.fn(() => ({
verify: vi.fn().mockResolvedValue(true),
})),
},
}));
const testLogger: Logger = {
debug: () => undefined,
info: () => undefined,
warn: () => undefined,
error: () => undefined,
audit: () => undefined,
};
const parseResponse = (result: { content: Array<{ text: string }> }) => {
const first = result.content[0];
if (!first) {
throw new Error("Missing response content.");
}
return JSON.parse(first.text) as { summary: string; data: { status?: string } };
};
describe("mail_smtp_verify_account", () => {
it("returns error when config is missing", async () => {
const env = {};
const result = await handleVerifyAccount({ account_id: "default" }, env, testLogger);
expect(result.isError).toBe(true);
});
it("verifies account successfully", async () => {
const env = {
MAIL_SMTP_DEFAULT_HOST: "smtp.example.com",
MAIL_SMTP_DEFAULT_USER: "user",
MAIL_SMTP_DEFAULT_PASS: "pass",
};
const result = await handleVerifyAccount({ account_id: "default" }, env, testLogger);
const payload = parseResponse(result);
expect(payload.data.status).toBe("ok");
expect(nodemailer.createTransport).toHaveBeenCalled();
});
});