import { describe, it, expect, beforeEach } from 'vitest'; import { addItem, getPending, markStatus, remove, getStats } from '../push/queue.js'; const DB_NAME = 'inquiry_push'; describe('queue', () => { beforeEach(async () => { // Each test starts with a clean DB. fake-indexeddb exposes indexedDB // globally via the setupFiles entry. databases() may be missing on // some builds, so fall back to the known DB name we use in queue.js. const dbs = (await indexedDB.databases?.().catch(() => null)) || []; const names = dbs.length ? dbs.map(d => d.name) : [DB_NAME]; await Promise.all(names.map(name => new Promise(r => { if (!name) { r(); return; } const req = indexedDB.deleteDatabase(name); req.onsuccess = req.onerror = req.onblocked = () => r(); }))); }); it('addItem then getPending returns it', async () => { const id = await addItem({ payload: { record: { inquiryId: 'X1' }, messages: [{ messageId: 'm1' }] }, inquiryId: 'X1', }); const pending = await getPending(5); expect(pending.length).toBe(1); expect(pending[0].id).toBe(id); expect(pending[0].status).toBe('pending'); }); it('markStatus pending->sent then not in pending', async () => { const id = await addItem({ payload: { record: {}, messages: [] }, inquiryId: 'X', }); await markStatus(id, 'sent'); expect((await getPending(5)).length).toBe(0); }); it('getStats counts by status', async () => { await addItem({ payload: { record: {}, messages: [] }, inquiryId: 'A' }); const id2 = await addItem({ payload: { record: {}, messages: [] }, inquiryId: 'B' }); await markStatus(id2, 'failed', { retries: 8 }); const stats = await getStats(); expect(stats.pending).toBe(1); expect(stats.failed).toBe(1); }); it('remove deletes item', async () => { const id = await addItem({ payload: { record: {}, messages: [] }, inquiryId: 'A' }); await remove(id); expect((await getPending(5)).length).toBe(0); }); });