61 lines
2.4 KiB
TypeScript
61 lines
2.4 KiB
TypeScript
import { describe, expect, it } from 'bun:test';
|
|
import { parseXbrlInstance } from '@/lib/server/taxonomy/xbrl-parser';
|
|
|
|
const SAMPLE_XBRL = `
|
|
<xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance"
|
|
xmlns:xbrldi="http://xbrl.org/2006/xbrldi"
|
|
xmlns:us-gaap="http://fasb.org/us-gaap/2024"
|
|
xmlns:dei="http://xbrl.sec.gov/dei/2024">
|
|
<xbrli:context id="c1">
|
|
<xbrli:period>
|
|
<xbrli:startDate>2025-01-01</xbrli:startDate>
|
|
<xbrli:endDate>2025-12-31</xbrli:endDate>
|
|
</xbrli:period>
|
|
</xbrli:context>
|
|
<xbrli:context id="c2">
|
|
<xbrli:entity>
|
|
<xbrli:segment>
|
|
<xbrldi:explicitMember dimension="us-gaap:StatementBusinessSegmentsAxis">us-gaap:ConsolidatedGroupMember</xbrldi:explicitMember>
|
|
</xbrli:segment>
|
|
</xbrli:entity>
|
|
<xbrli:period>
|
|
<xbrli:instant>2025-12-31</xbrli:instant>
|
|
</xbrli:period>
|
|
</xbrli:context>
|
|
<xbrli:unit id="u1">
|
|
<xbrli:measure>iso4217:USD</xbrli:measure>
|
|
</xbrli:unit>
|
|
<us-gaap:Revenues contextRef="c1" unitRef="u1" decimals="-6">1,234</us-gaap:Revenues>
|
|
<us-gaap:Assets contextRef="c2" unitRef="u1" decimals="-6">5,678</us-gaap:Assets>
|
|
<dei:EntityRegistrantName contextRef="c1">Acme Corp</dei:EntityRegistrantName>
|
|
</xbrli:xbrl>
|
|
`;
|
|
|
|
describe('xbrl instance parser', () => {
|
|
it('parses contexts, units, numeric facts, dimensions, and concept keys', () => {
|
|
const parsed = parseXbrlInstance(SAMPLE_XBRL, 'abc_htm.xml');
|
|
|
|
expect(parsed.contexts.c1?.periodStart).toBe('2025-01-01');
|
|
expect(parsed.contexts.c1?.periodEnd).toBe('2025-12-31');
|
|
expect(parsed.contexts.c2?.periodInstant).toBe('2025-12-31');
|
|
expect(parsed.contexts.c2?.dimensions.length).toBe(1);
|
|
expect(parsed.units.u1?.measure).toBe('iso4217:USD');
|
|
|
|
expect(parsed.facts.length).toBe(2);
|
|
const revenueFact = parsed.facts.find((fact) => fact.localName === 'Revenues');
|
|
const assetsFact = parsed.facts.find((fact) => fact.localName === 'Assets');
|
|
|
|
expect(revenueFact?.conceptKey).toBe('http://fasb.org/us-gaap/2024#Revenues');
|
|
expect(revenueFact?.isDimensionless).toBe(true);
|
|
expect(revenueFact?.value).toBe(1234);
|
|
expect(revenueFact?.sourceFile).toBe('abc_htm.xml');
|
|
|
|
expect(assetsFact?.conceptKey).toBe('http://fasb.org/us-gaap/2024#Assets');
|
|
expect(assetsFact?.isDimensionless).toBe(false);
|
|
expect(assetsFact?.dimensions[0]).toEqual({
|
|
axis: 'us-gaap:StatementBusinessSegmentsAxis',
|
|
member: 'us-gaap:ConsolidatedGroupMember'
|
|
});
|
|
});
|
|
});
|