diff --git a/cypress/e2e/one-to-one-chat/one-to-one-chat.spec.ts b/cypress/e2e/one-to-one-chat/one-to-one-chat.spec.ts
new file mode 100644
index 0000000000..897b916105
--- /dev/null
+++ b/cypress/e2e/one-to-one-chat/one-to-one-chat.spec.ts
@@ -0,0 +1,61 @@
+/*
+Copyright 2023 Ahmad Kadri
+Copyright 2023 Nordeck IT + Consulting GmbH.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+///
+
+import { HomeserverInstance } from "../../plugins/utils/homeserver";
+import { Credentials } from "../../support/homeserver";
+
+describe("1:1 chat room", () => {
+ let homeserver: HomeserverInstance;
+ let user2: Credentials;
+
+ const username = "user1234";
+ const password = "p4s5W0rD";
+
+ beforeEach(() => {
+ cy.startHomeserver("default").then((data) => {
+ homeserver = data;
+
+ cy.initTestUser(homeserver, "Jeff");
+ cy.registerUser(homeserver, username, password).then((credential) => {
+ user2 = credential;
+ cy.visit(`/#/user/${user2.userId}?action=chat`);
+ });
+ });
+ });
+
+ afterEach(() => {
+ cy.stopHomeserver(homeserver);
+ });
+
+ it("should open new 1:1 chat room after leaving the old one", () => {
+ // leave 1:1 chat room
+ cy.contains(".mx_RoomHeader_nametext", username).click();
+ cy.contains('[role="menuitem"]', "Leave").click();
+ cy.get('[data-testid="dialog-primary-button"]').click();
+
+ // wait till the room was left
+ cy.get('[role="group"][aria-label="Historical"]').within(() => {
+ cy.contains(".mx_RoomTile", username);
+ });
+
+ // open new 1:1 chat room
+ cy.visit(`/#/user/${user2.userId}?action=chat`);
+ cy.contains(".mx_RoomHeader_nametext", username);
+ });
+});
diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx
index 429adb6f50..e517aaaf83 100644
--- a/src/components/structures/MatrixChat.tsx
+++ b/src/components/structures/MatrixChat.tsx
@@ -138,6 +138,7 @@ import { cleanUpBroadcasts, VoiceBroadcastResumer } from "../../voice-broadcast"
import GenericToast from "../views/toasts/GenericToast";
import { Linkify } from "../views/elements/Linkify";
import RovingSpotlightDialog, { Filter } from "../views/dialogs/spotlight/SpotlightDialog";
+import { findDMForUser } from "../../utils/dm/findDMForUser";
// legacy export
export { default as Views } from "../../Views";
@@ -1101,13 +1102,12 @@ export default class MatrixChat extends React.PureComponent {
// TODO: Immutable DMs replaces this
const client = MatrixClientPeg.get();
- const dmRoomMap = new DMRoomMap(client);
- const dmRooms = dmRoomMap.getDMRoomsForUserId(userId);
+ const dmRoom = findDMForUser(client, userId);
- if (dmRooms.length > 0) {
+ if (dmRoom) {
dis.dispatch({
action: Action.ViewRoom,
- room_id: dmRooms[0],
+ room_id: dmRoom.roomId,
metricsTrigger: "MessageUser",
});
} else {