const test = require('node:test'); const assert = require('node:assert'); const http = require('node:http'); const { bareHostname } = require('../src/utils/helpers.js'); const { checkGiteaConnection } = require('../src/git/apiHandler.js'); function listen(host) { return new Promise((resolve, reject) => { const server = http.createServer((req, res) => { res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ version: '1.22.0' })); }); server.once('error', reject); server.listen(0, host, () => resolve(server)); }); } test('bareHostname entfernt Klammern nur bei IPv6-Literalen', () => { assert.strictEqual(bareHostname(new URL('http://[2001:db8::1]:3000').hostname), '2001:db8::1'); assert.strictEqual(bareHostname('[::1]'), '::1'); assert.strictEqual(bareHostname('127.0.0.1'), '127.0.0.1'); assert.strictEqual(bareHostname('git.example.com'), 'git.example.com'); assert.strictEqual(bareHostname(undefined), ''); }); test('Gitea-Verbindung über IPv4', async () => { const server = await listen('127.0.0.1'); try { const r = await checkGiteaConnection({ url: `http://127.0.0.1:${server.address().port}` }); assert.strictEqual(r.ok, true); } finally { server.close(); } }); test('Gitea-Verbindung über IPv6', async (t) => { let server; try { server = await listen('::1'); } catch { return t.skip('IPv6-Loopback nicht verfügbar'); } try { const r = await checkGiteaConnection({ url: `http://[::1]:${server.address().port}` }); assert.strictEqual(r.ok, true); } finally { server.close(); } });