From dd9b8a3857b3218c654048aba36facd8e8465761 Mon Sep 17 00:00:00 2001 From: Timo K Date: Wed, 22 Nov 2023 12:08:31 +0100 Subject: [PATCH 1/2] fix misunderstanding of functional members Signed-off-by: Timo K --- src/models/Call.ts | 4 ++-- src/utils/room/getJoinedNonFunctionalMembers.ts | 4 +++- test/models/Call-test.ts | 17 ++++------------- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/models/Call.ts b/src/models/Call.ts index 9f41787c463..24de62334c9 100644 --- a/src/models/Call.ts +++ b/src/models/Call.ts @@ -53,7 +53,7 @@ import { getCurrentLanguage } from "../languageHandler"; import { FontWatcher } from "../settings/watchers/FontWatcher"; import { PosthogAnalytics } from "../PosthogAnalytics"; import { UPDATE_EVENT } from "../stores/AsyncStore"; -import { getFunctionalMembers } from "../utils/room/getFunctionalMembers"; +import { getJoinedNonFunctionalMembers } from "../utils/room/getJoinedNonFunctionalMembers"; const TIMEOUT_MS = 16000; @@ -773,7 +773,7 @@ export class ElementCall extends Call { // We only want to ring in rooms that have less or equal to NOTIFY_MEMBER_LIMIT participants. For really large rooms we don't want to ring. const NOTIFY_MEMBER_LIMIT = 15; - const memberCount = getFunctionalMembers(room).length; + const memberCount = getJoinedNonFunctionalMembers(room).length; if (!isVideoRoom && existingRoomCallMembers.length == 0 && memberCount <= NOTIFY_MEMBER_LIMIT) { // send ringing event const content: ICallNotifyContent = { diff --git a/src/utils/room/getJoinedNonFunctionalMembers.ts b/src/utils/room/getJoinedNonFunctionalMembers.ts index 20a1b37eb8b..a12284e7260 100644 --- a/src/utils/room/getJoinedNonFunctionalMembers.ts +++ b/src/utils/room/getJoinedNonFunctionalMembers.ts @@ -19,7 +19,9 @@ import { Room, RoomMember } from "matrix-js-sdk/src/matrix"; import { getFunctionalMembers } from "./getFunctionalMembers"; /** - * Returns all room members that are non-functional (bots etc.). + * Returns all room members that are non-functional (all actual room members). + * + * A functional user is a user that is not a real user, but a bot, assistant, etc. */ export const getJoinedNonFunctionalMembers = (room: Room): RoomMember[] => { const functionalMembers = getFunctionalMembers(room); diff --git a/test/models/Call-test.ts b/test/models/Call-test.ts index 78d0ad37fde..544426788dc 100644 --- a/test/models/Call-test.ts +++ b/test/models/Call-test.ts @@ -991,20 +991,11 @@ describe("ElementCall", () => { }); }); describe("create call", () => { - function setFunctionalMembers(members: string[]) { - room.currentState.setStateEvents([ - mkEvent({ - event: true, - type: UNSTABLE_ELEMENT_FUNCTIONAL_USERS.name, - user: "@user:example.com", - room: room.roomId, - skey: "", - content: { service_members: members }, - }), - ]); + function setRoomMembers(memberIds: string[]) { + jest.spyOn(room, "getJoinedMembers").mockReturnValue(memberIds.map((id) => ({ userId: id } as RoomMember))); } beforeEach(async () => { - setFunctionalMembers(["@user:example.com", "@user2:example.com", "@user4:example.com"]); + setRoomMembers(["@user:example.com", "@user2:example.com", "@user4:example.com"]); }); it("sends notify event on create in a room with more than two members", async () => { const sendEventSpy = jest.spyOn(room.client, "sendEvent"); @@ -1017,7 +1008,7 @@ describe("ElementCall", () => { }); }); it("sends ring on create in a DM (two participants) room", async () => { - setFunctionalMembers(["@user:example.com", "@user2:example.com"]); + setRoomMembers(["@user:example.com", "@user2:example.com"]); const sendEventSpy = jest.spyOn(room.client, "sendEvent"); await ElementCall.create(room); From 83303a9abfada5c0c8bb147d67adf0756ff57adf Mon Sep 17 00:00:00 2001 From: Timo K Date: Wed, 22 Nov 2023 12:11:19 +0100 Subject: [PATCH 2/2] unused import Signed-off-by: Timo K --- test/models/Call-test.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/test/models/Call-test.ts b/test/models/Call-test.ts index 544426788dc..3b00e1cdd7e 100644 --- a/test/models/Call-test.ts +++ b/test/models/Call-test.ts @@ -17,15 +17,7 @@ limitations under the License. import EventEmitter from "events"; import { mocked } from "jest-mock"; import { waitFor } from "@testing-library/react"; -import { - RoomType, - Room, - RoomEvent, - MatrixEvent, - RoomStateEvent, - PendingEventOrdering, - UNSTABLE_ELEMENT_FUNCTIONAL_USERS, -} from "matrix-js-sdk/src/matrix"; +import { RoomType, Room, RoomEvent, MatrixEvent, RoomStateEvent, PendingEventOrdering } from "matrix-js-sdk/src/matrix"; import { Widget } from "matrix-widget-api"; // eslint-disable-next-line no-restricted-imports import { MatrixRTCSessionManagerEvents } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSessionManager";