Initial commit: GitHub-GCC WeCom bot for Gitea

This commit is contained in:
2026-09-17 17:43:45 +08:00
commit 74d9523652
18 changed files with 2908 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
import assert from "node:assert/strict";
import test from "node:test";
import { sendWeComTextMessage } from "../src/wecomSender.js";
import { testConfig } from "./helpers.js";
test("sends a WeCom text message to the configured webhook", async () => {
const requests: Array<{ url: string; init: RequestInit }> = [];
const fetchImpl = async (url: string | URL | Request, init?: RequestInit) => {
requests.push({ url: String(url), init: init ?? {} });
return new Response(JSON.stringify({ errcode: 0, errmsg: "ok" }), { status: 200 });
};
const result = await sendWeComTextMessage(testConfig(), "hello", fetchImpl as typeof fetch);
assert.deepEqual(result, { errcode: 0, errmsg: "ok" });
assert.equal(requests.length, 1);
assert.equal(requests[0]?.url, "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=test-key");
assert.deepEqual(JSON.parse(String(requests[0]?.init.body)), {
msgtype: "text",
text: {
content: "hello"
}
});
});
test("throws when WeCom webhook returns an API error", async () => {
const fetchImpl = async () =>
new Response(JSON.stringify({ errcode: 93000, errmsg: "invalid webhook" }), { status: 200 });
await assert.rejects(
() => sendWeComTextMessage(testConfig(), "hello", fetchImpl as typeof fetch),
/WeCom webhook failed: errcode=93000/
);
});
test("throws when WeCom webhook returns an HTTP error", async () => {
const fetchImpl = async () => new Response("bad request", { status: 400 });
await assert.rejects(
() => sendWeComTextMessage(testConfig(), "hello", fetchImpl as typeof fetch),
/WeCom webhook failed: HTTP 400/
);
});