test(web): e2e-стенд Playwright для голосовой комнаты

Проверка голоса двумя реальными браузерами (AGENT.md 11.2): два контекста с
фейковыми медиа-устройствами входят в одну комнату, инструментируется
`RTCPeerConnection` и по `inbound-rtp` подтверждается, что аудио реально
доходит; затем серверный мьют блокирует микрофон у гостя, а отключение
участника убирает его плитку у обоих клиентов.

- `playwright.config.ts`: прогон против развёрнутого инстанса (`GLCHAT_URL`),
  трейс при падении, флаги фейковых медиа-устройств;
- `e2e/voice.spec.ts`: подготовка через REST (сервер, комната, инвайт, гость),
  завершение онбординга, уборка тестовых серверов и включение только по
  `GLCHAT_E2E_VOICE=1`;
- `tsconfig.e2e.json` и запись в eslint для новых файлов.
This commit is contained in:
2026-09-20 19:30:46 +03:00
parent 619bd91df4
commit 912a067c9a
7 changed files with 397 additions and 2 deletions
+32
View File
@@ -0,0 +1,32 @@
import { defineConfig, devices } from '@playwright/test';
/**
* Playwright-конфигурация glchat: e2e-тесты идут против уже развёрнутого
* инстанса (адрес в GLCHAT_URL, по умолчанию стенд), а не поднимают сервер —
* так проверяется реальный путь через прокси, TLS и TURN (AGENT.md 11.2).
*/
export default defineConfig({
testDir: './e2e',
timeout: 180_000,
expect: { timeout: 20_000 },
fullyParallel: false,
workers: 1,
retries: 0,
reporter: [['list']],
use: {
baseURL: process.env.GLCHAT_URL ?? 'https://gl.mhspx.su',
ignoreHTTPSErrors: true,
trace: 'retain-on-failure',
launchOptions: {
// Фейковые медиа-устройства: Chromium отдаёт синтетический звук, поэтому
// проверяется реальная доставка аудио через LiveKit (AGENT.md 11.2).
args: [
'--use-fake-device-for-media-stream',
'--use-fake-ui-for-media-stream',
'--autoplay-policy=no-user-gesture-required',
'--no-sandbox',
],
},
},
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
});