import { Config, QueueItem } from '../src/types'; type DeepPartial = { [P in keyof T]?: T[P] extends object ? DeepPartial : T[P]; }; export const createMockConfig = (overrides: DeepPartial = {}): Config => ({ sonarr: { host: 'http://localhost:8989', apiKey: 'test-api-key', enabled: true, ...overrides.sonarr }, rules: { removeQualityBlocked: false, blockRemovedQualityReleases: false, removeArchiveBlocked: false, blockRemovedArchiveReleases: false, removeNoFilesReleases: false, blockRemovedNoFilesReleases: false, removeSeriesIdMismatch: false, blockRemovedSeriesIdMismatchReleases: false, ...overrides.rules }, dryRun: overrides.dryRun || false, schedule: overrides.schedule || '*/5 * * * *', logLevel: overrides.logLevel || 'info' }); export const createMockQueueItem = (overrides: Partial = {}): QueueItem => ({ id: 123, title: 'Test.Show.S01E01', status: 'completed', trackedDownloadStatus: 'warning', trackedDownloadState: 'importPending', statusMessages: [], ...overrides }); export const createQualityBlockedItem = (): QueueItem => createMockQueueItem({ statusMessages: [{ messages: ['upgrade for existing episode'] }] }); export const createArchiveBlockedItem = (): QueueItem => createMockQueueItem({ statusMessages: [{ messages: ['Found archive file, might need to be extracted'] }] }); export const createNoFilesBlockedItem = (): QueueItem => createMockQueueItem({ statusMessages: [{ messages: ['No files found are eligible for import'] }] }); export const createSeriesIdMismatchItem = (): QueueItem => createMockQueueItem({ trackedDownloadState: 'importBlocked', statusMessages: [{ messages: ['Found matching series via grab history, but release was matched to series by ID. Automatic import is not possible. See the FAQ for details.'] }] });