Files
Toju/e2e
myxelium 92c2f578e2 fix(voice): route media on evidence and switch devices without dropping the call
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.
2026-08-14 03:19:29 +02:00
..
2026-04-18 21:27:04 +02:00

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:e2e runs the full Playwright suite.
  • npm run test:e2e:ui opens Playwright UI mode.
  • npm run test:e2e:debug runs the suite in debug mode.
  • npm run test:e2e:report opens the HTML report in test-results/html-report.

You can also run npx playwright test from e2e/ directly.

Runtime

  • playwright.config.ts starts cd ../toju-app && npx ng serve as 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 in helpers/.