WIP main worktree changes before merge
This commit is contained in:
@@ -210,4 +210,86 @@ describe('statement view model', () => {
|
||||
row: { key: 'gp_unmapped', residualFlag: true }
|
||||
});
|
||||
});
|
||||
|
||||
it('renders unmapped detail rows in a dedicated residual section and counts them', () => {
|
||||
const model = buildStatementTree({
|
||||
surfaceKind: 'income_statement',
|
||||
rows: [
|
||||
createSurfaceRow({ key: 'revenue', label: 'Revenue', category: 'revenue', values: { p1: 100 } })
|
||||
],
|
||||
statementDetails: {
|
||||
unmapped: [
|
||||
createDetailRow({
|
||||
key: 'unmapped_other_income',
|
||||
label: 'Other income residual',
|
||||
parentSurfaceKey: 'unmapped',
|
||||
values: { p1: 5 },
|
||||
residualFlag: true
|
||||
})
|
||||
]
|
||||
},
|
||||
categories: [],
|
||||
searchQuery: '',
|
||||
expandedRowKeys: new Set()
|
||||
});
|
||||
|
||||
expect(model.sections).toHaveLength(2);
|
||||
expect(model.sections[1]).toMatchObject({
|
||||
key: 'unmapped_residual',
|
||||
label: 'Unmapped / Residual'
|
||||
});
|
||||
expect(model.sections[1]?.nodes[0]).toMatchObject({
|
||||
kind: 'detail',
|
||||
row: { key: 'unmapped_other_income', parentSurfaceKey: 'unmapped' }
|
||||
});
|
||||
expect(model.visibleNodeCount).toBe(2);
|
||||
expect(model.totalNodeCount).toBe(2);
|
||||
});
|
||||
|
||||
it('matches search and resolves selection for unmapped detail rows without a real parent surface', () => {
|
||||
const rows = [
|
||||
createSurfaceRow({ key: 'revenue', label: 'Revenue', category: 'revenue', values: { p1: 100 } })
|
||||
];
|
||||
const statementDetails = {
|
||||
unmapped: [
|
||||
createDetailRow({
|
||||
key: 'unmapped_fx_gain',
|
||||
label: 'FX gain residual',
|
||||
parentSurfaceKey: 'unmapped',
|
||||
values: { p1: 2 },
|
||||
residualFlag: true
|
||||
})
|
||||
]
|
||||
};
|
||||
|
||||
const model = buildStatementTree({
|
||||
surfaceKind: 'income_statement',
|
||||
rows,
|
||||
statementDetails,
|
||||
categories: [],
|
||||
searchQuery: 'fx gain',
|
||||
expandedRowKeys: new Set()
|
||||
});
|
||||
|
||||
expect(model.sections).toHaveLength(1);
|
||||
expect(model.sections[0]).toMatchObject({
|
||||
key: 'unmapped_residual',
|
||||
label: 'Unmapped / Residual'
|
||||
});
|
||||
expect(model.visibleNodeCount).toBe(1);
|
||||
expect(model.totalNodeCount).toBe(2);
|
||||
|
||||
const selection = resolveStatementSelection({
|
||||
surfaceKind: 'income_statement',
|
||||
rows,
|
||||
statementDetails,
|
||||
selection: { kind: 'detail', key: 'unmapped_fx_gain', parentKey: 'unmapped' }
|
||||
});
|
||||
|
||||
expect(selection).toMatchObject({
|
||||
kind: 'detail',
|
||||
row: { key: 'unmapped_fx_gain', parentSurfaceKey: 'unmapped' },
|
||||
parentSurfaceRow: null
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user