File size: 4,414 Bytes
926b211
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/**
 * 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');
    });
  });
});