From 6796375b10617d88786bef84458136c49fbb4903 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Tue, 2 Aug 2022 14:54:40 +0100
Subject: [PATCH] Fix dismissing edit composer when change was undone (#9109)
* Fix dismissing edit composer when change was undone
* Add tests
---
cypress/e2e/editing/editing.spec.ts | 70 +++++++++++++++++++
.../views/rooms/EditMessageComposer.tsx | 10 +--
2 files changed, 73 insertions(+), 7 deletions(-)
create mode 100644 cypress/e2e/editing/editing.spec.ts
diff --git a/cypress/e2e/editing/editing.spec.ts b/cypress/e2e/editing/editing.spec.ts
new file mode 100644
index 0000000000..49e4ae79b3
--- /dev/null
+++ b/cypress/e2e/editing/editing.spec.ts
@@ -0,0 +1,70 @@
+/*
+Copyright 2022 The Matrix.org Foundation C.I.C.
+
+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 { MessageEvent } from "matrix-events-sdk";
+
+import type { ISendEventResponse } from "matrix-js-sdk/src/@types/requests";
+import type { EventType } from "matrix-js-sdk/src/@types/event";
+import { SynapseInstance } from "../../plugins/synapsedocker";
+import Chainable = Cypress.Chainable;
+
+const sendEvent = (roomId: string): Chainable => {
+ return cy.sendEvent(
+ roomId,
+ null,
+ "m.room.message" as EventType,
+ MessageEvent.from("Message").serialize().content,
+ );
+};
+
+describe("Editing", () => {
+ let synapse: SynapseInstance;
+
+ beforeEach(() => {
+ cy.startSynapse("default").then(data => {
+ synapse = data;
+ cy.initTestUser(synapse, "Edith").then(() => {
+ cy.injectAxe();
+ return cy.createRoom({ name: "Test room" }).as("roomId");
+ });
+ });
+ });
+
+ afterEach(() => {
+ cy.stopSynapse(synapse);
+ });
+
+ it("should close the composer when clicking save after making a change and undoing it", () => {
+ cy.get("@roomId").then(roomId => {
+ sendEvent(roomId);
+ cy.visit("/#/room/" + roomId);
+ });
+
+ // Edit message
+ cy.contains(".mx_RoomView_body .mx_EventTile .mx_EventTile_line", "Message").within(() => {
+ cy.get('[aria-label="Edit"]').click({ force: true }); // Cypress has no ability to hover
+ cy.checkA11y();
+ cy.get(".mx_BasicMessageComposer_input").type("Foo{backspace}{backspace}{backspace}{enter}");
+ cy.checkA11y();
+ });
+ cy.get(".mx_RoomView_body .mx_EventTile").contains(".mx_EventTile[data-scroll-tokens]", "Message");
+
+ // Assert that the edit composer has gone away
+ cy.get(".mx_EditMessageComposer").should("not.exist");
+ });
+});
diff --git a/src/components/views/rooms/EditMessageComposer.tsx b/src/components/views/rooms/EditMessageComposer.tsx
index 83c494bca7..52312e1a99 100644
--- a/src/components/views/rooms/EditMessageComposer.tsx
+++ b/src/components/views/rooms/EditMessageComposer.tsx
@@ -213,6 +213,9 @@ class EditMessageComposer extends React.Component {
- this.clearStoredEditorState();
this.endEdit();
};
@@ -262,11 +264,6 @@ class EditMessageComposer extends React.Component