添加了postsPanel作为通用帖子显示板,增加了对jest测试的配置,添加了论坛主页,设定了论坛全局框架,设定了论坛基础主题色及主题切换、字号切换逻辑

Change-Id: I9fad0cf577088adb00c9850d405ccd23e6072413
diff --git a/test/selfStatus.test.tsx b/test/selfStatus.test.tsx
new file mode 100644
index 0000000..4bd690e
--- /dev/null
+++ b/test/selfStatus.test.tsx
@@ -0,0 +1,77 @@
+import SelfStatus from '@/components/selfStatus/selfStatus';
+import { render, screen } from '@testing-library/react';
+import { useSelector } from 'react-redux';
+import React from 'react';
+import '@testing-library/jest-dom';
+import { useAppSelector } from '@/hooks/store';
+
+jest.mock('@/hooks/request', () => ({
+    useApi: jest.fn(),
+  }));
+  // 模拟所有外部依赖
+  jest.mock('@/hooks/store', () => ({
+    useAppDispatch: jest.fn(),
+    useAppSelector: jest.fn(),
+  }));
+  
+  jest.mock('react-router', () => ({
+    useNavigate: jest.fn(),
+  }));
+  
+  jest.mock('react-redux', () => ({
+    useSelector: jest.fn(),
+  }));
+
+
+describe('SelfStatus Component', () => {
+    it('renders correctly', () => {
+        (useAppSelector as jest.Mock).mockImplementation((selector) => selector({
+            user: {
+                userId: '001',
+                userName: 'san3yuan',
+                role: 'manager',
+                uploadTraffic: 0,
+                downloadTraffic: 0,
+                downloadPoints: 0,
+            },
+            setting: {
+                theme: 'light',
+            },
+        }));
+        
+        render(<SelfStatus />);
+        
+        expect(screen.getByText('san3yuan')).toBeInTheDocument();
+        expect(screen.getByText('用户组: manager')).toBeInTheDocument();
+        expect(screen.getByText('上传量: 0')).toBeInTheDocument();
+        expect(screen.getByText('下载量: 0')).toBeInTheDocument();
+        expect(screen.getByText('下载积分: 0')).toBeInTheDocument();
+    })
+    it('calculates and displays share ratio correctly', () => {
+        (useAppSelector as jest.Mock).mockImplementation((selector) => selector({
+            user: {
+                uploadTraffic: 100,
+                downloadTraffic: 50,
+            },
+        }));
+        render(<SelfStatus />);
+        expect(screen.getByText('分享率: 2.00')).toBeInTheDocument();
+    });
+    it('handles empty data gracefully', () => {
+        (useAppSelector as jest.Mock).mockImplementation((selector) => selector({
+            user: {
+                userName: '',
+                role: '',
+                uploadTraffic: null,
+                downloadTraffic: null,
+                downloadPoints: null,
+            },
+        }));
+        render(<SelfStatus />);
+        expect(screen.getByText('用户组: N/A')).toBeInTheDocument();
+        expect(screen.getByText('上传量: 0')).toBeInTheDocument();
+        expect(screen.getByText('下载量: 0')).toBeInTheDocument();        
+        expect(screen.getByText('分享率: N/A')).toBeInTheDocument();
+        expect(screen.getByText('下载积分: 0')).toBeInTheDocument();
+    });
+});
\ No newline at end of file