65 lines
2.5 KiB
TypeScript
65 lines
2.5 KiB
TypeScript
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<string>(), 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('el nivel máximo oculta las cuentas más profundas', () => {
|
|
expect(visibleRows(accounts, { ...open, maxLevel: 2 }).map((r) => r.account.Code)).toEqual(['1', '1-1', '1-2', '2']);
|
|
expect(visibleRows(accounts, { ...open, maxLevel: 1 }).map((r) => r.account.Code)).toEqual(['1', '2']);
|
|
});
|
|
|
|
it('lista los códigos con hijas', () => {
|
|
expect(parentsOf(accounts).sort()).toEqual(['1', '1-1']);
|
|
});
|
|
});
|