Files
ai-pull-request/app/lib/gitea.test.js
T

79 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { test, afterEach } from 'node:test';
import assert from 'node:assert/strict';
import { GiteaClient } from './gitea.js';
const realFetch = globalThis.fetch;
afterEach(() => { globalThis.fetch = realFetch; });
function makeClient() {
return new GiteaClient({
serverUrl: 'https://gitea.example',
owner: 'o',
repo: 'r',
token: 't',
});
}
/** 建立假的 fetch,依序回傳給定的回應。 */
function stubFetch(responses) {
const calls = [];
globalThis.fetch = async (url, opts) => {
calls.push({ url, opts });
const r = responses.shift();
return {
ok: r.status >= 200 && r.status < 300,
status: r.status,
text: async () => (r.body == null ? '' : JSON.stringify(r.body)),
};
};
return calls;
}
test('createPull: 成功建立回傳 created=true', async () => {
stubFetch([{ status: 201, body: { number: 7, html_url: 'u' } }]);
const { pull, created } = await makeClient().createPull({
head: 'feature', base: 'develop', title: 't', body: 'b',
});
assert.equal(created, true);
assert.equal(pull.number, 7);
});
test('createPull: 422 已存在時回查既有 PRcreated=false', async () => {
stubFetch([
{ status: 422, body: { message: 'already exists' } },
{ status: 200, body: [
{ number: 3, head: { ref: 'feature' }, base: { ref: 'develop' } },
] },
]);
const { pull, created } = await makeClient().createPull({
head: 'feature', base: 'develop', title: 't', body: 'b',
});
assert.equal(created, false);
assert.equal(pull.number, 3);
});
test('createPull: 422 但查無對應 PR 時丟出錯誤', async () => {
stubFetch([
{ status: 422, body: { message: 'bad' } },
{ status: 200, body: [] },
]);
await assert.rejects(
() => makeClient().createPull({ head: 'feature', base: 'develop', title: 't', body: 'b' }),
/建立 PR 失敗/,
);
});
test('createPull: 其他錯誤狀態碼直接丟出', async () => {
stubFetch([{ status: 500, body: { message: '伺服器錯誤' } }]);
await assert.rejects(
() => makeClient().createPull({ head: 'feature', base: 'develop', title: 't', body: 'b' }),
/建立 PR 失敗 \(500\)/,
);
});
test('findOpenPull: 非陣列回應回傳 null', async () => {
stubFetch([{ status: 200, body: { unexpected: true } }]);
const r = await makeClient().findOpenPull('feature', 'develop');
assert.equal(r, null);
});