learning_ai_invt_trdg/web/src/views/SettingsView.dom.test.tsx

76 lines
2.5 KiB
TypeScript

// @vitest-environment jsdom
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { describe, expect, it, vi } from 'vitest';
import { AppContext, type AppContextValue } from '../context/AppContext';
import { SettingsView } from './SettingsView';
vi.mock('../tabs/SettingsTab', () => ({
SettingsTab: () => <div>Account settings content</div>,
}));
vi.mock('../tabs/ConfigTab', () => ({
ConfigTab: () => <div>Bot config content</div>,
}));
vi.mock('../tabs/AdminTab', () => ({
AdminTab: () => <div>Admin panel content</div>,
}));
const appContext: AppContextValue = {
botState: {
settings: { isAlgoEnabled: true },
symbols: {},
health: { tradingLoopHealthy: true, reconciliationLoopHealthy: true, capitalInvariantViolations: 0 },
alerts: [],
positions: [],
orders: [],
history: [],
uptime: 0,
} as any,
socket: null,
connected: true,
activeSymbol: '',
setActiveSymbol: vi.fn(),
isAdmin: true,
user: { id: 'admin-1' },
profile: { role: 'admin' },
showBacktestTab: false,
showMarketplaceTab: false,
handleSignOut: vi.fn(),
};
describe('SettingsView legacy surface contrast', () => {
it('contains legacy settings sections inside a dark contrast surface', async () => {
const user = userEvent.setup();
const { container } = render(
<AppContext.Provider value={appContext}>
<SettingsView />
</AppContext.Provider>,
);
const surface = container.querySelector('.settings-legacy-surface') as HTMLDivElement;
expect(surface).toBeInTheDocument();
expect(surface).toHaveStyle({ color: '#F9FAFB' });
expect(screen.getByText('Account settings content')).toBeInTheDocument();
await user.click(screen.getByRole('button', { name: 'Bot Config' }));
expect(screen.getByText('Bot config content')).toBeInTheDocument();
await user.click(screen.getByRole('button', { name: 'Admin Panel' }));
expect(screen.getByText('Admin panel content')).toBeInTheDocument();
});
it('hides admin-only sections for non-admin users', () => {
render(
<AppContext.Provider value={{ ...appContext, isAdmin: false, profile: { role: 'user' } as any }}>
<SettingsView />
</AppContext.Provider>,
);
expect(screen.getByRole('button', { name: 'Account' })).toBeInTheDocument();
expect(screen.queryByRole('button', { name: 'Bot Config' })).not.toBeInTheDocument();
expect(screen.queryByRole('button', { name: 'Admin Panel' })).not.toBeInTheDocument();
});
});