From 422802ea6de9a36acbbee493bd0391d95805a4ce Mon Sep 17 00:00:00 2001 From: devonh Date: Thu, 19 Jan 2023 15:19:07 +0000 Subject: [PATCH] Add credentials when calling bootstrapCrossSigning in Cypress tests (#9919) --- cypress/e2e/crypto/crypto.spec.ts | 13 +++++++---- cypress/e2e/crypto/decryption-failure.spec.ts | 22 +++++-------------- cypress/support/bot.ts | 9 +++++++- cypress/support/client.ts | 14 +++++++++--- cypress/support/homeserver.ts | 2 ++ 5 files changed, 36 insertions(+), 24 deletions(-) diff --git a/cypress/e2e/crypto/crypto.spec.ts b/cypress/e2e/crypto/crypto.spec.ts index 716eff8ddb..306e94cb97 100644 --- a/cypress/e2e/crypto/crypto.spec.ts +++ b/cypress/e2e/crypto/crypto.spec.ts @@ -20,6 +20,7 @@ import type { ISasEvent } from "matrix-js-sdk/src/crypto/verification/SAS"; import type { CypressBot } from "../../support/bot"; import { HomeserverInstance } from "../../plugins/utils/homeserver"; import Chainable = Cypress.Chainable; +import { UserCredentials } from "../../support/login"; type EmojiMapping = [emoji: string, name: string]; interface CryptoTestContext extends Mocha.Context { @@ -154,11 +155,15 @@ const verify = function (this: CryptoTestContext) { }; describe("Cryptography", function () { + let aliceCredentials: UserCredentials; + beforeEach(function () { cy.startHomeserver("default") .as("homeserver") .then((homeserver: HomeserverInstance) => { - cy.initTestUser(homeserver, "Alice", undefined, "alice_"); + cy.initTestUser(homeserver, "Alice", undefined, "alice_").then((credentials) => { + aliceCredentials = credentials; + }); cy.getBot(homeserver, { displayName: "Bob", autoAcceptInvites: false, userIdPrefix: "bob_" }).as("bob"); }); }); @@ -183,7 +188,7 @@ describe("Cryptography", function () { }); it("creating a DM should work, being e2e-encrypted / user verification", function (this: CryptoTestContext) { - cy.bootstrapCrossSigning(); + cy.bootstrapCrossSigning(aliceCredentials); startDMWithBob.call(this); // send first message cy.get(".mx_BasicMessageComposer_input").click().should("have.focus").type("Hey!{enter}"); @@ -194,7 +199,7 @@ describe("Cryptography", function () { }); it("should allow verification when there is no existing DM", function (this: CryptoTestContext) { - cy.bootstrapCrossSigning(); + cy.bootstrapCrossSigning(aliceCredentials); autoJoin(this.bob); // we need to have a room with the other user present, so we can open the verification panel @@ -212,7 +217,7 @@ describe("Cryptography", function () { }); it("should show the correct shield on edited e2e events", function (this: CryptoTestContext) { - cy.bootstrapCrossSigning(); + cy.bootstrapCrossSigning(aliceCredentials); // bob has a second, not cross-signed, device cy.loginBot(this.homeserver, this.bob.getUserId(), this.bob.__cypress_password, {}).as("bobSecondDevice"); diff --git a/cypress/e2e/crypto/decryption-failure.spec.ts b/cypress/e2e/crypto/decryption-failure.spec.ts index 6cc0a69e3c..5f0a9056ad 100644 --- a/cypress/e2e/crypto/decryption-failure.spec.ts +++ b/cypress/e2e/crypto/decryption-failure.spec.ts @@ -105,15 +105,9 @@ describe("Decryption Failure Bar", () => { "and there are other verified devices or backups", () => { let otherDevice: MatrixClient | undefined; - cy.loginBot(homeserver, testUser.username, testUser.password, {}) + cy.loginBot(homeserver, testUser.username, testUser.password, { bootstrapCrossSigning: true }) .then(async (cli) => { otherDevice = cli; - await otherDevice.bootstrapCrossSigning({ - authUploadDeviceSigningKeys: async (makeRequest) => { - await makeRequest({}); - }, - setupNewCrossSigning: true, - }); }) .then(() => { cy.botSendMessage(bot, roomId, "test"); @@ -169,15 +163,11 @@ describe("Decryption Failure Bar", () => { "should prompt the user to reset keys, if this device isn't verified " + "and there are no other verified devices or backups", () => { - cy.loginBot(homeserver, testUser.username, testUser.password, {}).then(async (cli) => { - await cli.bootstrapCrossSigning({ - authUploadDeviceSigningKeys: async (makeRequest) => { - await makeRequest({}); - }, - setupNewCrossSigning: true, - }); - await cli.logout(true); - }); + cy.loginBot(homeserver, testUser.username, testUser.password, { bootstrapCrossSigning: true }).then( + async (cli) => { + await cli.logout(true); + }, + ); cy.botSendMessage(bot, roomId, "test"); cy.wait(5000); diff --git a/cypress/support/bot.ts b/cypress/support/bot.ts index 745ec4002c..9cb5e472de 100644 --- a/cypress/support/bot.ts +++ b/cypress/support/bot.ts @@ -150,7 +150,14 @@ function setupBotClient( if (opts.bootstrapCrossSigning) { await cli.bootstrapCrossSigning({ authUploadDeviceSigningKeys: async (func) => { - await func({}); + await func({ + type: "m.login.password", + identifier: { + type: "m.id.user", + user: credentials.userId, + }, + password: credentials.password, + }); }, }); } diff --git a/cypress/support/client.ts b/cypress/support/client.ts index 1195a6f303..c56608fadc 100644 --- a/cypress/support/client.ts +++ b/cypress/support/client.ts @@ -22,6 +22,7 @@ import type { MatrixClient } from "matrix-js-sdk/src/client"; import type { Room } from "matrix-js-sdk/src/models/room"; import type { IContent } from "matrix-js-sdk/src/models/event"; import Chainable = Cypress.Chainable; +import { UserCredentials } from "./login"; declare global { // eslint-disable-next-line @typescript-eslint/no-namespace @@ -119,7 +120,7 @@ declare global { /** * Boostraps cross-signing. */ - bootstrapCrossSigning(): Chainable; + bootstrapCrossSigning(credendtials: UserCredentials): Chainable; /** * Joins the given room by alias or ID * @param roomIdOrAlias the id or alias of the room to join @@ -210,11 +211,18 @@ Cypress.Commands.add("setAvatarUrl", (url: string): Chainable<{}> => { }); }); -Cypress.Commands.add("bootstrapCrossSigning", () => { +Cypress.Commands.add("bootstrapCrossSigning", (credentials: UserCredentials) => { cy.window({ log: false }).then((win) => { win.mxMatrixClientPeg.matrixClient.bootstrapCrossSigning({ authUploadDeviceSigningKeys: async (func) => { - await func({}); + await func({ + type: "m.login.password", + identifier: { + type: "m.id.user", + user: credentials.userId, + }, + password: credentials.password, + }); }, }); }); diff --git a/cypress/support/homeserver.ts b/cypress/support/homeserver.ts index 8510e3640a..3026c94b06 100644 --- a/cypress/support/homeserver.ts +++ b/cypress/support/homeserver.ts @@ -76,6 +76,7 @@ export interface Credentials { userId: string; deviceId: string; homeServer: string; + password: string; } function registerUser( @@ -120,6 +121,7 @@ function registerUser( accessToken: response.body.access_token, userId: response.body.user_id, deviceId: response.body.device_id, + password: password, })); }