219 lines · 8.2 KB
/**
 * Multi-client browser e2e: two independent browsers (owner and collaborator) and one HTTP agent co-edit
 * the same file in VS Code for the Web, see each other's text and cursors, commit, and the collaborator
 * is kicked when their sessions are revoked.
 *
 *   EDITOR_E2E_URL=http://localhost:3000 GITFOR_TOKEN=... GITFOR_WRITER_TOKEN=... GITFOR_E2E_D1=... \
 *   E2E_LOGIN=tgr E2E_PASSWORD=... E2E_WRITER_LOGIN=... E2E_WRITER_PASSWORD=... bun run e2e/editor-browser.e2e.ts
 */
import { Browser, sleep, waitFor } from "./editor-cdp";
import {
  BASE,
  call,
  check,
  log,
  finish,
  LOCAL_D1,
  mint,
  PAT,
  quote,
  seedRepo,
  sql,
  WRITER_PAT,
} from "./editor-helpers";

const META = 4;
const SHIFT = 8;
const CONTROL = 2;
const ENTER = 13;
const REVOKE_WAIT_MS = 120_000;
const SHOTS = process.env.E2E_SCREENSHOTS ?? "";
const login = { name: process.env.E2E_LOGIN ?? "", password: process.env.E2E_PASSWORD ?? "" };
const writerLogin = { name: process.env.E2E_WRITER_LOGIN ?? "", password: process.env.E2E_WRITER_PASSWORD ?? "" };
if (!PAT || !WRITER_PAT || !login.name || !writerLogin.name)
  throw new Error("Set GITFOR_TOKEN, GITFOR_WRITER_TOKEN and both logins");

const repo = await seedRepo("editor-collab", {
  "README.md": "# collab\n",
  "src/app.ts": "export const answer = 41;\n",
});
const writer = await call("/api/v1/user", WRITER_PAT);