Compare commits

..

2 Commits

Author SHA1 Message Date
Gitea Actions
b2e086d5ba ci: Bump version to 0.2.34 [skip ci] 2025-12-30 08:44:55 +05:00
07a9787570 fix unit tests
All checks were successful
Deploy to Test Environment / deploy-to-test (push) Successful in 12m5s
2025-12-29 19:44:25 -08:00
6 changed files with 26 additions and 25 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "flyer-crawler",
"version": "0.2.33",
"version": "0.2.34",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "flyer-crawler",
"version": "0.2.33",
"version": "0.2.34",
"dependencies": {
"@bull-board/api": "^6.14.2",
"@bull-board/express": "^6.14.2",

View File

@@ -1,7 +1,7 @@
{
"name": "flyer-crawler",
"private": true,
"version": "0.2.33",
"version": "0.2.34",
"type": "module",
"scripts": {
"dev": "concurrently \"npm:start:dev\" \"vite\"",

View File

@@ -113,13 +113,14 @@ describe('errorHandler Middleware', () => {
expect(response.body.message).toBe('A generic server error occurred.');
expect(response.body.stack).toBeDefined();
expect(response.body.errorId).toEqual(expect.any(String));
console.log('[DEBUG] errorHandler.test.ts: Received 500 error response with ID:', response.body.errorId);
expect(mockLogger.error).toHaveBeenCalledWith(
expect.objectContaining({
err: expect.any(Error),
errorId: expect.any(String),
req: expect.objectContaining({ method: 'GET', url: '/generic-error' }),
}),
expect.stringMatching(/Unhandled API Error \(ID: \w+\)/),
expect.stringMatching(/Unhandled API Error \(ID: [\w-]+\)/),
);
expect(consoleErrorSpy).toHaveBeenCalledWith(
expect.stringMatching(/--- \[TEST\] UNHANDLED ERROR \(ID: \w+\) ---/),
@@ -226,7 +227,7 @@ describe('errorHandler Middleware', () => {
errorId: expect.any(String),
req: expect.objectContaining({ method: 'GET', url: '/db-error-500' }),
}),
expect.stringMatching(/Unhandled API Error \(ID: \w+\)/),
expect.stringMatching(/Unhandled API Error \(ID: [\w-]+\)/),
);
expect(consoleErrorSpy).toHaveBeenCalledWith(
expect.stringMatching(/--- \[TEST\] UNHANDLED ERROR \(ID: \w+\) ---/),

View File

@@ -164,11 +164,12 @@ describe('Health Routes (/api/health)', () => {
expect(response.body.message).toBe('DB connection failed'); // This is the message from the original error
expect(response.body.stack).toBeDefined();
expect(response.body.errorId).toEqual(expect.any(String));
console.log('[DEBUG] health.routes.test.ts: Verifying logger.error for DB schema check failure');
expect(mockLogger.error).toHaveBeenCalledWith(
expect.objectContaining({
err: expect.any(Error),
}),
expect.stringMatching(/Unhandled API Error \(ID: \w+\)/),
expect.stringMatching(/Unhandled API Error \(ID: [\w-]+\)/),
);
});
@@ -186,7 +187,7 @@ describe('Health Routes (/api/health)', () => {
expect.objectContaining({
err: expect.objectContaining({ message: 'DB connection failed' }),
}),
expect.stringMatching(/Unhandled API Error \(ID: \w+\)/),
expect.stringMatching(/Unhandled API Error \(ID: [\w-]+\)/),
);
});
});
@@ -220,7 +221,7 @@ describe('Health Routes (/api/health)', () => {
expect.objectContaining({
err: expect.any(Error),
}),
expect.stringMatching(/Unhandled API Error \(ID: \w+\)/),
expect.stringMatching(/Unhandled API Error \(ID: [\w-]+\)/),
);
});
@@ -239,7 +240,7 @@ describe('Health Routes (/api/health)', () => {
expect.objectContaining({
err: expect.any(Error),
}),
expect.stringMatching(/Unhandled API Error \(ID: \w+\)/),
expect.stringMatching(/Unhandled API Error \(ID: [\w-]+\)/),
);
});
});
@@ -300,7 +301,7 @@ describe('Health Routes (/api/health)', () => {
expect.objectContaining({
err: expect.any(Error),
}),
expect.stringMatching(/Unhandled API Error \(ID: \w+\)/),
expect.stringMatching(/Unhandled API Error \(ID: [\w-]+\)/),
);
});
@@ -321,7 +322,7 @@ describe('Health Routes (/api/health)', () => {
expect.objectContaining({
err: expect.objectContaining({ message: 'Pool is not initialized' }),
}),
expect.stringMatching(/Unhandled API Error \(ID: \w+\)/),
expect.stringMatching(/Unhandled API Error \(ID: [\w-]+\)/),
);
});
@@ -336,11 +337,12 @@ describe('Health Routes (/api/health)', () => {
expect(response.body.message).toBe('Connection timed out');
expect(response.body.stack).toBeDefined();
expect(response.body.errorId).toEqual(expect.any(String));
console.log('[DEBUG] health.routes.test.ts: Checking if logger.error was called with the correct pattern');
expect(mockLogger.error).toHaveBeenCalledWith(
expect.objectContaining({
err: expect.any(Error),
}),
expect.stringMatching(/Unhandled API Error \(ID: \w+\)/),
expect.stringMatching(/Unhandled API Error \(ID: [\w-]+\)/),
);
});
@@ -357,7 +359,7 @@ describe('Health Routes (/api/health)', () => {
expect.objectContaining({
err: expect.any(Error),
}),
expect.stringMatching(/Unhandled API Error \(ID: \w+\)/),
expect.stringMatching(/Unhandled API Error \(ID: [\w-]+\)/),
);
});
});

View File

@@ -190,7 +190,10 @@ describe('Worker Service Lifecycle', () => {
});
afterEach(() => {
processExitSpy.mockRestore();
if (processExitSpy && typeof processExitSpy.mockRestore === 'function') {
console.log('[DEBUG] queueService.server.test.ts: Restoring process.exit spy');
processExitSpy.mockRestore();
}
});
it('should close all workers, queues, the redis connection, and exit the process', async () => {

View File

@@ -142,15 +142,6 @@ vi.mock('util', async (importOriginal) => {
};
});
// Mock 'child_process' using the robust `importOriginal` pattern.
// This is needed because some services (systemService, workers.server) import it at the top level.
vi.mock('child_process', () => {
return {
__esModule: true, // Handle CJS/ESM interop
exec: vi.fn(),
};
});
// Mock 'jsonwebtoken'. The `default` key is crucial because the code under test
// uses `import jwt from 'jsonwebtoken'`, which imports the default export.
vi.mock('jsonwebtoken', () => ({
@@ -170,9 +161,13 @@ vi.mock('bcrypt');
vi.mock('crypto', () => ({
default: {
randomBytes: vi.fn().mockReturnValue({
toString: vi.fn().mockReturnValue('mocked-random-string'),
toString: vi.fn().mockImplementation((encoding) => {
const id = 'mocked_random_id';
console.log(`[DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "${id}" for encoding "${encoding}"`);
return id;
}),
}),
randomUUID: vi.fn().mockReturnValue('mocked-random-string'),
randomUUID: vi.fn().mockReturnValue('mocked_random_id'),
},
}));