Files
ReadMeABook/tests/helpers/job-queue.ts
T
kikootwo 06195e6570 Add find_missing_ebooks scheduled job
Introduce a safety-net scheduled job that scans completed audiobooks and auto-triggers ebook fetches for missing companions. Changes include:

- New Prisma migration + schema field: requests.ebook_auto_retry_count (nullable) to track lifetime auto-retries.
- New processor: src/lib/processors/find-missing-ebooks.processor.ts implementing the scan (limit 50), gating by ebook_auto_grab_enabled and source flags, creating ebook child requests or retrying failed ones up to a cap of 5, using transactions for race-safety and rolling back the counter if enqueue fails.
- Job queue integration: add job type, payload, processor registration, and addFindMissingEbooksJob helper.
- Scheduler integration: register the scheduled job (daily midnight) and trigger path.
- Documentation updates: backend scheduler and ebook-sidecar docs describing behavior and limits.
- Tests: add comprehensive unit tests for the processor and update scheduler tests and job-queue test helper.

This implements automated recovery for missing ebook companions while keeping the retry counter processor-private and ensuring safe concurrency handling.
2026-05-17 18:22:55 -04:00

25 lines
685 B
TypeScript

/**
* Component: Job Queue Mock Factory
* Documentation: documentation/backend/services/jobs.md
*/
import { vi } from 'vitest';
export const createJobQueueMock = () => ({
addSearchJob: vi.fn(),
addSearchEbookJob: vi.fn(),
addDownloadJob: vi.fn(),
addMonitorJob: vi.fn(),
addOrganizeJob: vi.fn(),
addPlexScanJob: vi.fn(),
addPlexMatchJob: vi.fn(),
addPlexRecentlyAddedJob: vi.fn(),
addMonitorRssFeedsJob: vi.fn(),
addAudibleRefreshJob: vi.fn(),
addRetryMissingTorrentsJob: vi.fn(),
addRetryFailedImportsJob: vi.fn(),
addFindMissingEbooksJob: vi.fn(),
addCleanupSeededTorrentsJob: vi.fn(),
addNotificationJob: vi.fn().mockResolvedValue(undefined),
});