Files
SubMiner/src/main/fatal-error.test.ts
T
2026-05-20 00:46:11 -07:00

45 lines
1.5 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
buildFatalErrorDetails,
createFatalErrorReporter,
resetFatalErrorReporterForTests,
} from './fatal-error';
test('buildFatalErrorDetails includes context, error, and log path', () => {
const details = buildFatalErrorDetails({
context: 'Startup failed.',
error: new Error('boom'),
logFilePath: 'C:\\Users\\tester\\AppData\\Roaming\\SubMiner\\logs\\app.log',
});
assert.match(details, /Startup failed\./);
assert.match(details, /Error: boom/);
assert.match(details, /Log file: C:\\Users\\tester\\AppData\\Roaming\\SubMiner\\logs\\app\.log/);
});
test('fatal error reporter writes one log entry and shows one dialog', () => {
resetFatalErrorReporterForTests();
const logLines: string[] = [];
const dialogs: string[] = [];
const reporter = createFatalErrorReporter({
appendLogLine: (line) => logLines.push(line),
showErrorBox: (title, details) => dialogs.push(`${title}:${details}`),
resolveLogFilePath: () => 'C:\\SubMiner\\logs\\app.log',
now: () => new Date('2026-05-20T01:02:03.000Z'),
});
reporter('first failure', {
title: 'SubMiner startup failed',
context: 'SubMiner could not start.',
});
reporter('second failure');
assert.equal(logLines.length, 1);
assert.match(logLines[0]!, /\[main:fatal\] SubMiner could not start\./);
assert.match(logLines[0]!, /first failure/);
assert.equal(dialogs.length, 1);
assert.match(dialogs[0]!, /^SubMiner startup failed:SubMiner could not start\./);
});