import { describe, expect, it } from 'vitest'; import { DaemonStartError, describeStartFailure } from '../src/main/start-failure'; describe('describeStartFailure', () => { it('port tenu par une autre instance : renvoie vers le tray, pas vers une trace technique', () => { const err = new DaemonStartError('port-busy-instance', 'port 7317 is already in use'); const { message, detail } = describeStartFailure(err, 7317); expect(message).toBe('Arboretum is already running'); expect(detail).toContain('7317'); expect(detail).toContain('system tray'); }); it('port tenu par un tiers : nomme les suspects et l’échappatoire (variable d’env)', () => { const err = new DaemonStartError('port-busy-foreign', 'port 7317 is already in use', 'EADDRINUSE'); const { message, detail } = describeStartFailure(err, 7317); expect(message).toBe('Port 7317 is already in use'); expect(detail).toContain('arboretum install'); expect(detail).toContain('ARBORETUM_DESKTOP_PORT'); expect(detail).toContain('EADDRINUSE'); }); it('échec de handshake : conserve le message et la queue de journal', () => { const err = new DaemonStartError('handshake', 'daemon exited before handshake (code 1)', 'boom\nbadaboum'); const { message, detail } = describeStartFailure(err, 7317); expect(message).toBe('Arboretum could not start its local server'); expect(detail).toContain('daemon exited before handshake (code 1)'); expect(detail).toContain('badaboum'); }); it('erreur quelconque (hors DaemonStartError) reste affichable', () => { expect(describeStartFailure(new Error('ENOENT node'), 7317).detail).toContain('ENOENT node'); expect(describeStartFailure('cassé', 7317).detail).toContain('cassé'); }); it('sans queue de journal, aucun bloc « Server output » vide', () => { const detail = describeStartFailure(new DaemonStartError('handshake', 'nope'), 7317).detail; expect(detail).not.toContain('Server output'); }); });