| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import { fireEvent, screen } from '@testing-library/react';
- import { MemoryRouter } from 'react-router';
- import { afterEach, expect, test, vi } from 'vitest';
- import AppSidebar from '@/layouts/AppSidebar';
- import { renderWithProviders } from './test-utils';
- vi.mock('@/api/queries/useAllSettings', () => ({
- useAllSettings: () => ({ allSetting: {} }),
- }));
- afterEach(() => {
- localStorage.clear();
- });
- function renderSidebar() {
- return renderWithProviders(
- <MemoryRouter>
- <AppSidebar />
- </MemoryRouter>,
- );
- }
- test('keeps the sidebar expanded after pinning it from the header and restores the choice', () => {
- const first = renderSidebar();
- const sidebar = first.container.querySelector('.ant-layout-sider');
- const sidebarRoot = first.container.querySelector('.ant-sidebar');
- expect(sidebar?.classList.contains('ant-layout-sider-collapsed')).toBe(true);
- fireEvent.mouseEnter(sidebarRoot!);
- const pinButton = screen.getByRole('button', { name: 'Pin sidebar' });
- expect(pinButton.closest('.brand-actions')).not.toBeNull();
- fireEvent.click(pinButton);
- fireEvent.mouseLeave(sidebarRoot!);
- expect(sidebar?.classList.contains('ant-layout-sider-collapsed')).toBe(false);
- expect(sidebarRoot?.getAttribute('style')).toContain('--sider-rail: 220px');
- expect(localStorage.getItem('sidebar-pinned')).toBe('true');
- first.unmount();
- const second = renderSidebar();
- const restoredSidebar = second.container.querySelector('.ant-layout-sider');
- const restoredSidebarRoot = second.container.querySelector('.ant-sidebar');
- expect(restoredSidebar?.classList.contains('ant-layout-sider-collapsed')).toBe(false);
- expect(restoredSidebarRoot?.getAttribute('style')).toContain('--sider-rail: 220px');
- expect(screen.getByRole('button', { name: 'Pin sidebar' })).not.toBeNull();
- });
- test('returns to the compact rail after unpinning', () => {
- const view = renderSidebar();
- const sidebar = view.container.querySelector('.ant-layout-sider');
- const sidebarRoot = view.container.querySelector('.ant-sidebar');
- fireEvent.mouseEnter(sidebarRoot!);
- fireEvent.click(screen.getByRole('button', { name: 'Pin sidebar' }));
- fireEvent.click(screen.getByRole('button', { name: 'Pin sidebar' }));
- fireEvent.mouseLeave(sidebarRoot!);
- expect(sidebar?.classList.contains('ant-layout-sider-collapsed')).toBe(true);
- expect(sidebarRoot?.getAttribute('style')).toContain('--sider-rail: 72px');
- expect(localStorage.getItem('sidebar-pinned')).toBe('false');
- });
|