CI: add a Playwright smoke test that boots the built client and exercises the composer in an E2EE room #90

Closed
opened 2026-09-12 01:57:42 -04:00 by jared · 0 comments
Owner

Location: .gitea/workflows/ci.yml (no browser step), src/**/*.test.ts (104 files, all pure logic; zero .test.tsx, no jsdom, no Playwright)

Problem

Nothing in CI renders a component or loads the app in a browser. The two critical E2EE findings (#6 compress-image uploads plaintext, #7 scheduled messages bypass encryption) live in RoomInput.tsx, which has no test coverage of any kind, and both would have been caught by a single end-to-end assertion that an attachment sent in an encrypted room carries a file block rather than a url.

Suggested fix

Add a Playwright job (the runner already has Chromium via ~/.cache/ms-playwright) that: serves dist/ with vite preview, logs in with a throwaway account on a test homeserver (or a local Synapse container), opens an encrypted DM with itself, sends a text message, an image with "compress" ticked, and a GIF, and asserts the resulting events are m.room.encrypted with file blocks. Gate it on pull requests first; promote to a push gate once it is stable. Keep it to 3–5 scenarios so it stays under two minutes.


Filed from the September 2026 client audit (CI pipeline review, branch lotus @ 4bea4895).

**Location:** `.gitea/workflows/ci.yml` (no browser step), `src/**/*.test.ts` (104 files, all pure logic; zero `.test.tsx`, no jsdom, no Playwright) ### Problem Nothing in CI renders a component or loads the app in a browser. The two critical E2EE findings (#6 compress-image uploads plaintext, #7 scheduled messages bypass encryption) live in `RoomInput.tsx`, which has no test coverage of any kind, and both would have been caught by a single end-to-end assertion that an attachment sent in an encrypted room carries a `file` block rather than a `url`. ### Suggested fix Add a Playwright job (the runner already has Chromium via `~/.cache/ms-playwright`) that: serves `dist/` with `vite preview`, logs in with a throwaway account on a test homeserver (or a local Synapse container), opens an encrypted DM with itself, sends a text message, an image with "compress" ticked, and a GIF, and asserts the resulting events are `m.room.encrypted` with `file` blocks. Gate it on pull requests first; promote to a push gate once it is stable. Keep it to 3–5 scenarios so it stays under two minutes. --- _Filed from the September 2026 client audit (CI pipeline review, branch `lotus` @ 4bea4895)._
jared added this to the Audit 2026-09 · High milestone 2026-09-12 01:57:42 -04:00
jared added the priority: hightech-debtarea: build-ci labels 2026-09-12 01:57:42 -04:00
jared self-assigned this 2026-09-12 01:57:42 -04:00
jared closed this issue 2026-09-13 00:56:44 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
2026-10-14
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#90