blob: 2cb5bb008452ed82d6b444a3c5d3f8af437e0811 [file] [log] [blame]
import React from 'react';
import { render, screen, waitFor, fireEvent } from '@testing-library/react';
import { MemoryRouter } from 'react-router-dom';
import '@testing-library/jest-dom';
import Administer from './Administer';
// 导入要模拟的API函数
import {
getAllUsers,
searchUsers,
getAllDiscounts,
getCurrentDiscount
} from '../api/administer';
import { getAnnouncements } from '../api/announcement';
// 模拟API模块
jest.mock('../api/administer');
jest.mock('../api/announcement');
describe('Administer Component', () => {
beforeEach(() => {
// 清除所有模拟的调用信息
jest.clearAllMocks();
localStorage.setItem('token', 'test-token');
});
test('renders user management tab by default', async () => {
getAllUsers.mockResolvedValue([]);
render(
<MemoryRouter>
<Administer />
</MemoryRouter>
);
expect(screen.getByText('用户管理')).toBeInTheDocument();
expect(screen.getByText('折扣管理')).toBeInTheDocument();
expect(screen.getByText('公告管理')).toBeInTheDocument();
});
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
}
];
getAllUsers.mockResolvedValue(mockUsers);
render(
<MemoryRouter>
<Administer />
</MemoryRouter>
);
await waitFor(() => {
expect(screen.getByText('testuser')).toBeInTheDocument();
});
});
test('handles user search', async () => {
const mockUsers = [
{
username: 'searchuser',
authority: 'USER',
registTime: '2023-01-01',
lastLogin: '2023-05-01',
upload: 1000,
download: 500,
shareRate: 2.0,
magicPoints: 100
}
];
searchUsers.mockResolvedValue(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 () => {
// 设置初始用户数据
getAllUsers.mockResolvedValue([]);
// 设置折扣数据
getAllDiscounts.mockResolvedValue([]);
getCurrentDiscount.mockResolvedValue(null);
// 设置公告数据
getAnnouncements.mockResolvedValue([]);
render(
<MemoryRouter>
<Administer />
</MemoryRouter>
);
// 切换到折扣管理标签
fireEvent.click(screen.getByText('折扣管理'));
await waitFor(() => {
expect(screen.getByText('添加新折扣')).toBeInTheDocument();
// 可以添加更多断言来验证折扣管理页面的内容
});
});
});