feat : big update
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
vi.mock("server-only", () => ({}));
|
||||
|
||||
const { notifyPaidTicketDiscord } = await import("./discord");
|
||||
const ticketId = "11111111-1111-4111-8111-111111111111";
|
||||
|
||||
describe("paid commission Discord notification", () => {
|
||||
const fetchMock = vi.fn();
|
||||
const originalFetch = globalThis.fetch;
|
||||
const originalWebhookUrl = process.env.COMMISSION_DISCORD_WEBHOOK_URL;
|
||||
const originalAuthUrl = process.env.BETTER_AUTH_URL;
|
||||
|
||||
beforeEach(() => {
|
||||
process.env.COMMISSION_DISCORD_WEBHOOK_URL = "https://discord.example.test/webhook";
|
||||
process.env.BETTER_AUTH_URL = "https://guide.sudloh.com";
|
||||
globalThis.fetch = fetchMock as unknown as typeof fetch;
|
||||
fetchMock.mockReset().mockResolvedValue(new Response(null, { status: 204 }));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
if (originalWebhookUrl === undefined) delete process.env.COMMISSION_DISCORD_WEBHOOK_URL;
|
||||
else process.env.COMMISSION_DISCORD_WEBHOOK_URL = originalWebhookUrl;
|
||||
if (originalAuthUrl === undefined) delete process.env.BETTER_AUTH_URL;
|
||||
else process.env.BETTER_AUTH_URL = originalAuthUrl;
|
||||
globalThis.fetch = originalFetch;
|
||||
vi.restoreAllMocks();
|
||||
});
|
||||
|
||||
it("sends an embed linking to the admin ticket chat", async () => {
|
||||
await notifyPaidTicketDiscord(ticketId, 140);
|
||||
|
||||
expect(fetchMock).toHaveBeenCalledOnce();
|
||||
const [url, options] = fetchMock.mock.calls[0] as [string, RequestInit];
|
||||
expect(url).toBe("https://discord.example.test/webhook");
|
||||
expect(options.method).toBe("POST");
|
||||
const payload = JSON.parse(options.body as string);
|
||||
expect(payload.allowed_mentions).toEqual({ parse: [] });
|
||||
expect(payload.embeds[0]).toMatchObject({
|
||||
url: `https://guide.sudloh.com/admin/commission/${ticketId}`,
|
||||
description: expect.stringContaining("฿140"),
|
||||
});
|
||||
});
|
||||
|
||||
it("skips the request when no webhook is configured", async () => {
|
||||
delete process.env.COMMISSION_DISCORD_WEBHOOK_URL;
|
||||
await notifyPaidTicketDiscord(ticketId, 140);
|
||||
expect(fetchMock).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("does not turn a paid ticket into an error when Discord fails", async () => {
|
||||
vi.spyOn(console, "error").mockImplementation(() => undefined);
|
||||
fetchMock.mockRejectedValueOnce(new Error("network unavailable"));
|
||||
await expect(notifyPaidTicketDiscord(ticketId, 140)).resolves.toBeUndefined();
|
||||
expect(console.error).toHaveBeenCalledWith("Commission Discord notification failed");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user