chore(RECIPE-0004): complete iteration 1 — fix TypeScript Timer type errors
- Fixed NodeJS.Timer → NodeJS.Timeout in scheduler.ts line 13 - Fixed NodeJS.Timer[] → NodeJS.Timeout[] in fixtures.ts line 151 - Resolves TypeScript compile errors from iteration 0 review - All 260 tests passing, build succeeds with no errors
This commit is contained in:
108
src/tests/queue-manager-logging.spec.ts
Normal file
108
src/tests/queue-manager-logging.spec.ts
Normal file
@@ -0,0 +1,108 @@
|
||||
/**
|
||||
* Tests for QueueManager logging serialization
|
||||
*
|
||||
* Verifies that QueueManager uses logError utility for error serialization
|
||||
* instead of console.error which outputs [object Object].
|
||||
*/
|
||||
|
||||
import { describe, test, expect, vi, beforeEach } from 'vitest';
|
||||
import { QueueManager } from '$lib/server/queue/QueueManager';
|
||||
import * as logger from '$lib/server/utils/logger';
|
||||
import type { QueueUpdateCallback } from '$lib/server/queue/types';
|
||||
|
||||
describe('QueueManager logging', () => {
|
||||
let manager: QueueManager;
|
||||
let logErrorSpy: any;
|
||||
|
||||
beforeEach(() => {
|
||||
manager = new QueueManager();
|
||||
logErrorSpy = vi.spyOn(logger, 'logError').mockImplementation(() => {});
|
||||
});
|
||||
|
||||
test('should use logError when subscriber throws error', () => {
|
||||
const failingCallback: QueueUpdateCallback = () => {
|
||||
throw new Error('Subscriber failed');
|
||||
};
|
||||
|
||||
manager.subscribe(failingCallback);
|
||||
|
||||
// Enqueue an item (this will notify subscribers)
|
||||
manager.enqueue('https://instagram.com/p/test123');
|
||||
|
||||
expect(logErrorSpy).toHaveBeenCalledWith(
|
||||
'[QueueManager] Subscriber error',
|
||||
expect.any(Error)
|
||||
);
|
||||
});
|
||||
|
||||
test('should serialize complex error objects', () => {
|
||||
const complexError = {
|
||||
code: 'ERR_SUBSCRIBER',
|
||||
message: 'Callback failed',
|
||||
details: { reason: 'Network timeout' }
|
||||
};
|
||||
|
||||
const failingCallback: QueueUpdateCallback = () => {
|
||||
throw complexError;
|
||||
};
|
||||
|
||||
manager.subscribe(failingCallback);
|
||||
manager.enqueue('https://instagram.com/p/test456');
|
||||
|
||||
expect(logErrorSpy).toHaveBeenCalledWith(
|
||||
'[QueueManager] Subscriber error',
|
||||
complexError
|
||||
);
|
||||
});
|
||||
|
||||
test('should not prevent other subscribers from being notified on error', () => {
|
||||
const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
const failingCallback: QueueUpdateCallback = () => {
|
||||
throw new Error('First subscriber fails');
|
||||
};
|
||||
const successCallback = vi.fn();
|
||||
|
||||
manager.subscribe(failingCallback);
|
||||
manager.subscribe(successCallback);
|
||||
|
||||
manager.enqueue('https://instagram.com/p/test789');
|
||||
|
||||
// Error should be logged via logError
|
||||
expect(logErrorSpy).toHaveBeenCalled();
|
||||
|
||||
// Second subscriber should still be called
|
||||
expect(successCallback).toHaveBeenCalled();
|
||||
|
||||
// Should not contain [object Object] in console output
|
||||
const errorMessages = consoleErrorSpy.mock.calls
|
||||
.map(call => call.join(' '));
|
||||
|
||||
const hasObjectObject = errorMessages.some(msg =>
|
||||
msg.includes('[object Object]')
|
||||
);
|
||||
|
||||
expect(hasObjectObject).toBe(false);
|
||||
});
|
||||
|
||||
test('should handle Error instances with custom properties', () => {
|
||||
const customError: any = new Error('Custom error');
|
||||
customError.statusCode = 500;
|
||||
customError.details = { field: 'url', issue: 'invalid' };
|
||||
|
||||
const failingCallback: QueueUpdateCallback = () => {
|
||||
throw customError;
|
||||
};
|
||||
|
||||
manager.subscribe(failingCallback);
|
||||
manager.enqueue('https://instagram.com/p/custom');
|
||||
|
||||
expect(logErrorSpy).toHaveBeenCalledWith(
|
||||
'[QueueManager] Subscriber error',
|
||||
expect.objectContaining({
|
||||
message: 'Custom error',
|
||||
statusCode: 500,
|
||||
details: { field: 'url', issue: 'invalid' }
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user