From 4abde33bd6c988b23f4eded7f00c27242a1312e8 Mon Sep 17 00:00:00 2001 From: Andy Balaam Date: Mon, 14 Apr 2025 10:27:25 +0100 Subject: [PATCH] Playwright tests for resetting our identity --- playwright/e2e/login/login-consent.spec.ts | 37 +++++++++++++++++++ .../encryption-tab.spec.ts | 32 ++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/playwright/e2e/login/login-consent.spec.ts b/playwright/e2e/login/login-consent.spec.ts index c4a4b1409f..e164f48d4e 100644 --- a/playwright/e2e/login/login-consent.spec.ts +++ b/playwright/e2e/login/login-consent.spec.ts @@ -288,6 +288,43 @@ test.describe("Login", () => { await expect(h1).toBeVisible(); }); }); + + test("Can reset identity to become verified", async ({ page, homeserver, request, credentials }) => { + // Log in + const res = await request.post(`${homeserver.baseUrl}/_matrix/client/v3/keys/device_signing/upload`, { + headers: { Authorization: `Bearer ${credentials.accessToken}` }, + data: DEVICE_SIGNING_KEYS_BODY, + }); + if (res.status() / 100 !== 2) { + console.log("Uploading dummy keys failed", await res.json()); + } + expect(res.status() / 100).toEqual(2); + + await page.goto("/"); + await login(page, homeserver, credentials); + + await expect(page.getByRole("heading", { name: "Verify this device", level: 1 })).toBeVisible(); + + // Start the reset process + await page.getByRole("button", { name: "Proceed with reset" }).click(); + + // First try cancelling and restarting + await page.getByRole("button", { name: "Cancel" }).click(); + await page.getByRole("button", { name: "Proceed with reset" }).click(); + + // Then click outside the dialog and restart + await page.getByRole("link", { name: "Powered by Matrix" }).click({ force: true }); + await page.getByRole("button", { name: "Proceed with reset" }).click(); + + // Finally we actually continue + await page.getByRole("button", { name: "Continue" }).click(); + await page.getByPlaceholder("Password").fill(credentials.password); + await page.getByRole("button", { name: "Continue" }).click(); + + // We end up at the Home screen + await expect(page).toHaveURL(/\/#\/home$/, { timeout: 10000 }); + await expect(page.getByRole("heading", { name: "Welcome Dave", exact: true })).toBeVisible(); + }); }); }); diff --git a/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts b/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts index 4c9585267e..ed1daecf35 100644 --- a/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts +++ b/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts @@ -145,4 +145,36 @@ test.describe("Encryption tab", () => { } }); }); + + test.describe("when encryption is not set up", () => { + test("'Verify this device' allows us to become verified", async ({ + page, + user, + credentials, + app, + }, workerInfo) => { + const settings = await app.settings.openUserSettings("Encryption"); + + // Initially, our device is not verified + await expect(settings.getByRole("heading", { name: "Device not verified" })).toBeVisible(); + + // We will reset our identity + await settings.getByRole("button", { name: "Verify this device" }).click(); + await page.getByRole("button", { name: "Proceed with reset" }).click(); + + // First try cancelling and restarting + await page.getByRole("button", { name: "Cancel" }).click(); + await page.getByRole("button", { name: "Proceed with reset" }).click(); + + // Then click outside the dialog and restart + await page.locator("li").filter({ hasText: "Encryption" }).click({ force: true }); + await page.getByRole("button", { name: "Proceed with reset" }).click(); + + // Finally we actually continue + await page.getByRole("button", { name: "Continue" }).click(); + + // Now we are verified, so we see the Key storage toggle + await expect(settings.getByRole("heading", { name: "Key storage" })).toBeVisible(); + }); + }); });