Skip to content

Commit 4a75d2c

Browse files
authored
[matrixRTC] MatrixRTCSessions, add missing event reemission. (#5144)
* add missing event reemission. * review * CI (SonarCube Code quality)
1 parent 899cdb0 commit 4a75d2c

File tree

2 files changed

+65
-18
lines changed

2 files changed

+65
-18
lines changed

spec/unit/matrixrtc/MatrixRTCSession.spec.ts

Lines changed: 64 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
} from "../../../src";
2828
import { KnownMembership } from "../../../src/@types/membership";
2929
import { MatrixRTCSession, MatrixRTCSessionEvent } from "../../../src/matrixrtc/MatrixRTCSession";
30+
import { MembershipManagerEvent } from "../../../src/matrixrtc/IMembershipManager";
3031
import { Status, type EncryptionKeysEventContent } from "../../../src/matrixrtc/types";
3132
import {
3233
makeMockEvent,
@@ -499,8 +500,8 @@ describe("MatrixRTCSession", () => {
499500
livekit_service_url: "https://active.url",
500501
livekit_alias: "!active:active.url",
501502
};
502-
// eslint-disable-next-line @vitest/expect-expect
503-
it("gets the correct active focus with oldest_membership", () => {
503+
it("gets the correct active focus with oldest_membership", async () => {
504+
client.sendStateEvent = vi.fn();
504505
vi.useFakeTimers();
505506
vi.setSystemTime(3000);
506507
const mockRoom = makeMockRoom([
@@ -515,10 +516,36 @@ describe("MatrixRTCSession", () => {
515516

516517
sess = MatrixRTCSession.sessionForSlot(client, mockRoom, callSession);
517518

518-
sess.joinRTCSession(owmMemberIdentity, [{ type: "livekit", livekit_service_url: "htts://test.org" }], {
519-
type: "livekit",
520-
focus_selection: "oldest_membership",
521-
});
519+
sess.joinRTCSession(
520+
owmMemberIdentity,
521+
[{ type: "livekit", livekit_service_url: "htts://test.org" }],
522+
undefined,
523+
);
524+
await flushPromises();
525+
expect(client.sendStateEvent).toHaveBeenCalledWith(
526+
expect.any(String),
527+
"org.matrix.msc3401.call.member",
528+
{
529+
"application": "m.call",
530+
"call_id": "",
531+
"device_id": "AAAAAAA",
532+
"expires": 14400000,
533+
"foci_preferred": [
534+
{
535+
livekit_service_url: "htts://test.org",
536+
type: "livekit",
537+
},
538+
],
539+
"focus_active": {
540+
focus_selection: "oldest_membership",
541+
type: "livekit",
542+
},
543+
"m.call.intent": undefined,
544+
"membershipID": "@alice:example.org:AAAAAAA",
545+
"scope": "m.room",
546+
},
547+
"_@alice:example.org_AAAAAAA_m.call",
548+
);
522549
vi.useRealTimers();
523550
});
524551
it("does not provide focus if the selection method is unknown", () => {
@@ -738,6 +765,9 @@ describe("MatrixRTCSession", () => {
738765
mockRoomState(mockRoom, [membershipTemplate, { ...membershipTemplate, user_id: client.getUserId()! }]);
739766
await sess!._onRTCSessionMemberUpdate();
740767

768+
// check we send out join event
769+
expect(client.sendStateEvent).toHaveBeenCalled();
770+
// but no notification event
741771
expect(client.sendEvent).not.toHaveBeenCalled();
742772
});
743773

@@ -752,34 +782,31 @@ describe("MatrixRTCSession", () => {
752782
mockRoomState(mockRoom, [membershipTemplate, { ...membershipTemplate, user_id: client.getUserId()! }]);
753783
await sess!._onRTCSessionMemberUpdate();
754784

755-
// We assume that the responsibility to send a notification, if any, lies with the other
785+
// check we send out join event
786+
expect(client.sendStateEvent).toHaveBeenCalled();
787+
// but no notification event
788+
//
789+
// We assume that the responsibility to send a notification, if any, lies with the other
756790
// participant that won the race
757791
expect(client.sendEvent).not.toHaveBeenCalled();
758792
});
759793
});
760794

761795
describe("onMembershipsChanged", () => {
762-
it("does not emit if no membership changes", async () => {
796+
it("only emit if membership changes", async () => {
763797
const mockRoom = makeMockRoom([membershipTemplate]);
764798
sess = MatrixRTCSession.sessionForSlot(client, mockRoom, callSession);
765799
await flushPromises();
766800
const onMembershipsChanged = vi.fn();
767801
sess.on(MatrixRTCSessionEvent.MembershipsChanged, onMembershipsChanged);
768-
await sess._onRTCSessionMemberUpdate();
769802

803+
// no change -> no emission
804+
await sess._onRTCSessionMemberUpdate();
770805
expect(onMembershipsChanged).not.toHaveBeenCalled();
771-
});
772-
773-
it("emits on membership changes", async () => {
774-
const mockRoom = makeMockRoom([membershipTemplate]);
775-
sess = MatrixRTCSession.sessionForSlot(client, mockRoom, callSession);
776-
777-
const onMembershipsChanged = vi.fn();
778-
sess.on(MatrixRTCSessionEvent.MembershipsChanged, onMembershipsChanged);
779806

807+
// no change -> emission
780808
mockRoomState(mockRoom, []);
781809
await sess._onRTCSessionMemberUpdate();
782-
783810
expect(onMembershipsChanged).toHaveBeenCalled();
784811
});
785812

@@ -1704,5 +1731,24 @@ describe("MatrixRTCSession", () => {
17041731
expect(sess!.membershipStatus).toBe(Status.Connecting);
17051732
});
17061733
});
1734+
it("reemits membershipManager events", () => {
1735+
sess = MatrixRTCSession.sessionForSlot(client, makeMockRoom([membershipTemplate]), callSession);
1736+
const delayIdChanged = vi.fn();
1737+
sess.on(MembershipManagerEvent.DelayIdChanged, delayIdChanged);
1738+
const statusChanged = vi.fn();
1739+
sess.on(MembershipManagerEvent.StatusChanged, statusChanged);
1740+
const probablyLeftChanged = vi.fn();
1741+
sess.on(MembershipManagerEvent.ProbablyLeft, probablyLeftChanged);
1742+
1743+
sess!.joinRTCSession(owmMemberIdentity, [mockFocus], mockFocus);
1744+
1745+
const membershipManager = sess["membershipManager"]!;
1746+
membershipManager.emit(MembershipManagerEvent.DelayIdChanged, "newDelayId");
1747+
membershipManager.emit(MembershipManagerEvent.StatusChanged, Status.Connected, Status.Disconnected);
1748+
membershipManager.emit(MembershipManagerEvent.ProbablyLeft, false);
1749+
expect(delayIdChanged).toHaveBeenCalledWith("newDelayId", membershipManager);
1750+
expect(statusChanged).toHaveBeenCalledWith(Status.Connected, Status.Disconnected, membershipManager);
1751+
expect(probablyLeftChanged).toHaveBeenCalledWith(false, membershipManager);
1752+
});
17071753
});
17081754
});

src/matrixrtc/MatrixRTCSession.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,7 @@ export class MatrixRTCSession extends TypedEventEmitter<
499499
this.reEmitter.reEmit(this.membershipManager!, [
500500
MembershipManagerEvent.ProbablyLeft,
501501
MembershipManagerEvent.StatusChanged,
502+
MembershipManagerEvent.DelayIdChanged,
502503
]);
503504
// Create Encryption manager
504505
let transport;

0 commit comments

Comments
 (0)