feat(web): профиль с аватаром, панель в углу, настройки сервера, скрытые ID
Правки пользователя: - в «Профиль → Основной» сверху квадратный аватар слева, справа от него настройки имени, «О себе», состояния и эмодзи во всю высоту; смена аватара — клик по нему, форматы (JPEG, PNG, WebP, GIF до 8 МБ) — в подсказке; - убраны дубли: часовой пояс только в «Язык и регион», статус — только в мини-профиле панели; - панель пользователя переехала в нижний левый угол под сайдбар, подсказка о выходе из сервера — на её прежнее место; панель ужата под 240 px; - шестерёнка сервера открывает новый пункт настроек «Сервер» (список серверов, общее, участники, роли, опасная зона), а «Профиль → Сервер» оставлен только для ника и «Применить ко всем серверам»; - окно настроек получило статический размер 70% рабочей области со скроллом; - ID пользователей скрыты везде, кроме раздела «Инстанс» у администратора; - список друзей свёрнут под кнопкой «Друзья (N)» и раскрывается снизу вверх; - 249 тестов Vitest (было 239), check/lint/test/build зелёные.
This commit is contained in:
@@ -129,6 +129,14 @@ describe('основной экран', () => {
|
||||
// «Покинуть сервер» из сайдбара убрано: выход живёт в «Опасной зоне».
|
||||
expect(screen.queryByRole('button', { name: 'Покинуть сервер' })).toBeNull();
|
||||
|
||||
// Панель пользователя стоит под сайдбаром в левой колонке, а подсказка о
|
||||
// выходе с сервера — внизу области контента.
|
||||
const column = screen.getByTestId('app-sidebar-column');
|
||||
const sidebar = screen.getByRole('complementary', { name: 'Комнаты' });
|
||||
expect(column).toContainElement(panel);
|
||||
expect(sidebar.compareDocumentPosition(panel)).toBe(Node.DOCUMENT_POSITION_FOLLOWING);
|
||||
expect(screen.getByTestId('guild-leave-hint')).toHaveTextContent('Опасная зона');
|
||||
|
||||
// Фаза 2: вместо заглушки в области комнаты открывается чат.
|
||||
expect(await screen.findByTestId('composer')).toBeVisible();
|
||||
expect(await screen.findByTestId('chat-start')).toHaveTextContent('Это начало комнаты #общий');
|
||||
@@ -155,7 +163,7 @@ describe('основной экран', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('шестерёнка настроек сервера видна владельцу и открывает окно настроек', async () => {
|
||||
it('шестерёнка настроек сервера видна владельцу и открывает администрирование этого сервера', async () => {
|
||||
const { default: userEvent } = await import('@testing-library/user-event');
|
||||
const visitor = userEvent.setup();
|
||||
installFetch([
|
||||
@@ -194,10 +202,15 @@ describe('основной экран', () => {
|
||||
// Настройки — модальное окно: из комнаты никуда не уходим.
|
||||
const dialog = await screen.findByRole('dialog', { name: 'Настройки' });
|
||||
expect(router.state.location.pathname).toBe('/app/g-1/c-general');
|
||||
expect(await within(dialog).findByRole('tab', { name: 'Сервер' })).toHaveAttribute(
|
||||
'aria-selected',
|
||||
// Открылся пункт «Сервер» (администрирование) с этим же сервером.
|
||||
const nav = within(dialog).getByTestId('settings-nav');
|
||||
expect(within(nav).getByRole('button', { name: 'Сервер' })).toHaveAttribute(
|
||||
'aria-current',
|
||||
'true',
|
||||
);
|
||||
expect(await within(dialog).findByLabelText('Выбрать сервер')).toHaveTextContent(
|
||||
'Основной сервер',
|
||||
);
|
||||
expect(await within(dialog).findByLabelText('Название сервера')).toHaveValue('Основной сервер');
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user