74 lines
2.0 KiB
JavaScript
74 lines
2.0 KiB
JavaScript
'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',
|
|
});
|
|
});
|
|
});
|