feat: add worker main poll loop

This commit is contained in:
2026-08-10 14:46:30 +02:00
parent 443657ceef
commit e6d937fd9b
2 changed files with 92 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
import { prisma } from '@/lib/prisma'
import * as processor from '../processor'
jest.mock('@/lib/prisma', () => ({
prisma: {
download: {
findMany: jest.fn(),
updateMany: jest.fn(),
},
},
}))
jest.mock('../processor')
const mockFindMany = prisma.download.findMany as jest.Mock
const mockUpdateMany = prisma.download.updateMany as jest.Mock
const mockProcess = processor.processDownload as jest.Mock
describe('pollOnce', () => {
beforeEach(() => {
jest.clearAllMocks()
})
it('processes all PENDING downloads', async () => {
mockFindMany.mockResolvedValue([{ id: 'dl-1' }, { id: 'dl-2' }])
mockUpdateMany.mockResolvedValue({ count: 2 })
mockProcess.mockResolvedValue(undefined)
const { pollOnce } = await import('../index')
await pollOnce()
expect(mockUpdateMany).toHaveBeenCalledWith(
expect.objectContaining({
where: expect.objectContaining({ status: 'PENDING' }),
data: expect.objectContaining({ status: 'PROCESSING' }),
})
)
expect(mockProcess).toHaveBeenCalledTimes(2)
expect(mockProcess).toHaveBeenCalledWith('dl-1')
expect(mockProcess).toHaveBeenCalledWith('dl-2')
})
it('does nothing when queue is empty', async () => {
mockFindMany.mockResolvedValue([])
const { pollOnce } = await import('../index')
await pollOnce()
expect(mockUpdateMany).not.toHaveBeenCalled()
expect(mockProcess).not.toHaveBeenCalled()
})
})