feat(federation): permanent-failure callback registry
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
||||
import {
|
||||
registerPermanentFailureCallback,
|
||||
invokePermanentFailureCallback,
|
||||
_resetCallbacks,
|
||||
} from './federationRollback.js';
|
||||
|
||||
describe('permanent-failure callback registry', () => {
|
||||
beforeEach(() => _resetCallbacks());
|
||||
|
||||
it('invokes the registered callback when called by eventType', () => {
|
||||
const cb = vi.fn();
|
||||
registerPermanentFailureCallback('friend_request_create', cb);
|
||||
invokePermanentFailureCallback('friend_request_create', 'msg-123', 'recipient_not_found');
|
||||
expect(cb).toHaveBeenCalledWith('msg-123', 'recipient_not_found');
|
||||
});
|
||||
|
||||
it('is a no-op for unregistered event types', () => {
|
||||
expect(() =>
|
||||
invokePermanentFailureCallback('unknown_event_type', 'msg-1', 'whatever')
|
||||
).not.toThrow();
|
||||
});
|
||||
|
||||
it('replaces a previously-registered callback for the same eventType', () => {
|
||||
const old = vi.fn();
|
||||
const fresh = vi.fn();
|
||||
registerPermanentFailureCallback('e1', old);
|
||||
registerPermanentFailureCallback('e1', fresh);
|
||||
invokePermanentFailureCallback('e1', 'msg-9', 'reason');
|
||||
expect(old).not.toHaveBeenCalled();
|
||||
expect(fresh).toHaveBeenCalledWith('msg-9', 'reason');
|
||||
});
|
||||
|
||||
it('swallows errors thrown by the callback (logs but does not throw)', () => {
|
||||
registerPermanentFailureCallback('boom', () => { throw new Error('test'); });
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
expect(() => invokePermanentFailureCallback('boom', 'msg-x', 'r')).not.toThrow();
|
||||
expect(errSpy).toHaveBeenCalled();
|
||||
errSpy.mockRestore();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user