import { describe, expect, it } from 'vitest'; import { APP_ICON_NAMES, isAppIconName } from './app-icon-names'; import { isKnownBlockType, SDUI_BLOCK_TYPES } from './block-types'; import { allCatalogEmojis, CHAT_EMOJI_CATEGORIES, DEFAULT_QUICK_REACTIONS, getEmojiCategory, QUICK_REACTION_SLOTS, } from './chat-emoji-catalog'; import { FLASH_FILTER_ALL_ACTION_ID, FLASH_REACTION_IDS, FLASH_REACTIONS, flashFilterActionId, getFlashReaction, isFlashReactionId, parseFlashInboxFilter, } from './flash-reaction-catalog'; import { COLOR_TOKENS, SHAPE_TOKENS, SPACING_TOKENS, TYPE_TOKENS, } from './style-tokens'; import { allCatalogEmojis as viaIndexAll, isAppIconName as viaIndexIsIcon, isKnownBlockType as viaIndexIsBlock, } from './index'; describe('block-types', () => { it('lists known block types', () => { expect(SDUI_BLOCK_TYPES).toContain('text'); expect(SDUI_BLOCK_TYPES).toContain('inbox_hub_chrome'); expect(isKnownBlockType('button')).toBe(true); expect(isKnownBlockType('inbox_hub_chrome')).toBe(true); expect(isKnownBlockType('unknown_block')).toBe(false); }); }); describe('app-icon-names', () => { it('validates icon tokens', () => { expect(APP_ICON_NAMES).toHaveLength(80); expect(isAppIconName('search')).toBe(true); expect(isAppIconName('heart-filled')).toBe(true); expect(isAppIconName('tab-discover')).toBe(true); expect(isAppIconName('not-an-icon')).toBe(false); }); }); describe('style-tokens', () => { it('exports token catalogs', () => { expect(COLOR_TOKENS).toContain('primary'); expect(SPACING_TOKENS).toContain('md'); expect(SHAPE_TOKENS).toContain('cornerFull'); expect(TYPE_TOKENS).toContain('body'); }); }); describe('chat-emoji-catalog', () => { it('resolves categories and flattens unique emojis', () => { expect(DEFAULT_QUICK_REACTIONS).toHaveLength(QUICK_REACTION_SLOTS); expect(getEmojiCategory('smileys').id).toBe('smileys'); expect(getEmojiCategory('spicy').id).toBe('spicy'); const all = allCatalogEmojis(); expect(all.length).toBeGreaterThan(50); expect(new Set(all).size).toBe(all.length); expect(CHAT_EMOJI_CATEGORIES.length).toBe(8); }); }); describe('flash-reaction-catalog', () => { it('looks up reactions and parses filters', () => { expect(FLASH_REACTIONS).toHaveLength(FLASH_REACTION_IDS.length); expect(getFlashReaction('fire').id).toBe('fire'); expect(getFlashReaction(null).id).toBe('flash'); expect(getFlashReaction('nope').id).toBe('flash'); expect(flashFilterActionId('heart')).toBe('flash_filter_heart'); expect(FLASH_FILTER_ALL_ACTION_ID).toBe('flash_filter_all'); expect(parseFlashInboxFilter('wave')).toBe('wave'); expect(parseFlashInboxFilter(undefined)).toBe('all'); expect(parseFlashInboxFilter('nope')).toBe('all'); expect(isFlashReactionId('chat')).toBe(true); expect(isFlashReactionId('x')).toBe(false); }); }); describe('catalog index re-exports', () => { it('re-exports helpers', () => { expect(viaIndexIsBlock('text')).toBe(true); expect(viaIndexIsIcon('search')).toBe(true); expect(viaIndexAll().length).toBeGreaterThan(0); }); });