Merge branch 'develop' into feat/reply-support-wysiwyg-composer
This commit is contained in:
commit
4e8b731d2c
7 changed files with 160 additions and 20 deletions
|
@ -18,10 +18,11 @@ import EventEmitter from "events";
|
|||
import { mocked } from "jest-mock";
|
||||
import { waitFor } from "@testing-library/react";
|
||||
import { RoomType } from "matrix-js-sdk/src/@types/event";
|
||||
import { PendingEventOrdering } from "matrix-js-sdk/src/client";
|
||||
import { ClientEvent, PendingEventOrdering } from "matrix-js-sdk/src/client";
|
||||
import { Room, RoomEvent } from "matrix-js-sdk/src/models/room";
|
||||
import { RoomStateEvent } from "matrix-js-sdk/src/models/room-state";
|
||||
import { Widget } from "matrix-widget-api";
|
||||
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
|
||||
|
||||
import type { Mocked } from "jest-mock";
|
||||
import type { MatrixClient, IMyDevice } from "matrix-js-sdk/src/client";
|
||||
|
@ -85,6 +86,7 @@ const setUpClientRoomAndStores = (): {
|
|||
client.getRoom.mockImplementation(roomId => roomId === room.roomId ? room : null);
|
||||
client.getRooms.mockReturnValue([room]);
|
||||
client.getUserId.mockReturnValue(alice.userId);
|
||||
client.getDeviceId.mockReturnValue("alices_device");
|
||||
client.reEmitter.reEmit(room, [RoomStateEvent.Events]);
|
||||
client.sendStateEvent.mockImplementation(async (roomId, eventType, content, stateKey = "") => {
|
||||
if (roomId !== room.roomId) throw new Error("Unknown room");
|
||||
|
@ -814,6 +816,77 @@ describe("ElementCall", () => {
|
|||
call.off(CallEvent.Destroy, onDestroy);
|
||||
});
|
||||
|
||||
describe("being kicked out by another device", () => {
|
||||
const onDestroy = jest.fn();
|
||||
|
||||
beforeEach(async () => {
|
||||
await call.connect();
|
||||
call.on(CallEvent.Destroy, onDestroy);
|
||||
|
||||
jest.advanceTimersByTime(100);
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
call.off(CallEvent.Destroy, onDestroy);
|
||||
});
|
||||
|
||||
it("does not terminate the call if we are the last", async () => {
|
||||
client.emit(ClientEvent.ToDeviceEvent, {
|
||||
getType: () => (ElementCall.DUPLICATE_CALL_DEVICE_EVENT_TYPE),
|
||||
getContent: () => ({ device_id: "random_device_id", timestamp: Date.now() }),
|
||||
getSender: () => (client.getUserId()),
|
||||
} as MatrixEvent);
|
||||
|
||||
expect(client.sendStateEvent).not.toHaveBeenCalled();
|
||||
expect(
|
||||
[ConnectionState.Disconnecting, ConnectionState.Disconnected].includes(call.connectionState),
|
||||
).toBeTruthy();
|
||||
});
|
||||
|
||||
it("ignores messages from our device", async () => {
|
||||
client.emit(ClientEvent.ToDeviceEvent, {
|
||||
getSender: () => (client.getUserId()),
|
||||
getType: () => (ElementCall.DUPLICATE_CALL_DEVICE_EVENT_TYPE),
|
||||
getContent: () => ({ device_id: client.getDeviceId(), timestamp: Date.now() }),
|
||||
} as MatrixEvent);
|
||||
|
||||
expect(client.sendStateEvent).not.toHaveBeenCalled();
|
||||
expect(
|
||||
[ConnectionState.Disconnecting, ConnectionState.Disconnected].includes(call.connectionState),
|
||||
).toBeFalsy();
|
||||
expect(onDestroy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("ignores messages from other users", async () => {
|
||||
client.emit(ClientEvent.ToDeviceEvent, {
|
||||
getSender: () => (bob.userId),
|
||||
getType: () => (ElementCall.DUPLICATE_CALL_DEVICE_EVENT_TYPE),
|
||||
getContent: () => ({ device_id: "random_device_id", timestamp: Date.now() }),
|
||||
} as MatrixEvent);
|
||||
|
||||
expect(client.sendStateEvent).not.toHaveBeenCalled();
|
||||
expect(
|
||||
[ConnectionState.Disconnecting, ConnectionState.Disconnected].includes(call.connectionState),
|
||||
).toBeFalsy();
|
||||
expect(onDestroy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("ignores messages from the past", async () => {
|
||||
client.emit(ClientEvent.ToDeviceEvent, {
|
||||
getSender: () => (client.getUserId()),
|
||||
getType: () => (ElementCall.DUPLICATE_CALL_DEVICE_EVENT_TYPE),
|
||||
getContent: () => ({ device_id: "random_device_id", timestamp: 0 }),
|
||||
} as MatrixEvent);
|
||||
|
||||
expect(client.sendStateEvent).not.toHaveBeenCalled();
|
||||
expect(
|
||||
[ConnectionState.Disconnecting, ConnectionState.Disconnected].includes(call.connectionState),
|
||||
).toBeFalsy();
|
||||
expect(onDestroy).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
it("ends the call after a random delay if the last participant leaves without ending it", async () => {
|
||||
// Bob connects
|
||||
await client.sendStateEvent(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue