feat(web): plan de cuentas como árbol y casillas de grupo en el formulario
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
eb84d73719
commit
99c0a9259c
12 files changed
+341
-3
No files matched your search
@@ -0,0 +1,59 @@
|
||||
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('lista los códigos con hijas', () => {
|
||||
expect(parentsOf(accounts).sort()).toEqual(['1', '1-1']);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user