diff --git a/src/state/CallViewModel.test.ts b/src/state/CallViewModel.test.ts index 9f208112..5af59711 100644 --- a/src/state/CallViewModel.test.ts +++ b/src/state/CallViewModel.test.ts @@ -24,11 +24,7 @@ import { } from "livekit-client"; import * as ComponentsCore from "@livekit/components-core"; import { isEqual } from "lodash"; -import { - CallMembership, - MatrixRTCSession, - MatrixRTCSessionEvent, -} from "matrix-js-sdk/src/matrixrtc"; +import { CallMembership, MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc"; import { CallViewModel, Layout } from "./CallViewModel"; import { @@ -39,13 +35,13 @@ import { mockRemoteParticipant, withTestScheduler, mockMembership, + MockRTCSession, } from "../utils/test"; import { ECAddonConnectionState, ECConnectionState, } from "../livekit/useECConnectionState"; import { E2eeType } from "../e2ee/e2eeType"; -import { MockRoom, MockRTCSession } from "../useReactions.test"; vi.mock("@livekit/components-core"); @@ -199,12 +195,11 @@ function withCallViewModel( } as Partial as MatrixClient, getMember: (userId) => roomMembers.get(userId) ?? null, }); - const rtcSession = new MockRTCSession(room as unknown as MockRoom); - rtcMembers.subscribe((m) => { - // always prepend the local participant - rtcSession.memberships = [localRtcMember, ...m]; - rtcSession.emit(MatrixRTCSessionEvent.MembershipsChanged); - }); + const rtcSession = new MockRTCSession( + room, + localRtcMember, + [], + ).withMemberships(rtcMembers); const participantsSpy = vi .spyOn(ComponentsCore, "connectedParticipantsObserver") .mockReturnValue(remoteParticipants); diff --git a/src/utils/test.ts b/src/utils/test.ts index c6789a41..68971bbe 100644 --- a/src/utils/test.ts +++ b/src/utils/test.ts @@ -11,10 +11,14 @@ import { RoomMember, Room as MatrixRoom, MatrixEvent, + Room, + TypedEventEmitter, } from "matrix-js-sdk/src/matrix"; import { CallMembership, Focus, + MatrixRTCSessionEvent, + MatrixRTCSessionEventHandlerMap, SessionMembershipData, } from "matrix-js-sdk/src/matrixrtc"; import { @@ -229,3 +233,30 @@ export async function withRemoteMedia( vm.destroy(); } } + +export class MockRTCSession extends TypedEventEmitter< + MatrixRTCSessionEvent, + MatrixRTCSessionEventHandlerMap +> { + public constructor( + public readonly room: Room, + private localMembership: CallMembership, + public memberships: CallMembership[] = [], + ) { + super(); + } + + public withMemberships( + rtcMembers: Observable[]>, + ): MockRTCSession { + rtcMembers.subscribe((m) => { + const old = this.memberships; + // always prepend the local participant + const updated = [this.localMembership, ...(m as CallMembership[])]; + this.memberships = updated; + this.emit(MatrixRTCSessionEvent.MembershipsChanged, old, updated); + }); + + return this; + } +}