blob: 2cb5bb008452ed82d6b444a3c5d3f8af437e0811 [file] [log] [blame]
22301080a93bebb2025-05-27 19:48:11 +08001import React from 'react';
DREW5b1883e2025-06-07 10:41:32 +08002import { render, screen, waitFor, fireEvent } from '@testing-library/react';
22301080a93bebb2025-05-27 19:48:11 +08003import { MemoryRouter } from 'react-router-dom';
4import '@testing-library/jest-dom';
22301080a93bebb2025-05-27 19:48:11 +08005import Administer from './Administer';
6
DREW5b1883e2025-06-07 10:41:32 +08007// 导入要模拟的API函数
8import {
9 getAllUsers,
10 searchUsers,
11 getAllDiscounts,
12 getCurrentDiscount
13} from '../api/administer';
14import { getAnnouncements } from '../api/announcement';
DREWae420b22025-06-02 14:07:20 +080015
DREW5b1883e2025-06-07 10:41:32 +080016// 模拟API模块
17jest.mock('../api/administer');
18jest.mock('../api/announcement');
19
20describe('Administer Component', () => {
21 beforeEach(() => {
22 // 清除所有模拟的调用信息
23 jest.clearAllMocks();
DREWae420b22025-06-02 14:07:20 +080024 localStorage.setItem('token', 'test-token');
22301080a93bebb2025-05-27 19:48:11 +080025 });
26
DREWae420b22025-06-02 14:07:20 +080027 test('renders user management tab by default', async () => {
DREW5b1883e2025-06-07 10:41:32 +080028 getAllUsers.mockResolvedValue([]);
22301080a93bebb2025-05-27 19:48:11 +080029
DREWae420b22025-06-02 14:07:20 +080030 render(
22301080a93bebb2025-05-27 19:48:11 +080031 <MemoryRouter>
32 <Administer />
33 </MemoryRouter>
34 );
22301080a93bebb2025-05-27 19:48:11 +080035
22301080a93bebb2025-05-27 19:48:11 +080036 expect(screen.getByText('用户管理')).toBeInTheDocument();
37 expect(screen.getByText('折扣管理')).toBeInTheDocument();
DREWae420b22025-06-02 14:07:20 +080038 expect(screen.getByText('公告管理')).toBeInTheDocument();
22301080a93bebb2025-05-27 19:48:11 +080039 });
40
DREWae420b22025-06-02 14:07:20 +080041 test('fetches and displays users', async () => {
42 const mockUsers = [
43 {
44 username: 'testuser',
45 authority: 'USER',
46 registTime: '2023-01-01',
47 lastLogin: '2023-05-01',
48 upload: 1000,
49 download: 500,
50 shareRate: 2.0,
51 magicPoints: 100
52 }
53 ];
22301080a93bebb2025-05-27 19:48:11 +080054
DREW5b1883e2025-06-07 10:41:32 +080055 getAllUsers.mockResolvedValue(mockUsers);
DREWae420b22025-06-02 14:07:20 +080056
57 render(
58 <MemoryRouter>
59 <Administer />
60 </MemoryRouter>
61 );
22301080a93bebb2025-05-27 19:48:11 +080062
63 await waitFor(() => {
DREWae420b22025-06-02 14:07:20 +080064 expect(screen.getByText('testuser')).toBeInTheDocument();
22301080a93bebb2025-05-27 19:48:11 +080065 });
DREWae420b22025-06-02 14:07:20 +080066 });
67
68 test('handles user search', async () => {
69 const mockUsers = [
70 {
71 username: 'searchuser',
DREW5b1883e2025-06-07 10:41:32 +080072 authority: 'USER',
73 registTime: '2023-01-01',
74 lastLogin: '2023-05-01',
75 upload: 1000,
76 download: 500,
77 shareRate: 2.0,
78 magicPoints: 100
DREWae420b22025-06-02 14:07:20 +080079 }
80 ];
81
DREW5b1883e2025-06-07 10:41:32 +080082 searchUsers.mockResolvedValue(mockUsers);
DREWae420b22025-06-02 14:07:20 +080083
84 render(
85 <MemoryRouter>
86 <Administer />
87 </MemoryRouter>
88 );
89
90 fireEvent.change(screen.getByPlaceholderText('输入用户名搜索'), {
91 target: { value: 'search' }
92 });
93 fireEvent.click(screen.getByText('搜索'));
94
95 await waitFor(() => {
96 expect(screen.getByText('searchuser')).toBeInTheDocument();
97 });
98 });
99
100 test('switches between tabs', async () => {
DREW5b1883e2025-06-07 10:41:32 +0800101 // 设置初始用户数据
102 getAllUsers.mockResolvedValue([]);
103 // 设置折扣数据
104 getAllDiscounts.mockResolvedValue([]);
105 getCurrentDiscount.mockResolvedValue(null);
106 // 设置公告数据
107 getAnnouncements.mockResolvedValue([]);
DREWae420b22025-06-02 14:07:20 +0800108
109 render(
110 <MemoryRouter>
111 <Administer />
112 </MemoryRouter>
113 );
22301080a93bebb2025-05-27 19:48:11 +0800114
DREW5b1883e2025-06-07 10:41:32 +0800115 // 切换到折扣管理标签
22301080a93bebb2025-05-27 19:48:11 +0800116 fireEvent.click(screen.getByText('折扣管理'));
117
118 await waitFor(() => {
DREWae420b22025-06-02 14:07:20 +0800119 expect(screen.getByText('添加新折扣')).toBeInTheDocument();
DREW5b1883e2025-06-07 10:41:32 +0800120 // 可以添加更多断言来验证折扣管理页面的内容
22301080a93bebb2025-05-27 19:48:11 +0800121 });
122 });
123});