import { describe, expect, it } from 'vitest' import { buildSkillCatalogTree, collectSkillLeavesFromTree, filterSkillTreeByQuery, skillCatalogPathLabel, } from './skillCatalogTree.js' const sample = [ { id: 1, name: 'Dachi Waza', main_category_id: 10, category_id: 20, catalog_main_category_name: 'Karate', catalog_main_sort: 1, catalog_category_name: 'Kihon', catalog_category_sort: 2, sort_order: 1, }, { id: 2, name: 'Kata Ablauf', main_category_id: 10, category_id: 21, catalog_main_category_name: 'Karate', catalog_main_sort: 1, catalog_category_name: 'Kata', catalog_category_sort: 1, sort_order: 1, }, ] describe('skillCatalogTree', () => { it('buildSkillCatalogTree groups by main and category', () => { const tree = buildSkillCatalogTree(sample) expect(tree).toHaveLength(1) expect(tree[0].label).toBe('Karate') expect(tree[0].children).toHaveLength(2) expect(tree[0].children[0].label).toBe('Kata') expect(tree[0].children[0].children[0].skillId).toBe(2) }) it('skillCatalogPathLabel', () => { expect(skillCatalogPathLabel(sample[0])).toBe('Karate › Kihon › Dachi Waza') }) it('collectSkillLeavesFromTree respects exclude', () => { const tree = buildSkillCatalogTree(sample) const leaves = collectSkillLeavesFromTree(tree, [1]) expect(leaves).toHaveLength(1) expect(leaves[0].id).toBe(2) }) it('filterSkillTreeByQuery', () => { const tree = buildSkillCatalogTree(sample) const filtered = filterSkillTreeByQuery(tree, 'dachi') expect(filtered[0].children.some((c) => c.children?.some((s) => s.skillId === 1))).toBe(true) }) })