1
0
mirror of https://github.com/matrix-org/matrix-react-sdk.git synced 2025-08-09 08:42:50 +03:00

Always pass recent decryption retry successes to widgets

Potential fix for https://github.com/element-hq/element-call/issues/2561
This commit is contained in:
Hugh Nimmo-Smith
2024-08-14 17:46:39 +01:00
parent d9846dc62d
commit cbc55bd994
2 changed files with 58 additions and 10 deletions

View File

@@ -16,7 +16,7 @@ limitations under the License.
import { mocked, MockedObject } from "jest-mock";
import { last } from "lodash";
import { MatrixEvent, MatrixClient, ClientEvent, EventTimeline } from "matrix-js-sdk/src/matrix";
import { MatrixEvent, MatrixClient, ClientEvent, EventTimeline, MatrixEventEvent } from "matrix-js-sdk/src/matrix";
import { ClientWidgetApi, WidgetApiFromWidgetAction } from "matrix-widget-api";
import { waitFor } from "@testing-library/react";
@@ -185,6 +185,43 @@ describe("StopGapWidget", () => {
expect(messaging.feedEvent).toHaveBeenCalledTimes(2);
expect(messaging.feedEvent).toHaveBeenLastCalledWith(event.getEffectiveEvent(), "!1:example.org");
});
describe("e2ee", () => {
it("should not feed events that failed decryption", async () => {
event1.isDecryptionFailure = jest.fn().mockReturnValue(true);
client.emit(ClientEvent.Event, event1);
expect(messaging.feedEvent).toHaveBeenCalledTimes(0);
client.emit(MatrixEventEvent.Decrypted, event1);
expect(messaging.feedEvent).toHaveBeenCalledTimes(0);
});
it("should feed event after decryption retry success", async () => {
event1.isDecryptionFailure = jest.fn().mockReturnValue(true);
client.emit(ClientEvent.Event, event1);
expect(messaging.feedEvent).toHaveBeenCalledTimes(0);
event1.isDecryptionFailure = jest.fn().mockReturnValue(false);
client.emit(MatrixEventEvent.Decrypted, event1);
expect(messaging.feedEvent).toHaveBeenCalledTimes(1);
expect(messaging.feedEvent).toHaveBeenLastCalledWith(event1.getEffectiveEvent(), "!1:example.org");
});
it("should feed event after decryption success even if older", async () => {
event1.isDecryptionFailure = jest.fn().mockReturnValue(true);
client.emit(ClientEvent.Event, event1);
expect(messaging.feedEvent).toHaveBeenCalledTimes(0);
client.emit(ClientEvent.Event, event2);
expect(messaging.feedEvent).toHaveBeenCalledTimes(1);
expect(messaging.feedEvent).toHaveBeenLastCalledWith(event2.getEffectiveEvent(), "!1:example.org");
event1.isDecryptionFailure = jest.fn().mockReturnValue(false);
client.emit(MatrixEventEvent.Decrypted, event1);
expect(messaging.feedEvent).toHaveBeenCalledTimes(2);
expect(messaging.feedEvent).toHaveBeenLastCalledWith(event1.getEffectiveEvent(), "!1:example.org");
});
});
});
describe("when there is a voice broadcast recording", () => {