fix(web): пинг участника показывается только при наведении

Постоянная подпись в плитке занимала место и была не нужна: задержка теперь
живёт в подсказке индикатора связи («Отличное соединение, 46 мс — задержка до
голосового сервера»), а плитка осталась компактной. Тесты и e2e проверяют
`title`/`aria-label` индикатора вместо видимого текста.
This commit is contained in:
2026-09-20 22:30:24 +03:00
parent 96acc40031
commit cc16c18b13
6 changed files with 29 additions and 50 deletions
+16 -10
View File
@@ -198,7 +198,7 @@ describe('голосовая комната: вход', () => {
expect(voice.joinCount()).toBe(0);
});
it('показывает пинг участника рядом с качеством связи', { timeout: 20_000 }, async () => {
it('показывает пинг участника в подсказке индикатора связи', { timeout: 20_000 }, async () => {
await bootVoice({ seated: [{ user_id: 'user-2', channel_id: 'c-voice' }] });
await clickChannel('Голосовая');
@@ -211,19 +211,24 @@ describe('голосовая комната: вход', () => {
['pair', { type: 'candidate-pair', state: 'succeeded', currentRoundTripTime: 0.042 }],
]);
// Первый такт может прийтись на момент, когда микрофон ещё не опубликован,
// поэтому ждём следующего (интервал публикации пинга — секунда).
// поэтому ждём следующего (интервал публикации пинга — секунда). Пинг виден
// только при наведении: он попадает в подсказку индикатора связи.
const ownQuality = () =>
within(screen.getByTestId('voice-tile-user-1')).getByTestId('voice-quality');
await waitFor(
() => {
expect(
within(screen.getByTestId('voice-tile-user-1')).getByTestId('voice-quality-label'),
).toHaveTextContent('42 мс');
expect(ownQuality()).toHaveAttribute(
'title',
expect.stringContaining('Отличное соединение, 42 мс'),
);
},
{ timeout: 5_000 },
);
const ownLabel = within(screen.getByTestId('voice-tile-user-1')).getByTestId(
'voice-quality-label',
expect(ownQuality()).toHaveAttribute('data-latency', '42');
expect(ownQuality()).toHaveAttribute(
'aria-label',
expect.stringContaining('задержка до голосового сервера'),
);
expect(ownLabel).toHaveTextContent('Отличное соединение, 42 мс');
// Второй участник подключается к комнате и присылает свой пинг.
const remote = room.addRemote('user-2', 'Bob');
@@ -237,8 +242,9 @@ describe('голосовая комната: вход', () => {
const remoteTile = await screen.findByTestId('voice-tile-user-2');
await waitFor(
() => {
expect(within(remoteTile).getByTestId('voice-quality-label')).toHaveTextContent(
'Отличное соединение, 128 мс',
expect(within(remoteTile).getByTestId('voice-quality')).toHaveAttribute(
'title',
expect.stringContaining('Отличное соединение, 128 мс'),
);
},
{ timeout: 5_000 },