Spaces:
Sleeping
Sleeping
| import { describe, it, expect } from 'vitest'; | |
| import * as THREE from 'three'; | |
| import { | |
| COMPARE_AUTO_PRESETS, | |
| COMPARE_GALAXY_BOOTSTRAP_TEXT, | |
| COMPARE_GROUPS_DEMO_TEXT, | |
| WOMEN_GROUP_ID, | |
| VEHICLES_GROUP_ID, | |
| getCompareBootstrap, | |
| } from '../src/ui/ComparePanel.js'; | |
| import { | |
| assertItCoreCorpus, | |
| IT_CORE_GROUP_ID, | |
| IT_CORE_TOKENS, | |
| } from '../src/ui/itCoreCorpus.js'; | |
| import { | |
| attachCompareGroupMeta, | |
| mergeCompareOverlayLabels, | |
| parseCompareInput, | |
| } from '../src/ui/parseCompareGroups.js'; | |
| describe('IT core corpus fixture', () => { | |
| it('has exactly 100 unique tokens', () => { | |
| const { length, unique } = assertItCoreCorpus(); | |
| expect(length).toBe(100); | |
| expect(unique).toBe(true); | |
| expect(IT_CORE_TOKENS[0]).toBe('server'); | |
| expect(IT_CORE_TOKENS[99]).toBe('encryption'); | |
| }); | |
| }); | |
| /** | |
| * Bootstrap = it_core (100) + vehicles + women; REF inside IT core. | |
| */ | |
| describe('COMPARE bootstrap ↔ GROUP overlay contract', () => { | |
| it('bootstrap is 3 groups with it_core first', () => { | |
| const boot = getCompareBootstrap(); | |
| expect(boot.mode).toBe('grouped'); | |
| expect(boot.textareaValue).toBe(COMPARE_GALAXY_BOOTSTRAP_TEXT); | |
| expect(boot.textareaValue).toBe(COMPARE_AUTO_PRESETS.galaxyDemo); | |
| expect(boot.groups.map((g) => g.id)).toEqual([ | |
| IT_CORE_GROUP_ID, | |
| VEHICLES_GROUP_ID, | |
| WOMEN_GROUP_ID, | |
| ]); | |
| expect(boot.groups[0].tokens).toHaveLength(100); | |
| expect(boot.tokenMeta[0].groupId).toBe(IT_CORE_GROUP_ID); | |
| expect(boot.tokens[0]).toBe('server'); | |
| const g1Start = 100; | |
| const g2Start = 100 + boot.groups[1].tokens.length; | |
| expect(boot.tokenMeta[g1Start].groupId).toBe(VEHICLES_GROUP_ID); | |
| expect(boot.tokenMeta[g2Start].groupId).toBe(WOMEN_GROUP_ID); | |
| expect(boot.tokens.length).toBe( | |
| 100 + boot.groups[1].tokens.length + boot.groups[2].tokens.length, | |
| ); | |
| expect(boot.tokens.length).toBe(230); | |
| }); | |
| it('2 Groups preset remains vehicles + women only (130)', () => { | |
| const parsed = parseCompareInput(COMPARE_GROUPS_DEMO_TEXT); | |
| expect(parsed.tokens).toHaveLength(130); | |
| expect(parsed.groups.map((g) => g.id)).toEqual([ | |
| VEHICLES_GROUP_ID, | |
| WOMEN_GROUP_ID, | |
| ]); | |
| expect(COMPARE_AUTO_PRESETS.groupsDemo).toBe(COMPARE_GROUPS_DEMO_TEXT); | |
| }); | |
| it('bootstrap + attach meta → overlay shows it_core / vehicles / women', () => { | |
| const boot = getCompareBootstrap(); | |
| const data = { | |
| count: boot.tokens.length, | |
| items: boot.tokens.map((text, i) => ({ | |
| id: `tok_${i}`, | |
| index: i, | |
| text, | |
| embedding: [0.1, -0.1], | |
| })), | |
| }; | |
| const withMeta = attachCompareGroupMeta(data, boot.tokenMeta); | |
| const labels = withMeta.items.map((item, i) => ({ | |
| id: item.id, | |
| text: item.text, | |
| type: 'compare', | |
| origin3D: new THREE.Vector3(0, -i, 0), | |
| groupId: item.groupId, | |
| groupLabel: item.groupLabel, | |
| })); | |
| const overlay = mergeCompareOverlayLabels(labels); | |
| expect(overlay).toHaveLength(3); | |
| expect(overlay.map((l) => l.text)).toEqual([ | |
| IT_CORE_GROUP_ID, | |
| VEHICLES_GROUP_ID, | |
| WOMEN_GROUP_ID, | |
| ]); | |
| expect(overlay.every((l) => l.type === 'group')).toBe(true); | |
| }); | |
| it('flat default (old autoload) never yields group badges', () => { | |
| const tokens = COMPARE_AUTO_PRESETS.default; | |
| expect(tokens).toHaveLength(136); | |
| const labels = tokens.map((text, i) => ({ | |
| id: `tok_${i}`, | |
| text, | |
| type: 'compare', | |
| origin3D: new THREE.Vector3(0, -i, 0), | |
| })); | |
| const overlay = mergeCompareOverlayLabels(labels); | |
| expect(overlay.length).toBe(136); | |
| expect(overlay.every((l) => l.type === 'compare')).toBe(true); | |
| }); | |
| }); | |