/** * PR6 — documents hub `eoi_queue` tab. * * Verifies that: * - `listDocuments` with tab='eoi_queue' returns only EOI docs in * draft/sent/partially_signed status * - `getHubTabCounts` reports the correct eoi_queue count * - Other doc types (NDA, contract, welcome_letter) are excluded * - Completed/expired EOIs are excluded (those belong to other tabs) */ import { describe, it, expect } from 'vitest'; import { db } from '@/lib/db'; import { documents } from '@/lib/db/schema/documents'; import { getHubTabCounts, listDocuments } from '@/lib/services/documents.service'; import { makePort, makeClient } from '../helpers/factories'; describe('documents hub — eoi_queue tab', () => { it('lists only EOIs in in-flight status', async () => { const port = await makePort(); const client = await makeClient({ portId: port.id }); // Seed a mix: 2 in-flight EOIs, 1 completed EOI, 1 sent NDA, 1 sent welcome_letter. await db.insert(documents).values([ { portId: port.id, clientId: client.id, documentType: 'eoi', title: 'EOI #1', status: 'sent', createdBy: 'seed', }, { portId: port.id, clientId: client.id, documentType: 'eoi', title: 'EOI #2', status: 'partially_signed', createdBy: 'seed', }, { portId: port.id, clientId: client.id, documentType: 'eoi', title: 'EOI #3 (done)', status: 'completed', createdBy: 'seed', }, { portId: port.id, clientId: client.id, documentType: 'nda', title: 'NDA', status: 'sent', createdBy: 'seed', }, { portId: port.id, clientId: client.id, documentType: 'welcome_letter', title: 'Welcome', status: 'sent', createdBy: 'seed', }, ]); const result = await listDocuments( port.id, { page: 1, limit: 50, sort: 'createdAt', order: 'desc', includeArchived: false, tab: 'eoi_queue', }, {}, ); const docs = result.data as Array<{ documentType: string; status: string }>; expect(docs).toHaveLength(2); expect(docs.every((d) => d.documentType === 'eoi')).toBe(true); expect(docs.every((d) => ['sent', 'partially_signed'].includes(d.status))).toBe(true); }); it('reports the correct eoi_queue count via getHubTabCounts', async () => { const port = await makePort(); const client = await makeClient({ portId: port.id }); await db.insert(documents).values([ { portId: port.id, clientId: client.id, documentType: 'eoi', title: 'EOI A', status: 'draft', createdBy: 'seed', }, { portId: port.id, clientId: client.id, documentType: 'eoi', title: 'EOI B', status: 'sent', createdBy: 'seed', }, { portId: port.id, clientId: client.id, documentType: 'contract', title: 'Contract X', status: 'sent', createdBy: 'seed', }, ]); const counts = await getHubTabCounts(port.id, undefined); expect(counts.eoi_queue).toBe(2); // The contract should not bump eoi_queue. expect(counts.all).toBe(3); }); it('returns an empty list when no in-flight EOIs exist', async () => { const port = await makePort(); const client = await makeClient({ portId: port.id }); await db.insert(documents).values({ portId: port.id, clientId: client.id, documentType: 'eoi', title: 'old EOI', status: 'expired', createdBy: 'seed', }); const result = await listDocuments( port.id, { page: 1, limit: 50, sort: 'createdAt', order: 'desc', includeArchived: false, tab: 'eoi_queue', }, {}, ); expect(result.data).toHaveLength(0); const counts = await getHubTabCounts(port.id, undefined); expect(counts.eoi_queue).toBe(0); }); });