test(ai-review): 補上安全與 Gitea 契約測試
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
'use strict';
|
||||
|
||||
const assert = require('node:assert/strict');
|
||||
const test = require('node:test');
|
||||
|
||||
const gitea = require('../src/lib/gitea');
|
||||
|
||||
function withFetchStub(handler, fn) {
|
||||
const originalFetch = global.fetch;
|
||||
const calls = [];
|
||||
global.fetch = async (url, options = {}) => {
|
||||
calls.push({ url, options });
|
||||
return handler(url, options);
|
||||
};
|
||||
return Promise.resolve()
|
||||
.then(() => fn(calls))
|
||||
.finally(() => {
|
||||
global.fetch = originalFetch;
|
||||
});
|
||||
}
|
||||
|
||||
function jsonResponse(data, ok = true, status = 200) {
|
||||
return {
|
||||
ok,
|
||||
status,
|
||||
async text() {
|
||||
return JSON.stringify(data);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
test('addIssueDependency 使用正確 endpoint、method 與 IssueMeta body', async () => {
|
||||
const ctx = {
|
||||
apiBase: 'https://gitea.example.test/api/v1',
|
||||
token: 'hidden',
|
||||
owner: 'owner',
|
||||
repo: 'repo',
|
||||
};
|
||||
|
||||
await withFetchStub(() => jsonResponse({ ok: true }), async (calls) => {
|
||||
await gitea.addIssueDependency(ctx, 12, 34);
|
||||
|
||||
assert.equal(calls.length, 1);
|
||||
assert.equal(calls[0].url, 'https://gitea.example.test/api/v1/repos/owner/repo/issues/12/dependencies');
|
||||
assert.equal(calls[0].options.method, 'POST');
|
||||
assert.equal(calls[0].options.headers.Authorization, 'token hidden');
|
||||
assert.deepEqual(JSON.parse(calls[0].options.body), {
|
||||
index: 34,
|
||||
owner: 'owner',
|
||||
repo: 'repo',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('createIssue 空 labels 不送出 labels 欄位', async () => {
|
||||
const ctx = {
|
||||
apiBase: 'https://gitea.example.test/api/v1',
|
||||
token: 'hidden',
|
||||
owner: 'owner',
|
||||
repo: 'repo',
|
||||
};
|
||||
|
||||
await withFetchStub(() => jsonResponse({ number: 5 }), async (calls) => {
|
||||
await gitea.createIssue(ctx, { title: 'title', body: 'body', labels: [] });
|
||||
|
||||
assert.equal(calls[0].url, 'https://gitea.example.test/api/v1/repos/owner/repo/issues');
|
||||
assert.equal(calls[0].options.method, 'POST');
|
||||
assert.deepEqual(JSON.parse(calls[0].options.body), {
|
||||
title: 'title',
|
||||
body: 'body',
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user