import { beforeEach, describe, expect, it, mock } from 'bun:test'; import type { FinancialStatementKind } from '@/lib/types'; import type { TaxonomyHydrationInput, TaxonomyHydrationResult } from '@/lib/server/taxonomy/types'; function createStatementRecord(factory: () => T): Record { return { income: factory(), balance: factory(), cash_flow: factory(), equity: factory(), comprehensive_income: factory() }; } function createHydrationResult(): TaxonomyHydrationResult { return { filing_id: 1, ticker: 'TEST', filing_date: '2025-12-31', filing_type: '10-K', parse_status: 'ready', parse_error: null, source: 'xbrl_instance_with_linkbase', parser_engine: 'fiscal-xbrl', parser_version: '0.1.0', taxonomy_regime: 'us-gaap', fiscal_pack: 'core', periods: [], faithful_rows: createStatementRecord(() => []), statement_rows: createStatementRecord(() => []), surface_rows: createStatementRecord(() => []), detail_rows: createStatementRecord(() => ({})), kpi_rows: [], contexts: [], derived_metrics: null, validation_result: null, facts_count: 0, concepts_count: 0, dimensions_count: 0, assets: [], concepts: [], facts: [], metric_validations: [], normalization_summary: { surfaceRowCount: 0, detailRowCount: 0, kpiRowCount: 0, unmappedRowCount: 0, materialUnmappedRowCount: 0, warnings: ['rust_warning'] } }; } const mockHydrateFromSidecar = mock(async () => createHydrationResult()); mock.module('@/lib/server/taxonomy/parser-client', () => ({ hydrateFilingTaxonomySnapshotFromSidecar: mockHydrateFromSidecar })); describe('taxonomy engine rust path', () => { beforeEach(() => { mockHydrateFromSidecar.mockClear(); }); it('returns sidecar output directly from the Rust sidecar', async () => { const { hydrateFilingTaxonomySnapshot } = await import('@/lib/server/taxonomy/engine'); const input: TaxonomyHydrationInput = { filingId: 1, ticker: 'TEST', cik: '0000000001', accessionNumber: '0000000001-25-000001', filingDate: '2025-12-31', filingType: '10-K', filingUrl: 'https://www.sec.gov/Archives/edgar/data/1/000000000125000001/', primaryDocument: 'test-20251231.htm' }; const result = await hydrateFilingTaxonomySnapshot(input); expect(mockHydrateFromSidecar).toHaveBeenCalledTimes(1); expect(result.parser_engine).toBe('fiscal-xbrl'); expect(result.normalization_summary.warnings).toEqual(['rust_warning']); }); });