fix tests ugh
All checks were successful
Deploy to Web Server flyer-crawler.projectium.com / deploy (push) Successful in 5m53s
All checks were successful
Deploy to Web Server flyer-crawler.projectium.com / deploy (push) Successful in 5m53s
This commit is contained in:
@@ -7,8 +7,19 @@ const { mockCronSchedule } = vi.hoisted(() => {
|
||||
});
|
||||
vi.mock('node-cron', () => ({ default: { schedule: mockCronSchedule } }));
|
||||
|
||||
// Mock the logger.server module globally so cron.schedule callbacks use this mock.
|
||||
vi.mock('../services/logger.server', () => ({
|
||||
logger: {
|
||||
info: vi.fn(),
|
||||
error: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
debug: vi.fn(),
|
||||
},
|
||||
}));
|
||||
|
||||
import { BackgroundJobService, startBackgroundJobs } from './backgroundJobService';
|
||||
import type { Queue } from 'bullmq';
|
||||
import { logger as globalMockLogger } from '../services/logger.server'; // Import the mocked logger
|
||||
|
||||
describe('Background Job Service', () => {
|
||||
// Create mock dependencies that will be injected into the service
|
||||
@@ -18,16 +29,9 @@ describe('Background Job Service', () => {
|
||||
const mockNotificationRepo = {
|
||||
createBulkNotifications: vi.fn(),
|
||||
};
|
||||
|
||||
const mockEmailQueue = {
|
||||
add: vi.fn(),
|
||||
};
|
||||
const mockLogger = {
|
||||
info: vi.fn(),
|
||||
error: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
debug: vi.fn(),
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
@@ -47,16 +51,22 @@ describe('Background Job Service', () => {
|
||||
{ user_id: 'user-2', email: 'user2@test.com', full_name: 'User Two', master_item_id: 3, item_name: 'Bread', best_price_in_cents: 250, store_name: 'Bakery', flyer_id: 103, valid_to: '2024-10-22' },
|
||||
];
|
||||
|
||||
// This mockLogger is for the service instance, not the global one used by cron.schedule
|
||||
const mockServiceLogger = {
|
||||
info: vi.fn(),
|
||||
error: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
debug: vi.fn(),
|
||||
};
|
||||
|
||||
// Instantiate the service with mock dependencies for each test run
|
||||
const service = new BackgroundJobService(mockPersonalizationRepo as any, mockNotificationRepo as any, mockEmailQueue as unknown as Queue<any>, mockLogger);
|
||||
const service = new BackgroundJobService(mockPersonalizationRepo as any, mockNotificationRepo as any, mockEmailQueue as unknown as Queue<any>, mockServiceLogger);
|
||||
|
||||
it('should do nothing if no deals are found for any user', async () => {
|
||||
mockPersonalizationRepo.getBestSalePricesForAllUsers.mockResolvedValue([]);
|
||||
|
||||
await service.runDailyDealCheck();
|
||||
|
||||
expect(mockLogger.info).toHaveBeenCalledWith('[BackgroundJob] Starting daily deal check for all users...');
|
||||
expect(mockLogger.info).toHaveBeenCalledWith('[BackgroundJob] No deals found for any watched items. Skipping.');
|
||||
expect(mockServiceLogger.info).toHaveBeenCalledWith('[BackgroundJob] Starting daily deal check for all users...');
|
||||
expect(mockServiceLogger.info).toHaveBeenCalledWith('[BackgroundJob] No deals found for any watched items. Skipping.');
|
||||
expect(mockPersonalizationRepo.getBestSalePricesForAllUsers).toHaveBeenCalledTimes(1);
|
||||
expect(mockEmailQueue.add).not.toHaveBeenCalled();
|
||||
expect(mockNotificationRepo.createBulkNotifications).not.toHaveBeenCalled();
|
||||
@@ -109,7 +119,7 @@ describe('Background Job Service', () => {
|
||||
await service.runDailyDealCheck();
|
||||
|
||||
// Check that it logged the error for user 1
|
||||
expect(mockLogger.error).toHaveBeenCalledWith(
|
||||
expect(mockServiceLogger.error).toHaveBeenCalledWith(
|
||||
expect.stringContaining('Failed to process deals for user user-1'),
|
||||
expect.any(Object)
|
||||
);
|
||||
@@ -125,7 +135,7 @@ describe('Background Job Service', () => {
|
||||
it('should log a critical error if getBestSalePricesForAllUsers fails', async () => {
|
||||
mockPersonalizationRepo.getBestSalePricesForAllUsers.mockRejectedValue(new Error('Critical DB Failure'));
|
||||
await expect(service.runDailyDealCheck()).rejects.toThrow('Critical DB Failure');
|
||||
expect(mockLogger.error).toHaveBeenCalledWith(
|
||||
expect(mockServiceLogger.error).toHaveBeenCalledWith(
|
||||
'[BackgroundJob] A critical error occurred during the daily deal check:',
|
||||
expect.any(Object)
|
||||
);
|
||||
@@ -145,6 +155,7 @@ describe('Background Job Service', () => {
|
||||
} as unknown as Queue;
|
||||
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks(); // Clear global mock logger calls too
|
||||
mockCronSchedule.mockClear();
|
||||
vi.mocked(mockBackgroundJobService.runDailyDealCheck).mockClear();
|
||||
vi.mocked(mockAnalyticsQueue.add).mockClear();
|
||||
@@ -179,7 +190,7 @@ describe('Background Job Service', () => {
|
||||
await dailyDealCheckCallback();
|
||||
|
||||
expect(mockBackgroundJobService.runDailyDealCheck).toHaveBeenCalledTimes(1);
|
||||
expect(mockLogger.error).toHaveBeenCalledWith(
|
||||
expect(globalMockLogger.error).toHaveBeenCalledWith(
|
||||
'[BackgroundJob] Cron job for daily deal check failed unexpectedly.',
|
||||
{ error: jobError }
|
||||
);
|
||||
@@ -227,7 +238,7 @@ describe('Background Job Service', () => {
|
||||
await analyticsJobCallback();
|
||||
|
||||
expect(mockAnalyticsQueue.add).toHaveBeenCalledTimes(1);
|
||||
expect(mockLogger.error).toHaveBeenCalledWith('[BackgroundJob] Failed to enqueue daily analytics job.', { error: queueError });
|
||||
expect(globalMockLogger.error).toHaveBeenCalledWith('[BackgroundJob] Failed to enqueue daily analytics job.', { error: queueError });
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user