Outgoing voice was gated on the observer's roster copy of the remote user's voice state, which is signaling gossip. The signal server broadcasts `user_left` for any socket it declares dead, so a suspended laptop or a flaky hop wiped that copy and the observer detached its microphone from a peer that never left the channel - a silent member with no way back through the UI. `decideVoicePathRouting` now closes a path only on positive evidence: we left voice, the peer itself reported another channel or none, or the connection is gone. Missing gossip holds an established path instead. Opening still needs confirmation, so a guess never starts sending; the same rule gates playback, camera video, and the microphone a new connection puts in its first offer. Peers are also asked for their voice state when a connection or data channel comes up, so a rebuilt path re-confirms itself. Alongside it, the microphone can be switched mid-call: capture moves to a device service and rules, the live track is swapped with `replaceTrack` so the session is never renegotiated, and the speaking indicator follows the new stream.
End-to-End Tests
Playwright suite for the MetoYou / Toju product client. The tests exercise browser flows such as authentication, chat, voice, screen sharing, and settings with reusable page objects and helpers.
Commands
Run these from the repository root:
npm run test:e2eruns the full Playwright suite.npm run test:e2e:uiopens Playwright UI mode.npm run test:e2e:debugruns the suite in debug mode.npm run test:e2e:reportopens the HTML report intest-results/html-report.
You can also run npx playwright test from e2e/ directly.
Runtime
playwright.config.tsstartscd ../toju-app && npx ng serveas the test web server.- The suite targets
http://localhost:4200. - Tests currently run with a single Chromium worker.
- The browser launches with fake media-device flags and grants microphone/camera permissions.
- Artifacts are written to
../test-results/artifacts, and the HTML report is written to../test-results/html-report.
Structure
| Path | Description |
|---|---|
tests/ |
Test specs grouped by feature area such as auth/, chat/, voice/, screen-share/, and settings/ |
pages/ |
Reusable Playwright page objects |
helpers/ |
Test helpers, fake-server utilities, and WebRTC helpers |
fixtures/ |
Shared test fixtures |
Notes
- The suite is product-client focused; it does not currently spin up the marketing website.
- Keep reusable browser flows in
pages/and cross-test utilities inhelpers/.