57 lines
2.0 KiB
JavaScript
57 lines
2.0 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
|
|
import { finishRollback } from '../../dist/server/services/rollback.js';
|
|
|
|
test('shared rollback rethrows the original error after successful ordered restores', async () => {
|
|
const original = new Error('original');
|
|
const events = [];
|
|
await assert.rejects(
|
|
finishRollback(original, [
|
|
{ run: () => { events.push('first'); } },
|
|
{ run: async () => { events.push('second'); } },
|
|
], 'Rollback failed'),
|
|
(error) => error === original,
|
|
);
|
|
assert.deepEqual(events, ['first', 'second']);
|
|
});
|
|
|
|
test('shared rollback continues, preserves aggregate order and message', async () => {
|
|
const original = new Error('original');
|
|
const first = new Error('first restore');
|
|
const second = new Error('second restore');
|
|
const events = [];
|
|
await assert.rejects(
|
|
finishRollback(original, [
|
|
{ run: () => { events.push('first'); throw first; } },
|
|
{ run: () => { events.push('middle'); } },
|
|
{ run: () => { events.push('second'); throw second; } },
|
|
], 'Expected rollback message'),
|
|
(error) => {
|
|
assert.ok(error instanceof AggregateError);
|
|
assert.equal(error.message, 'Expected rollback message');
|
|
assert.deepEqual(error.errors, [original, first, second]);
|
|
return true;
|
|
},
|
|
);
|
|
assert.deepEqual(events, ['first', 'middle', 'second']);
|
|
});
|
|
|
|
test('shared rollback maps a runtime restore failure to PROCESS_START_FAILED', async () => {
|
|
const original = new Error('original');
|
|
const config = new Error('config restore');
|
|
const runtime = new Error('runtime restore');
|
|
await assert.rejects(
|
|
finishRollback(original, [
|
|
{ run: () => { throw config; } },
|
|
{ run: () => { throw runtime; }, runtime: true },
|
|
], 'Runtime rollback failed'),
|
|
(error) => {
|
|
assert.equal(error.code, 'PROCESS_START_FAILED');
|
|
assert.equal(error.cause.message, 'Runtime rollback failed');
|
|
assert.deepEqual(error.cause.errors, [original, config, runtime]);
|
|
return true;
|
|
},
|
|
);
|
|
});
|