// Tests fuer den Updater. Der Anlass fuer `looksLikeLogin` war ein echter // Fehlschlag: git.zeasy.dev verlangt instanzweit eine Anmeldung und antwortet // auf jede Adresse mit 303 auf /user/login. `irm ... | iex` folgte der // Umleitung und versuchte, die Anmeldeseite als PowerShell auszufuehren. import { test } from 'node:test'; import assert from 'node:assert/strict'; import { isNewer, looksLikeLogin, parseJsonLoose } from './update.ts'; test('vergleicht Versionen als Zahlen, nicht als Text', () => { // Der Fall, der bei Zeichenkettenvergleich falsch herauskaeme assert.equal(isNewer('2026.10.1', '2026.9.9'), true); assert.equal(isNewer('2026.9.9', '2026.10.1'), false); assert.equal(isNewer('0.5.1', '0.5.0'), true); assert.equal(isNewer('0.5.0', '0.5.0'), false); assert.equal(isNewer('0.10.0', '0.9.0'), true); }); test('fehlende Stellen zaehlen als Null', () => { assert.equal(isNewer('1.1', '1'), true); assert.equal(isNewer('1', '1.0.0'), false); }); test('erkennt eine Anmeldeseite am Inhaltstyp', () => { assert.equal(looksLikeLogin('text/html; charset=utf-8', Buffer.from('x')), true); assert.equal(looksLikeLogin('application/json', Buffer.from('{"version":"1"}')), false); assert.equal(looksLikeLogin('application/zip', Buffer.from([0x50, 0x4b, 3, 4])), false); }); test('erkennt sie auch, wenn der Inhaltstyp schweigt', () => { // Genau die Antwort, die git.zeasy.dev geliefert hat const gitea = Buffer.from( 'See Other.'); assert.equal(looksLikeLogin(null, gitea), true); assert.equal(looksLikeLogin(null, Buffer.from('')), true); }); test('haelt ein echtes Manifest nicht faelschlich fuer HTML', () => { const manifest = Buffer.from(JSON.stringify({ version: '0.5.0', datei: 'abdulive-0.5.0-win-x64.zip', groesse: 119_000_000, sha256: 'a'.repeat(64), })); assert.equal(looksLikeLogin(null, manifest), false); }); test('ein Byte Order Mark macht das Manifest nicht unlesbar', () => { // Windows PowerShell 5.1 schreibt bei `Set-Content -Encoding utf8` eines, // und Notepad ebenso. JSON.parse verschluckt sich daran. const mitBom = '{"version":"0.5.0"}'; assert.throws(() => JSON.parse(mitBom)); assert.deepEqual(parseJsonLoose(mitBom), { version: '0.5.0' }); assert.deepEqual(parseJsonLoose('{"a":1}'), { a: 1 }); });