/** @jsxImportSource react */
import { describe, expect, test } from "bun:test";
import { render } from "@react-email/render";
import StatusReportEmail from "../emails/status-report";
describe("Status Report Email - Unsubscribe Link in Body", () => {
const unsubscribeUrl =
"https://openstatus.openstatus.dev/unsubscribe/test-token";
test("should include unsubscribe link in email body when URL is provided", async () => {
const html = await render(
,
);
expect(html).toContain(unsubscribeUrl);
expect(html).toContain("Unsubscribe");
});
test("should not include unsubscribe section when URL is not provided", async () => {
const html = await render(
,
);
// Should not contain the unsubscribe text when no URL provided
expect(html).not.toContain("from these notifications");
});
test("should render unsubscribe link as clickable", async () => {
const html = await render(
,
);
// Check that the URL is in an href attribute
expect(html).toContain(`href="${unsubscribeUrl}"`);
});
test("should display unsubscribe link with proper styling", async () => {
const html = await render(
,
);
// Check for muted styling (gray color for footer)
expect(html).toContain("#6b7280");
});
});
describe("Status Report Email - Email Content Validation", () => {
test("should include all required email fields", async () => {
const props = {
pageTitle: "OpenStatus",
reportTitle: "API Outage",
status: "investigating" as const,
date: "2024-01-15T10:00:00.000Z",
message: "We are investigating the issue",
monitors: ["API", "Web"],
unsubscribeUrl: "https://openstatus.openstatus.dev/unsubscribe/test",
};
const html = await render();
expect(html).toContain(props.pageTitle);
expect(html).toContain(props.reportTitle);
expect(html).toContain(props.message);
expect(html).toContain("API");
expect(html).toContain("Web");
expect(html).toContain(props.unsubscribeUrl);
});
test("should handle all status types correctly", async () => {
const statuses = [
"investigating",
"identified",
"monitoring",
"resolved",
"maintenance",
] as const;
for (const status of statuses) {
const html = await render(
,
);
// Should render without errors and contain the status
// Note: status is rendered lowercase in HTML with text-transform: uppercase CSS
expect(html).toContain(status);
}
});
});