| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import { fireEvent, render, screen } from '@testing-library/react';
- import { beforeEach, expect, test, vi } from 'vitest';
- import SettingsPage from '@/pages/Settings';
- import { apiRequest } from '@/services/api';
- vi.mock('@/services/api', () => ({
- apiRequest: vi.fn(),
- jsonOptions: vi.fn((method, body) => ({ method, body: JSON.stringify(body) })),
- setCsrfToken: vi.fn(),
- setSelectedBotId: vi.fn(),
- }));
- beforeEach(() => {
- vi.mocked(apiRequest).mockImplementation(async (path) => {
- if (path === '/settings') {
- return {
- web_address: 'http://127.0.0.1:8088/admin',
- bind_host: '127.0.0.1',
- upload_limit_mb: 20,
- supervisor_mode: true,
- bot: { connected: false, id: '', username: '', name: '' },
- };
- }
- if (path === '/settings/telegram') {
- return {
- api_id: 12345,
- api_hash_configured: true,
- api_ready: true,
- permission_catalog: [
- {
- key: 'points.manage',
- name: '积分',
- group: '社区运营',
- description: '管理积分',
- },
- ],
- roles: [
- {
- role_id: 'full_access',
- name: '全部职责',
- description: '全部权限',
- permissions: ['points.manage'],
- builtin: true,
- },
- {
- role_id: 'points',
- name: '积分专员',
- description: '负责积分',
- permissions: ['points.manage'],
- builtin: false,
- },
- ],
- bots: [
- {
- bot_id: 'one',
- label: '主 Bot',
- enabled: true,
- bot_token_configured: true,
- sudo_users_id: [],
- log_group_id: '0',
- gban_log_group_id: '0',
- message_dump_chat: '-100123',
- role_ids: ['points'],
- permissions: ['points.manage'],
- identity: { id: '1', username: 'primary_bot', name: 'Primary' },
- ready_to_connect: true,
- runtime: { state: 'running' },
- },
- {
- bot_id: 'two',
- label: '备用 Bot',
- enabled: false,
- bot_token_configured: true,
- sudo_users_id: [],
- log_group_id: '0',
- gban_log_group_id: '0',
- message_dump_chat: '0',
- role_ids: [],
- permissions: [],
- identity: null,
- ready_to_connect: true,
- runtime: { state: 'stopped' },
- },
- ],
- };
- }
- throw new Error(`Unexpected request: ${path}`);
- });
- });
- test('展示多个机器人、脱敏凭据状态和运行状态', async () => {
- render(<SettingsPage />);
- expect(await screen.findByText('@primary_bot')).toBeInTheDocument();
- expect(screen.getByText('备用 Bot')).toBeInTheDocument();
- expect(screen.getAllByText('积分专员').length).toBeGreaterThan(0);
- expect(screen.getByText('未分配职责')).toBeInTheDocument();
- expect(screen.getByText('运行中')).toBeInTheDocument();
- expect(screen.getByText('已停用')).toBeInTheDocument();
- expect(screen.getAllByText('已配置')).toHaveLength(2);
- const credentialsLink = screen.getByRole('link', { name: 'my.telegram.org/apps' });
- expect(credentialsLink).toHaveAttribute('href', 'https://my.telegram.org/apps');
- expect(credentialsLink.parentElement).toHaveTextContent('不是机器人编号。');
- expect(screen.getByText('32 位十六进制字符串,不是机器人令牌。')).toBeInTheDocument();
- expect(screen.queryByText(/AA[A-Za-z0-9_-]{20}/)).not.toBeInTheDocument();
- fireEvent.click(screen.getByRole('button', { name: '新建角色' }));
- expect(await screen.findByText('新建职责角色')).toBeInTheDocument();
- expect(screen.getByRole('checkbox', { name: /积分/ })).toBeInTheDocument();
- });
|