import { act, render, screen } from '@testing-library/react';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { useUIStore } from '@/stores';
import { SettingsPage } from '../SettingsPage';
vi.mock('antd', () => ({
theme: {
useToken: () => ({
token: {
colorBgContainer: '#ffffff',
colorBgElevated: '#f8f8f8',
},
}),
},
}));
vi.mock('@/components/settings', () => ({
SettingsSidebar: () => ,
ProviderSettings: () =>
providers-content
,
GeneralSettings: () => general-content
,
DisplaySettings: () => display-content
,
ProxySettings: () => proxy-content
,
ShortcutSettings: () => shortcuts-content
,
DataManager: () => data-content
,
AboutPage: () => about-content
,
SearchProviderSettings: () => search-providers-content
,
McpServerSettings: () => mcp-servers-content
,
BackupCenter: () => backup-content
,
StorageSpaceManager: () => storage-content
,
}));
vi.mock('@/components/settings/DefaultModelSettings', () => ({
DefaultModelSettings: () => default-model-content
,
}));
vi.mock('@/components/settings/ConversationSettings', () => ({
ConversationSettings: () => conversation-settings-content
,
}));
describe('SettingsPage', () => {
beforeEach(() => {
act(() => {
useUIStore.setState({
activePage: 'settings',
previousPage: 'chat',
settingsSection: 'general',
selectedProviderId: null,
});
});
});
it('resets the content scroll position when switching settings sections', () => {
render();
const contentScroller = screen.getByText('general-content').parentElement as HTMLElement;
contentScroller.scrollTop = 480;
act(() => {
useUIStore.getState().setSettingsSection('display');
});
expect(screen.getByText('display-content')).toBeInTheDocument();
expect(contentScroller.scrollTop).toBe(0);
});
});