Files
Git-Manager-Gui/__tests__/releaseAssist.test.js
T
2026-10-22 09:13:16 +00:00

65 lines
3.2 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert');
const {
parseVersionFromFileName, compareVersions, parseSidecar, checkNewTag, buildReleaseBody
} = require('../src/features/releaseAssist.js');
const HASH = '5ca7f0c680b6d73a92eadb5e90f8164f7f3fa52071ffaac54803b0e5ec95f35d';
test('Version aus dem Dateinamen', () => {
assert.strictEqual(parseVersionFromFileName('Git-Manager-GUI-Setup-2.2.1.exe'), '2.2.1');
assert.strictEqual(parseVersionFromFileName('Git Manager GUI Setup 2.1.10.exe'), '2.1.10');
assert.strictEqual(parseVersionFromFileName('setup.exe'), null);
assert.strictEqual(parseVersionFromFileName(null), null);
});
test('Versionen werden numerisch verglichen, nicht als Text', () => {
assert.strictEqual(compareVersions('2.2.1', '2.2.0'), 1);
assert.strictEqual(compareVersions('v2.10.0', 'v2.9.9'), 1);
assert.strictEqual(compareVersions('2.2.1', 'v2.2.1'), 0);
assert.strictEqual(compareVersions('2.1.9', '2.2.0'), -1);
assert.deepStrictEqual(['v2.10.0', 'v2.9.0', 'v2.2.1'].sort(compareVersions), ['v2.2.1', 'v2.9.0', 'v2.10.0']);
});
test('Sidecar-Datei: Hash wird gefunden, auch mit Großbuchstaben', () => {
assert.strictEqual(parseSidecar(`${HASH} Git-Manager-GUI-Setup-2.2.1.exe\n`), HASH);
assert.strictEqual(parseSidecar(HASH.toUpperCase()), HASH);
assert.strictEqual(parseSidecar('kein Hash'), null);
assert.strictEqual(parseSidecar('abc123'), null);
});
test('Neuer Tag: Format, Duplikat und Reihenfolge werden geprüft', () => {
const releases = [{ tag_name: 'v2.2.0' }, { tag_name: 'v2.1.9' }];
assert.strictEqual(checkNewTag('v2.2.1', releases).ok, true);
assert.strictEqual(checkNewTag('2.2.1', releases).ok, true);
assert.strictEqual(checkNewTag('v2.10.0', releases).ok, true);
assert.match(checkNewTag('release-2', releases).reason, /Version wie v2\.2\.1/);
assert.match(checkNewTag('v2.2.0', releases).reason, /gibt es schon/);
assert.match(checkNewTag('V2.2.0', releases).reason, /gibt es schon/);
assert.match(checkNewTag('v2.1.5', releases).reason, /nicht neuer/);
});
test('Neuer Tag: ohne vorhandene Releases ist jede Version erlaubt', () => {
assert.strictEqual(checkNewTag('v1.0.0', []).ok, true);
assert.strictEqual(checkNewTag('v1.0.0', null).ok, true);
assert.strictEqual(checkNewTag('v1.0.0', [{ tag_name: 'nightly' }]).ok, true);
});
test('Release-Text: Prüfsummen im Format, das der Updater liest', () => {
const body = buildReleaseBody('## Neu\n\n- Abbrechen\n', [{ name: 'Git-Manager-GUI-Setup-2.2.1.exe', sha256: HASH.toUpperCase() }]);
assert.match(body, /^## Neu/);
assert.ok(body.includes(`- Git-Manager-GUI-Setup-2.2.1.exe: ${HASH}`));
// genau so liest updater.js die Zeile
const line = body.split('\n').find((l) => l.toLowerCase().includes('git-manager-gui-setup-2.2.1.exe') && /\b[a-f0-9]{64}\b/i.test(l));
assert.ok(line);
assert.strictEqual(line.match(/\b([a-fA-F0-9]{64})\b/)[1], HASH);
});
test('Release-Text: ungültige Prüfsummen und leere Notizen', () => {
assert.strictEqual(buildReleaseBody('Nur Text', [{ name: 'a.exe', sha256: 'zu kurz' }]), 'Nur Text');
assert.strictEqual(buildReleaseBody('', []), '');
assert.ok(buildReleaseBody('', [{ name: 'a.exe', sha256: HASH }]).startsWith('### Prüfsummen'));
});