/** * Tests for ProjectHierarchyTable Current Node Rendering Logic */ import { describe, it, expect } from 'vitest'; /** * Simulate the renderCurrentNode logic for testing * This matches the exact implementation in ProjectHierarchyTable */ function renderCurrentNodeLogic(nodeValue: string): 'in-progress' | 'overdue' | 'completed' | 'default' { // Data cleaning: trim to remove invisible spaces const status = (nodeValue || '').toString().trim(); switch (status) { case '进行中': return 'in-progress'; case '已超时': return 'overdue'; case '已完成': return 'completed'; default: return 'default'; } } describe('ProjectHierarchyTable - Current Node Rendering', () => { describe('Critical Status Display', () => { it('should render "进行中" (In Progress) with yellow styling', () => { const result = renderCurrentNodeLogic('进行中'); expect(result).toBe('in-progress'); }); it('should render "已超时" (Overdue) with red styling', () => { const result = renderCurrentNodeLogic('已超时'); expect(result).toBe('overdue'); }); it('should render "已完成" (Completed) with green styling', () => { const result = renderCurrentNodeLogic('已完成'); expect(result).toBe('completed'); }); it('should handle text with leading/trailing whitespace', () => { expect(renderCurrentNodeLogic(' 进行中 ')).toBe('in-progress'); expect(renderCurrentNodeLogic(' 已超时 ')).toBe('overdue'); expect(renderCurrentNodeLogic('已完成 ')).toBe('completed'); }); }); describe('Non-Critical Status Display (Show All)', () => { it('should return default for "T1" status', () => { const result = renderCurrentNodeLogic('T1'); expect(result).toBe('default'); }); it('should return default for "PQR" status', () => { const result = renderCurrentNodeLogic('PQR'); expect(result).toBe('default'); }); it('should return default for "VMP" status', () => { const result = renderCurrentNodeLogic('VMP'); expect(result).toBe('default'); }); it('should return default for "MP" status', () => { const result = renderCurrentNodeLogic('MP'); expect(result).toBe('default'); }); it('should return default for "KICK OFF" status', () => { const result = renderCurrentNodeLogic('KICK OFF'); expect(result).toBe('default'); }); it('should return default for "G/L" status', () => { const result = renderCurrentNodeLogic('G/L'); expect(result).toBe('default'); }); it('should return default for "PB2" status', () => { const result = renderCurrentNodeLogic('PB2'); expect(result).toBe('default'); }); it('should return default for blank/empty string', () => { expect(renderCurrentNodeLogic('')).toBe('default'); expect(renderCurrentNodeLogic(' ')).toBe('default'); }); it('should return default for "-" placeholder', () => { const result = renderCurrentNodeLogic('-'); expect(result).toBe('default'); }); it('should return default for any other arbitrary text', () => { expect(renderCurrentNodeLogic('Random Text')).toBe('default'); expect(renderCurrentNodeLogic('测试')).toBe('default'); expect(renderCurrentNodeLogic('123')).toBe('default'); }); }); describe('Edge Cases', () => { it('should handle trailing spaces correctly (trim before match)', () => { // These SHOULD match after trimming expect(renderCurrentNodeLogic('进行中 ')).toBe('in-progress'); expect(renderCurrentNodeLogic(' 已超时')).toBe('overdue'); expect(renderCurrentNodeLogic(' 已完成 ')).toBe('completed'); }); it('should be case-sensitive (exact match required)', () => { // These should NOT match because they are not exact expect(renderCurrentNodeLogic('进行中。')).toBe('default'); // Extra punctuation expect(renderCurrentNodeLogic('已 超 时')).toBe('default'); // Extra spaces in middle expect(renderCurrentNodeLogic('COMPLETED')).toBe('default'); // English }); it('should handle undefined/null gracefully', () => { expect(renderCurrentNodeLogic(undefined as any)).toBe('default'); expect(renderCurrentNodeLogic(null as any)).toBe('default'); }); }); });