-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
* Use homeserver in a worker-scoped fixture Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Switch to TestContainers for manging services in Playwright Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Flip fixture dependency order Signed-off-by: Michael Telatynski <[email protected]> * Remove mas dep Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Update matrix-authentication-service in Playwright tests Signed-off-by: Michael Telatynski <[email protected]> * delint Signed-off-by: Michael Telatynski <[email protected]> * Fix SMTP port Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Comments Signed-off-by: Michael Telatynski <[email protected]> * Strip ansi from playwright logs to make them more readable Signed-off-by: Michael Telatynski <[email protected]> * Actually do the update Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Remove access to homeserver.config.baseUrl field in favour of homeserver.baseUrl Signed-off-by: Michael Telatynski <[email protected]> * Use sane default_server_config and specify server.invalid in the specific tests which demand it Signed-off-by: Michael Telatynski <[email protected]> * Fix mas run Signed-off-by: Michael Telatynski <[email protected]> * break cycle Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * typo Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * prettier Signed-off-by: Michael Telatynski <[email protected]> * Wire up basics of dendriteHomeserver Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Fix types Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Discard changes to playwright/e2e/settings/device-management.spec.ts * Iterate Signed-off-by: Michael Telatynski <[email protected]> * Fix bad merge Signed-off-by: Michael Telatynski <[email protected]> --------- Signed-off-by: Michael Telatynski <[email protected]>
- Loading branch information
There are no files selected for viewing
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
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(); | ||
}); | ||
}); |
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", | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,20 +16,21 @@ const username = "user1234"; | |
const password = "oETo7MPf0o"; | ||
const email = "[email protected]"; | ||
|
||
test.describe("Forgot Password", () => { | ||
test.skip(isDendrite, "not yet wired up"); | ||
test.use(emailHomeserver); | ||
test.use({ | ||
config: { | ||
// The only thing that we really *need* (otherwise Element refuses to load) is a default homeserver. | ||
// We point that to a guaranteed-invalid domain. | ||
default_server_config: { | ||
"m.homeserver": { | ||
base_url: "https://server.invalid", | ||
}, | ||
test.use(emailHomeserver); | ||
test.use({ | ||
config: { | ||
// The only thing that we really *need* (otherwise Element refuses to load) is a default homeserver. | ||
// We point that to a guaranteed-invalid domain. | ||
default_server_config: { | ||
"m.homeserver": { | ||
base_url: "https://server.invalid", | ||
}, | ||
}, | ||
}); | ||
}, | ||
}); | ||
|
||
test.describe("Forgot Password", () => { | ||
test.skip(isDendrite, "not yet wired up"); | ||
|
||
test("renders properly", { tag: "@screenshot" }, async ({ page, homeserver }) => { | ||
await page.goto("/"); | ||
|