From 4b3705d3f0b8c63ad67812bc3c26c6dbe524024f Mon Sep 17 00:00:00 2001 From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Date: Wed, 30 Nov 2022 13:03:47 +0000 Subject: [PATCH] Add a test for verifying without existing DM (#9619) A regression test for https://github.com/vector-im/element-web/issues/23819. --- cypress/e2e/crypto/crypto.spec.ts | 29 +++++++++++++++++++++++++++++ cypress/support/bot.ts | 1 + cypress/support/login.ts | 1 + 3 files changed, 31 insertions(+) diff --git a/cypress/e2e/crypto/crypto.spec.ts b/cypress/e2e/crypto/crypto.spec.ts index 650f8d585c3..2cfb7ba1a82 100644 --- a/cypress/e2e/crypto/crypto.spec.ts +++ b/cypress/e2e/crypto/crypto.spec.ts @@ -91,6 +91,17 @@ const bobJoin = function(this: CryptoTestContext) { cy.contains(".mx_TextualEvent", "Bob joined the room").should("exist"); }; +/** configure the given MatrixClient to auto-accept any invites */ +function autoJoin(client: MatrixClient) { + cy.window({ log: false }).then(async win => { + client.on(win.matrixcs.RoomMemberEvent.Membership, (event, member) => { + if (member.membership === "invite" && member.userId === client.getUserId()) { + client.joinRoom(member.roomId); + } + }); + }); +} + const handleVerificationRequest = (request: VerificationRequest): Chainable => { return cy.wrap(new Promise((resolve) => { const onShowSas = (event: ISasEvent) => { @@ -174,4 +185,22 @@ describe("Cryptography", function() { testMessages.call(this); verify.call(this); }); + + it("should allow verification when there is no existing DM", function(this: CryptoTestContext) { + cy.bootstrapCrossSigning(); + autoJoin(this.bob); + + /* we need to have a room with the other user present, so we can open the verification panel */ + let roomId: string; + cy.createRoom({ name: "TestRoom", invite: [this.bob.getUserId()] }).then(_room1Id => { + roomId = _room1Id; + cy.log(`Created test room ${roomId}`); + cy.visit(`/#/room/${roomId}`); + // wait for Bob to join the room, otherwise our attempt to open his user details may race + // with his join. + cy.contains(".mx_TextualEvent", "Bob joined the room").should("exist"); + }); + + verify.call(this); + }); }); diff --git a/cypress/support/bot.ts b/cypress/support/bot.ts index 26f0aa497e4..6161b11cdfb 100644 --- a/cypress/support/bot.ts +++ b/cypress/support/bot.ts @@ -78,6 +78,7 @@ Cypress.Commands.add("getBot", (synapse: SynapseInstance, opts: CreateBotOpts): const username = Cypress._.uniqueId("userId_"); const password = Cypress._.uniqueId("password_"); return cy.registerUser(synapse, username, password, opts.displayName).then(credentials => { + cy.log(`Registered bot user ${username} with displayname ${opts.displayName}`); return cy.window({ log: false }).then(win => { const cli = new win.matrixcs.MatrixClient({ baseUrl: synapse.baseUrl, diff --git a/cypress/support/login.ts b/cypress/support/login.ts index 6c441589415..4e1e50456f5 100644 --- a/cypress/support/login.ts +++ b/cypress/support/login.ts @@ -103,6 +103,7 @@ Cypress.Commands.add("initTestUser", (synapse: SynapseInstance, displayName: str return cy.registerUser(synapse, username, password, displayName).then(() => { return cy.loginUser(synapse, username, password); }).then(response => { + cy.log(`Registered test user ${username} with displayname ${displayName}`); cy.window({ log: false }).then(win => { // Seed the localStorage with the required credentials win.localStorage.setItem("mx_hs_url", synapse.baseUrl);