import test from 'node:test'; import assert from 'node:assert/strict'; import { scanGiteaCandidates } from '../src/gitea.mjs'; test('finds subject fixes, paginates safely, and ignores body-only matches', async () => { const calls = [], fetchImpl = async (url) => { calls.push(url); if (url.includes('/git/commits/abc')) return new Response(JSON.stringify({ files: [{ filename: 'web/verify.go' }] })); return new Response( JSON.stringify([ { sha: 'abc', commit: { message: 'Fix DTLS verification\nDetailed body', committer: { date: '2026-07-20T00:00:00Z' }, }, }, { sha: 'def', commit: { message: 'Add feature\nfix mentioned only in body', committer: { date: '2026-07-19T00:00:00Z' }, }, }, ]), ); }; const out = await scanGiteaCandidates({ baseUrl: 'https://gitea.example', repositories: ['explewd/flit'], fetchImpl, }); assert.equal(out.candidates.length, 1); assert.equal(out.candidates[0].sha, 'abc'); assert.equal(out.candidates[0].paths, 'web/verify.go'); assert.equal(out.errors.length, 0); assert.ok(calls[0].includes('limit=50&page=1')); }); test('isolates invalid and failed repositories', async () => { const out = await scanGiteaCandidates({ baseUrl: 'https://gitea.example', repositories: ['bad', 'explewd/missing'], fetchImpl: async () => new Response('', { status: 404 }), }); assert.equal(out.candidates.length, 0); assert.equal(out.errors.length, 2); });