-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'florianduros/encryption-tab' into dbkr/e2e_toasts
- Loading branch information
Showing
115 changed files
with
3,816 additions
and
2,935 deletions.
There are no files selected for viewing
Validating CODEOWNERS rules …
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
/* | ||
Check failure on line 1 in playwright/e2e/crypto/backups-mas.spec.ts GitHub Actions / Run Tests [Chrome] 6/6[Chrome] › crypto/backups-mas.spec.ts:31:9 › Encryption state after registration › user is prompted to set up recovery
Check failure on line 1 in playwright/e2e/crypto/backups-mas.spec.ts GitHub Actions / Run Tests [Chrome] 6/6[Chrome] › crypto/backups-mas.spec.ts:48:9 › Key backup reset from elsewhere › Key backup is disabled when reset from elsewhere
|
||
Copyright 2024 New Vector Ltd. | ||
Copyright 2023 The Matrix.org Foundation C.I.C. | ||
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial | ||
Please see LICENSE files in the repository root for full details. | ||
*/ | ||
|
||
import { test, expect } from "../../element-web-test"; | ||
import { registerAccountMas } from "../oidc"; | ||
import { isDendrite } from "../../plugins/homeserver/dendrite"; | ||
import { TestClientServerAPI } from "../csAPI"; | ||
import { masHomeserver } from "../../plugins/homeserver/synapse/masHomeserver.ts"; | ||
|
||
// These tests register an account with MAS because then we go through the "normal" registration flow | ||
// and crypto gets set up. Using the 'user' fixture create a a user an synthesizes an existing login, | ||
// which is faster but leaves us without crypto set up. | ||
test.use(masHomeserver); | ||
test.describe("Encryption state after registration", () => { | ||
test.skip(isDendrite, "does not yet support MAS"); | ||
|
||
test("Key backup is enabled by default", async ({ page, mailhogClient, app }) => { | ||
await page.goto("/#/login"); | ||
await page.getByRole("button", { name: "Continue" }).click(); | ||
await registerAccountMas(page, mailhogClient, "alice", "[email protected]", "Pa$sW0rD!"); | ||
|
||
await app.settings.openUserSettings("Security & Privacy"); | ||
await expect(page.getByText("This session is backing up your keys.")).toBeVisible(); | ||
}); | ||
|
||
test("user is prompted to set up recovery", async ({ page, mailhogClient, app }) => { | ||
await page.goto("/#/login"); | ||
await page.getByRole("button", { name: "Continue" }).click(); | ||
await registerAccountMas(page, mailhogClient, "alice", "[email protected]", "Pa$sW0rD!"); | ||
|
||
await page.getByRole("button", { name: "Add room" }).click(); | ||
await page.getByRole("menuitem", { name: "New room" }).click(); | ||
await page.getByRole("textbox", { name: "Name" }).fill("test room"); | ||
await page.getByRole("button", { name: "Create room" }).click(); | ||
|
||
await expect(page.getByRole("heading", { name: "Set up recovery" })).toBeVisible(); | ||
}); | ||
}); | ||
|
||
test.describe("Key backup reset from elsewhere", () => { | ||
test.skip(isDendrite, "does not yet support MAS"); | ||
|
||
test("Key backup is disabled when reset from elsewhere", async ({ page, mailhogClient, request, homeserver }) => { | ||
const testUsername = "alice"; | ||
const testPassword = "Pa$sW0rD!"; | ||
|
||
// there's a delay before keys are uploaded so the error doesn't appear immediately: use a fake | ||
// clock so we can skip the delay | ||
await page.clock.install(); | ||
|
||
await page.goto("/#/login"); | ||
await page.getByRole("button", { name: "Continue" }).click(); | ||
await registerAccountMas(page, mailhogClient, testUsername, "[email protected]", testPassword); | ||
|
||
await page.getByRole("button", { name: "Add room" }).click(); | ||
await page.getByRole("menuitem", { name: "New room" }).click(); | ||
await page.getByRole("textbox", { name: "Name" }).fill("test room"); | ||
await page.getByRole("button", { name: "Create room" }).click(); | ||
|
||
// @ts-ignore - this runs in the browser scope where mxMatrixClientPeg is a thing. Here, it is not. | ||
const accessToken = await page.evaluate(() => mxMatrixClientPeg.get().getAccessToken()); | ||
|
||
const csAPI = new TestClientServerAPI(request, homeserver, accessToken); | ||
|
||
const backupInfo = await csAPI.getCurrentBackupInfo(); | ||
|
||
await csAPI.deleteBackupVersion(backupInfo.version); | ||
|
||
await page.getByRole("textbox", { name: "Send an encrypted message…" }).fill("/discardsession"); | ||
await page.getByRole("button", { name: "Send message" }).click(); | ||
|
||
await page.getByRole("textbox", { name: "Send an encrypted message…" }).fill("Message with broken key backup"); | ||
await page.getByRole("button", { name: "Send message" }).click(); | ||
|
||
// Should be the message we sent plus the room creation event | ||
await expect(page.locator(".mx_EventTile")).toHaveCount(2); | ||
await expect( | ||
page.locator(".mx_RoomView_MessageList > .mx_EventTile_last .mx_EventTile_receiptSent"), | ||
).toBeVisible(); | ||
|
||
// Wait for it to try uploading the key | ||
await page.clock.fastForward(20000); | ||
|
||
await expect(page.getByRole("heading", { level: 1, name: "New Recovery Method" })).toBeVisible(); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,10 +9,6 @@ Please see LICENSE files in the repository root for full details. | |
import { type Page } from "@playwright/test"; | ||
|
||
import { test, expect } from "../../element-web-test"; | ||
import { registerAccountMas } from "../oidc"; | ||
import { isDendrite } from "../../plugins/homeserver/dendrite"; | ||
import { TestClientServerAPI } from "../csAPI"; | ||
import { masHomeserver } from "../../plugins/homeserver/synapse/masHomeserver.ts"; | ||
|
||
async function expectBackupVersionToBe(page: Page, version: string) { | ||
await expect(page.locator(".mx_SecureBackupPanel_statusList tr:nth-child(5) td")).toHaveText( | ||
|
@@ -22,85 +18,6 @@ async function expectBackupVersionToBe(page: Page, version: string) { | |
await expect(page.locator(".mx_SecureBackupPanel_statusList tr:nth-child(6) td")).toHaveText(version); | ||
} | ||
|
||
// These tests register an account with MAS because then we go through the "normal" registration flow | ||
// and crypto gets set up. Using the 'user' fixture create a a user an synthesizes an existing login, | ||
// which is faster but leaves us without crypto set up. | ||
test.describe("Encryption state after registration", () => { | ||
test.use(masHomeserver); | ||
test.skip(isDendrite, "does not yet support MAS"); | ||
|
||
test("Key backup is enabled by default", async ({ page, mailhogClient, app }) => { | ||
await page.goto("/#/login"); | ||
await page.getByRole("button", { name: "Continue" }).click(); | ||
await registerAccountMas(page, mailhogClient, "alice", "[email protected]", "Pa$sW0rD!"); | ||
|
||
await app.settings.openUserSettings("Security & Privacy"); | ||
await expect(page.getByText("This session is backing up your keys.")).toBeVisible(); | ||
}); | ||
|
||
test("user is prompted to set up recovery", async ({ page, mailhogClient, app }) => { | ||
await page.goto("/#/login"); | ||
await page.getByRole("button", { name: "Continue" }).click(); | ||
await registerAccountMas(page, mailhogClient, "alice", "[email protected]", "Pa$sW0rD!"); | ||
|
||
await page.getByRole("button", { name: "Add room" }).click(); | ||
await page.getByRole("menuitem", { name: "New room" }).click(); | ||
await page.getByRole("textbox", { name: "Name" }).fill("test room"); | ||
await page.getByRole("button", { name: "Create room" }).click(); | ||
|
||
await expect(page.getByRole("heading", { name: "Set up recovery" })).toBeVisible(); | ||
}); | ||
}); | ||
|
||
test.describe("Key backup reset from elsewhere", () => { | ||
test.use(masHomeserver); | ||
test.skip(isDendrite, "does not yet support MAS"); | ||
|
||
test("Key backup is disabled when reset from elsewhere", async ({ page, mailhogClient, request, homeserver }) => { | ||
const testUsername = "alice"; | ||
const testPassword = "Pa$sW0rD!"; | ||
|
||
// there's a delay before keys are uploaded so the error doesn't appear immediately: use a fake | ||
// clock so we can skip the delay | ||
await page.clock.install(); | ||
|
||
await page.goto("/#/login"); | ||
await page.getByRole("button", { name: "Continue" }).click(); | ||
await registerAccountMas(page, mailhogClient, testUsername, "[email protected]", testPassword); | ||
|
||
await page.getByRole("button", { name: "Add room" }).click(); | ||
await page.getByRole("menuitem", { name: "New room" }).click(); | ||
await page.getByRole("textbox", { name: "Name" }).fill("test room"); | ||
await page.getByRole("button", { name: "Create room" }).click(); | ||
|
||
// @ts-ignore - this runs in the browser scope where mxMatrixClientPeg is a thing. Here, it is not. | ||
const accessToken = await page.evaluate(() => mxMatrixClientPeg.get().getAccessToken()); | ||
|
||
const csAPI = new TestClientServerAPI(request, homeserver, accessToken); | ||
|
||
const backupInfo = await csAPI.getCurrentBackupInfo(); | ||
|
||
await csAPI.deleteBackupVersion(backupInfo.version); | ||
|
||
await page.getByRole("textbox", { name: "Send an encrypted message…" }).fill("/discardsession"); | ||
await page.getByRole("button", { name: "Send message" }).click(); | ||
|
||
await page.getByRole("textbox", { name: "Send an encrypted message…" }).fill("Message with broken key backup"); | ||
await page.getByRole("button", { name: "Send message" }).click(); | ||
|
||
// Should be the message we sent plus the room creation event | ||
await expect(page.locator(".mx_EventTile")).toHaveCount(2); | ||
await expect( | ||
page.locator(".mx_RoomView_MessageList > .mx_EventTile_last .mx_EventTile_receiptSent"), | ||
).toBeVisible(); | ||
|
||
// Wait for it to try uploading the key | ||
await page.clock.fastForward(20000); | ||
|
||
await expect(page.getByRole("heading", { level: 1, name: "New Recovery Method" })).toBeVisible(); | ||
}); | ||
}); | ||
|
||
test.describe("Backups", () => { | ||
test.use({ | ||
displayName: "Hanako", | ||
|
Oops, something went wrong.