test.deploy/core/adapters/webhook.adapter.test.ts
test.deploy/core/adapters/webhook.adapter.test.ts is a file in Codebase Testing. 35 lines of code and 0 definitions.
import { ATTACHMENT_FIELD, PAYLOAD_FIELD } from "@banes-lab/deploy/configuration/constants/discord.constants.ts";
import type { Embed, WebhookMessage } from "@banes-lab/deploy/types/discord.types.ts";
import { afterEach, describe, expect, it, vi } from "vitest";
import { requestOf, stubFetch } from "../reporters/webhook.fixture.ts";
import { postWebhook } from "@banes-lab/deploy/core/adapters/webhook.adapter.ts";
const EMBED: Embed = { color: 0, fields: [], thumbnail: { url: "" }, timestamp: "", title: "t" };
const URL = "https://hooks.example.test/1";
describe("postWebhook", () => {
afterEach(() => {
vi.unstubAllGlobals();
});
it("posts json when the message carries no attachment", async () => {
const fetchMock = stubFetch();
const message: WebhookMessage = { attachment: null, content: "hi", embed: EMBED };
await postWebhook(URL, message);
const request = requestOf(fetchMock);
expect(request.method).toBe("POST");
expect(request.body).toContain("hi");
});
it("posts multipart form data when the message carries an attachment", async () => {
const fetchMock = stubFetch();
const message: WebhookMessage = { attachment: { content: "conf", name: "a.conf" }, content: "", embed: EMBED };
await postWebhook(URL, message);
const { body } = requestOf(fetchMock);
expect(body).toBeInstanceOf(FormData);
const fields = body instanceof FormData ? [...body.keys()] : [];
expect(fields).toContain(PAYLOAD_FIELD);
expect(fields).toContain(ATTACHMENT_FIELD);
});
it("throws on a non-ok response", async () => {
stubFetch(500, "Nope");
const message: WebhookMessage = { attachment: null, content: "", embed: EMBED };
await expect(postWebhook(URL, message)).rejects.toThrow("500 Nope");
});
});