/** * Unit tests for HelpTooltip pure logic * Validates: Requirements 28.3, 28.5, 28.6, 28.9 */ import { describe, it, expect } from 'vitest'; // Extract the pure getHelpText logic for testing (mirrors HelpTooltip._getHelpText) function getHelpText(helpContent, sectionKey, currentLang, defaultLang) { if (!helpContent) { return 'Help content unavailable'; } const section = helpContent[sectionKey]; if (!section) { return 'Help content unavailable'; } return section[currentLang] || section[defaultLang] || section['en'] || 'Help content unavailable'; } const sampleContent = { metadata: { en: 'Metadata displays general information about the ONNX model.', vi: 'Siêu dữ liệu hiển thị thông tin chung về mô hình ONNX.', ja: 'メタデータは、ONNXモデルに関する一般情報を表示します。' }, inputOutput: { en: 'Inputs & Outputs shows the tensor interfaces of the model.', vi: 'Đầu vào & Đầu ra hiển thị các giao diện tensor của mô hình.' } }; describe('HelpTooltip.getHelpText', () => { it('should return English text when lang is en', () => { const text = getHelpText(sampleContent, 'metadata', 'en', 'en'); expect(text).toBe('Metadata displays general information about the ONNX model.'); }); it('should return Vietnamese text when lang is vi', () => { const text = getHelpText(sampleContent, 'metadata', 'vi', 'en'); expect(text).toBe('Siêu dữ liệu hiển thị thông tin chung về mô hình ONNX.'); }); it('should return Japanese text when lang is ja', () => { const text = getHelpText(sampleContent, 'metadata', 'ja', 'en'); expect(text).toBe('メタデータは、ONNXモデルに関する一般情報を表示します。'); }); it('should fall back to default lang when requested lang is missing', () => { // inputOutput has no 'ja' key const text = getHelpText(sampleContent, 'inputOutput', 'ja', 'en'); expect(text).toBe('Inputs & Outputs shows the tensor interfaces of the model.'); }); it('should return unavailable message when helpContent is null', () => { const text = getHelpText(null, 'metadata', 'en', 'en'); expect(text).toBe('Help content unavailable'); }); it('should return unavailable message for unknown section key', () => { const text = getHelpText(sampleContent, 'unknownSection', 'en', 'en'); expect(text).toBe('Help content unavailable'); }); it('should return unavailable message when section has no matching language at all', () => { const content = { test: {} }; const text = getHelpText(content, 'test', 'fr', 'de'); expect(text).toBe('Help content unavailable'); }); }); // Test language validation logic (mirrors HelpTooltip.setLanguage) function setLanguage(lang, currentLang) { if (['en', 'vi', 'ja'].indexOf(lang) === -1) return currentLang; return lang; } describe('HelpTooltip.setLanguage', () => { it('should accept valid language codes', () => { expect(setLanguage('en', 'vi')).toBe('en'); expect(setLanguage('vi', 'en')).toBe('vi'); expect(setLanguage('ja', 'en')).toBe('ja'); }); it('should reject invalid language codes', () => { expect(setLanguage('fr', 'en')).toBe('en'); expect(setLanguage('', 'en')).toBe('en'); expect(setLanguage('EN', 'vi')).toBe('vi'); }); });