import { describe, it, expect, vi } from 'vitest';
import { screen, waitFor } from '@testing-library/react';
import { renderWithProviders } from '../../test/utils/renderWithProviders';
// Mock useThemeMode
vi.mock('../../hooks/useThemeMode', () => ({
useThemeMode: () => false,
}));
import PointsRuleList from './PointsRuleList';
describe('PointsRuleList', () => {
it('renders page title and table', async () => {
vi.setConfig({ testTimeout: 15000 });
renderWithProviders();
await waitFor(() => {
expect(screen.getByText('积分规则')).toBeInTheDocument();
});
});
it('shows create button', async () => {
renderWithProviders();
await waitFor(() => {
expect(screen.getByRole('button', { name: /新建规则/ })).toBeInTheDocument();
});
});
it('renders table with column headers', async () => {
renderWithProviders();
await waitFor(() => {
const table = document.querySelector('.ant-table');
expect(table).toBeInTheDocument();
});
const headers = document.querySelectorAll('th');
const headerTexts = Array.from(headers).map((h) => h.textContent?.trim());
expect(headerTexts.some((t) => t?.includes('规则名称'))).toBe(true);
expect(headerTexts.some((t) => t?.includes('事件类型'))).toBe(true);
expect(headerTexts.some((t) => t?.includes('积分值'))).toBe(true);
});
it('shows filter controls', async () => {
renderWithProviders();
await waitFor(() => {
const selects = document.querySelectorAll('.ant-select');
expect(selects.length).toBeGreaterThanOrEqual(2);
});
});
});