fix tests ugh
All checks were successful
Deploy to Web Server flyer-crawler.projectium.com / deploy (push) Successful in 5m53s

This commit is contained in:
2025-12-09 16:03:11 -08:00
parent c60e19a03b
commit 3a66f31d55
11 changed files with 141 additions and 58 deletions

View File

@@ -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 });
});
});
});