完成上传下载连接,公告管理与详情页面,求种区页面,轮播图折扣显示,修改部分bug

Change-Id: I86fc294e32911cb3426a8b16f90aca371f975c11
diff --git a/src/components/Administer.test.jsx b/src/components/Administer.test.jsx
index 5a452fa..7f446ed 100644
--- a/src/components/Administer.test.jsx
+++ b/src/components/Administer.test.jsx
@@ -3,193 +3,122 @@
 import { MemoryRouter } from 'react-router-dom';
 import '@testing-library/jest-dom';
 import axios from 'axios';
+import MockAdapter from 'axios-mock-adapter';
 import Administer from './Administer';
 
-// Mock axios
-jest.mock('axios');
-
-// Mock localStorage
-const localStorageMock = {
-  getItem: jest.fn(),
-  setItem: jest.fn(),
-  removeItem: jest.fn(),
-  clear: jest.fn(),
-};
-global.localStorage = localStorageMock;
-
 describe('Administer Component', () => {
-  beforeEach(() => {
-    localStorageMock.getItem.mockReturnValue('test-token');
-    jest.clearAllMocks();
+  let mock;
+
+  beforeAll(() => {
+    mock = new MockAdapter(axios);
+    localStorage.setItem('token', 'test-token');
   });
 
-  const mockUsers = [
-    {
-      username: 'user1',
-      authority: 'USER',
-      registTime: '2023-01-01T00:00:00',
-      lastLogin: '2023-05-01T00:00:00',
-      upload: 1000,
-      download: 500,
-      shareRate: 2.0,
-      magicPoints: 100
-    },
-    {
-      username: 'admin1',
-      authority: 'ADMIN',
-      registTime: '2023-01-15T00:00:00',
-      lastLogin: '2023-05-10T00:00:00',
-      upload: 5000,
-      download: 1000,
-      shareRate: 5.0,
-      magicPoints: 500
-    }
-  ];
+  afterEach(() => {
+    mock.reset();
+  });
 
-  const mockDiscounts = [
-    {
-      id: 1,
-      name: '五一活动',
-      discountType: 'FREE',
-      startTime: '2023-05-01T00:00:00',
-      endTime: '2023-05-07T23:59:59',
-      createTime: '2023-04-25T10:00:00',
-      status: '已过期'
-    },
-    {
-      id: 2,
-      name: '端午节活动',
-      discountType: 'HALF',
-      startTime: '2023-06-10T00:00:00',
-      endTime: '2023-06-15T23:59:59',
-      createTime: '2023-05-30T10:00:00',
-      status: '已过期'
-    }
-  ];
+  afterAll(() => {
+    mock.restore();
+  });
 
-  const mockCurrentDiscount = {
-    id: 3,
-    name: '国庆活动',
-    discountType: 'DOUBLE',
-    startTime: '2023-10-01T00:00:00',
-    endTime: '2023-10-07T23:59:59',
-    createTime: '2023-09-25T10:00:00',
-    status: '进行中'
-  };
+  test('renders user management tab by default', async () => {
+    mock.onGet('http://localhost:8088/user/allUser').reply(200, {
+      code: 200,
+      data: { data: [] }
+    });
 
-  const renderAdminister = () => {
-    return render(
+    render(
       <MemoryRouter>
         <Administer />
       </MemoryRouter>
     );
-  };
 
-  test('renders Administer component with user tab by default', async () => {
-    axios.get.mockResolvedValueOnce({
-      data: {
-        code: 200,
-        data: { data: mockUsers }
-      }
-    });
-
-    renderAdminister();
-
-    expect(screen.getByText('系统管理')).toBeInTheDocument();
     expect(screen.getByText('用户管理')).toBeInTheDocument();
     expect(screen.getByText('折扣管理')).toBeInTheDocument();
-
-    await waitFor(() => {
-      expect(screen.getByText('user1')).toBeInTheDocument();
-    });
-    
-    expect(screen.getByText('admin1')).toBeInTheDocument();
+    expect(screen.getByText('公告管理')).toBeInTheDocument();
   });
 
-  test('switches between user and discount tabs', async () => {
-    axios.get
-      .mockResolvedValueOnce({
-        data: {
-          code: 200,
-          data: { data: mockUsers }
-        }
-      })
-      .mockResolvedValueOnce({
-        data: {
-          code: 200,
-          data: { data: mockDiscounts }
-        }
-      })
-      .mockResolvedValueOnce({
-        data: {
-          code: 200,
-          data: { data: mockCurrentDiscount }
-        }
-      });
+  test('fetches and displays users', async () => {
+    const mockUsers = [
+      {
+        username: 'testuser',
+        authority: 'USER',
+        registTime: '2023-01-01',
+        lastLogin: '2023-05-01',
+        upload: 1000,
+        download: 500,
+        shareRate: 2.0,
+        magicPoints: 100
+      }
+    ];
 
-    renderAdminister();
+    mock.onGet('http://localhost:8088/user/allUser').reply(200, {
+      code: 200,
+      data: { data: mockUsers }
+    });
+
+    render(
+      <MemoryRouter>
+        <Administer />
+      </MemoryRouter>
+    );
 
     await waitFor(() => {
-      expect(screen.getByText('user1')).toBeInTheDocument();
+      expect(screen.getByText('testuser')).toBeInTheDocument();
     });
+  });
+
+  test('handles user search', async () => {
+    const mockUsers = [
+      {
+        username: 'searchuser',
+        authority: 'USER'
+      }
+    ];
+
+    mock.onGet('http://localhost:8088/user/searchUser').reply(200, {
+      code: 200,
+      data: { data: mockUsers }
+    });
+
+    render(
+      <MemoryRouter>
+        <Administer />
+      </MemoryRouter>
+    );
+
+    fireEvent.change(screen.getByPlaceholderText('输入用户名搜索'), {
+      target: { value: 'search' }
+    });
+    fireEvent.click(screen.getByText('搜索'));
+
+    await waitFor(() => {
+      expect(screen.getByText('searchuser')).toBeInTheDocument();
+    });
+  });
+
+  test('switches between tabs', async () => {
+    mock.onGet('http://localhost:8088/user/allUser').reply(200, {
+      code: 200,
+      data: { data: [] }
+    });
+
+    mock.onGet('http://localhost:8088/discount/all').reply(200, {
+      code: 200,
+      data: { data: [] }
+    });
+
+    render(
+      <MemoryRouter>
+        <Administer />
+      </MemoryRouter>
+    );
 
     fireEvent.click(screen.getByText('折扣管理'));
 
     await waitFor(() => {
-      expect(screen.getByText('五一活动')).toBeInTheDocument();
-    });
-    
-    expect(screen.getByText('国庆活动')).toBeInTheDocument();
-  });
-
- 
-
-  test('changes user authority', async () => {
-    axios.get.mockResolvedValueOnce({
-      data: {
-        code: 200,
-        data: { data: mockUsers }
-      }
-    });
-    axios.put.mockResolvedValueOnce({
-      data: {
-        code: 200,
-        message: '修改用户权限成功'
-      }
-    });
-
-    renderAdminister();
-
-    await waitFor(() => {
-      expect(screen.getByText('user1')).toBeInTheDocument();
-    });
-
-    const selectElement = screen.getAllByRole('combobox')[0];
-    fireEvent.change(selectElement, { target: { value: 'ADMIN' } });
-
-    await waitFor(() => {
-      expect(axios.put).toHaveBeenCalled();
-    });
-    
-    expect(axios.put).toHaveBeenCalledWith(
-      expect.stringContaining('/user/changeAuthority'),
-      {
-        changeUsername: 'user1',
-        authority: 'ADMIN'
-      },
-      expect.any(Object)
-    );
-  });
-
-
-
-  test('shows error messages', async () => {
-    axios.get.mockRejectedValueOnce(new Error('Network Error'));
-
-    renderAdminister();
-
-    await waitFor(() => {
-      expect(screen.getByText(/获取用户列表失败/)).toBeInTheDocument();
+      expect(screen.getByText('添加新折扣')).toBeInTheDocument();
     });
   });
 });
\ No newline at end of file