import { describe, expect, it } from 'vitest'; import { ASSET_TYPE_LABELS, ASSET_TYPES, type AssetType, isPlaceableType, } from '../../src/core/model/AssetTypes'; import { assetMenuGroups } from '../../src/editor/panels/assetMenu'; const labels = (types: AssetType[]) => types.map((type) => ASSET_TYPE_LABELS[type]); describe('assetMenuGroups', () => { it('offers every type exactly once', () => { const flat = assetMenuGroups().flat(); expect([...flat].sort()).toEqual([...ASSET_TYPES].sort()); }); it('splits into placeable first, library second (#43)', () => { const [placeable, library] = assetMenuGroups(); expect(placeable!.every(isPlaceableType)).toBe(true); expect(library!.some(isPlaceableType)).toBe(false); }); it('sorts each group by its label, not by declaration order', () => { for (const group of assetMenuGroups()) { expect(labels(group)).toEqual([...labels(group)].sort()); } // Declaration order starts with Scene, which is not placeable and no longer leads the menu. expect(assetMenuGroups()[0]![0]).not.toBe('scene'); }); it('leaves ASSET_TYPES alone – it is also the serialisation order', () => { assetMenuGroups(); expect(ASSET_TYPES[0]).toBe('scene'); }); });