blob: 7f446ed47084a49fbdf898772293b04de944e580 [file] [log] [blame]
22301080a93bebb2025-05-27 19:48:11 +08001import React from 'react';
2import { render, screen, waitFor, fireEvent, act } from '@testing-library/react';
3import { MemoryRouter } from 'react-router-dom';
4import '@testing-library/jest-dom';
5import axios from 'axios';
DREWae420b22025-06-02 14:07:20 +08006import MockAdapter from 'axios-mock-adapter';
22301080a93bebb2025-05-27 19:48:11 +08007import Administer from './Administer';
8
22301080a93bebb2025-05-27 19:48:11 +08009describe('Administer Component', () => {
DREWae420b22025-06-02 14:07:20 +080010 let mock;
11
12 beforeAll(() => {
13 mock = new MockAdapter(axios);
14 localStorage.setItem('token', 'test-token');
22301080a93bebb2025-05-27 19:48:11 +080015 });
16
DREWae420b22025-06-02 14:07:20 +080017 afterEach(() => {
18 mock.reset();
19 });
22301080a93bebb2025-05-27 19:48:11 +080020
DREWae420b22025-06-02 14:07:20 +080021 afterAll(() => {
22 mock.restore();
23 });
22301080a93bebb2025-05-27 19:48:11 +080024
DREWae420b22025-06-02 14:07:20 +080025 test('renders user management tab by default', async () => {
26 mock.onGet('http://localhost:8088/user/allUser').reply(200, {
27 code: 200,
28 data: { data: [] }
29 });
22301080a93bebb2025-05-27 19:48:11 +080030
DREWae420b22025-06-02 14:07:20 +080031 render(
22301080a93bebb2025-05-27 19:48:11 +080032 <MemoryRouter>
33 <Administer />
34 </MemoryRouter>
35 );
22301080a93bebb2025-05-27 19:48:11 +080036
22301080a93bebb2025-05-27 19:48:11 +080037 expect(screen.getByText('用户管理')).toBeInTheDocument();
38 expect(screen.getByText('折扣管理')).toBeInTheDocument();
DREWae420b22025-06-02 14:07:20 +080039 expect(screen.getByText('公告管理')).toBeInTheDocument();
22301080a93bebb2025-05-27 19:48:11 +080040 });
41
DREWae420b22025-06-02 14:07:20 +080042 test('fetches and displays users', async () => {
43 const mockUsers = [
44 {
45 username: 'testuser',
46 authority: 'USER',
47 registTime: '2023-01-01',
48 lastLogin: '2023-05-01',
49 upload: 1000,
50 download: 500,
51 shareRate: 2.0,
52 magicPoints: 100
53 }
54 ];
22301080a93bebb2025-05-27 19:48:11 +080055
DREWae420b22025-06-02 14:07:20 +080056 mock.onGet('http://localhost:8088/user/allUser').reply(200, {
57 code: 200,
58 data: { data: mockUsers }
59 });
60
61 render(
62 <MemoryRouter>
63 <Administer />
64 </MemoryRouter>
65 );
22301080a93bebb2025-05-27 19:48:11 +080066
67 await waitFor(() => {
DREWae420b22025-06-02 14:07:20 +080068 expect(screen.getByText('testuser')).toBeInTheDocument();
22301080a93bebb2025-05-27 19:48:11 +080069 });
DREWae420b22025-06-02 14:07:20 +080070 });
71
72 test('handles user search', async () => {
73 const mockUsers = [
74 {
75 username: 'searchuser',
76 authority: 'USER'
77 }
78 ];
79
80 mock.onGet('http://localhost:8088/user/searchUser').reply(200, {
81 code: 200,
82 data: { data: mockUsers }
83 });
84
85 render(
86 <MemoryRouter>
87 <Administer />
88 </MemoryRouter>
89 );
90
91 fireEvent.change(screen.getByPlaceholderText('输入用户名搜索'), {
92 target: { value: 'search' }
93 });
94 fireEvent.click(screen.getByText('搜索'));
95
96 await waitFor(() => {
97 expect(screen.getByText('searchuser')).toBeInTheDocument();
98 });
99 });
100
101 test('switches between tabs', async () => {
102 mock.onGet('http://localhost:8088/user/allUser').reply(200, {
103 code: 200,
104 data: { data: [] }
105 });
106
107 mock.onGet('http://localhost:8088/discount/all').reply(200, {
108 code: 200,
109 data: { data: [] }
110 });
111
112 render(
113 <MemoryRouter>
114 <Administer />
115 </MemoryRouter>
116 );
22301080a93bebb2025-05-27 19:48:11 +0800117
118 fireEvent.click(screen.getByText('折扣管理'));
119
120 await waitFor(() => {
DREWae420b22025-06-02 14:07:20 +0800121 expect(screen.getByText('添加新折扣')).toBeInTheDocument();
22301080a93bebb2025-05-27 19:48:11 +0800122 });
123 });
124});