import { describe, expect, it } from 'vitest'; import { type TreeAccount, parentsOf, visibleRows } from './chart-tree.model'; const acc = (Code: string, Name: string, level: number, father: string | null, postable = false): TreeAccount => ({ Code, Name, AccountLevel: level, FatherAccountKey: father, ActiveAccount: postable ? 'tYES' : 'tNO', AccountType: 'at_Other', Balance: 0, }); const accounts = [ acc('2', 'Pasivos', 1, null), acc('1', 'Activos', 1, null), acc('1-1', 'Circulante', 2, '1'), acc('1-1-001', 'Caja', 3, '1-1', true), acc('1-1-002', 'Banco', 3, '1-1', true), acc('1-2', 'Fijo', 2, '1'), ]; const open = { collapsed: new Set(), query: '', root: null }; describe('árbol del plan de cuentas', () => { it('ordena por código, con cada cuenta seguida de sus hijas', () => { expect(visibleRows(accounts, open).map((r) => [r.account.Code, r.depth])).toEqual([ ['1', 0], ['1-1', 1], ['1-1-001', 2], ['1-1-002', 2], ['1-2', 1], ['2', 0], ]); }); it('marca las que tienen hijas y si están desplegadas', () => { const rows = visibleRows(accounts, { ...open, collapsed: new Set(['1-1']) }); expect(rows.map((r) => r.account.Code)).toEqual(['1', '1-1', '1-2', '2']); expect(rows.find((r) => r.account.Code === '1-1')).toMatchObject({ hasChildren: true, expanded: false }); expect(rows.find((r) => r.account.Code === '1-2')).toMatchObject({ hasChildren: false, expanded: false }); }); it('buscar muestra las coincidencias con sus cuentas padre, desplegadas', () => { const rows = visibleRows(accounts, { ...open, collapsed: new Set(['1', '1-1']), query: 'banco' }); expect(rows.map((r) => r.account.Code)).toEqual(['1', '1-1', '1-1-002']); }); it('puede mostrar solo una rama', () => { expect(visibleRows(accounts, { ...open, root: '2' }).map((r) => r.account.Code)).toEqual(['2']); }); it('una cuenta con el padre ausente se trata como de primer nivel', () => { expect(visibleRows([acc('9-9', 'Suelta', 2, 'no-existe')], open).map((r) => [r.account.Code, r.depth])).toEqual([['9-9', 0]]); }); it('lista los códigos con hijas', () => { expect(parentsOf(accounts).sort()).toEqual(['1', '1-1']); }); });