Skip to content

Commit 22ce1e7

Browse files
committed
simplify tests and make them only use MembershipManagerInterface methods.
This allows to exchange the membershipManager with a different implementation.
1 parent 251eb28 commit 22ce1e7

1 file changed

Lines changed: 14 additions & 20 deletions

File tree

spec/unit/matrixrtc/MatrixRTCSession.spec.ts

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ limitations under the License.
1717
import { encodeBase64, EventType, MatrixClient, MatrixError, MatrixEvent, Room } from "../../../src";
1818
import { KnownMembership } from "../../../src/@types/membership";
1919
import { DEFAULT_EXPIRE_DURATION, SessionMembershipData } from "../../../src/matrixrtc/CallMembership";
20-
import { LocalMembershipManager } from "../../../src/matrixrtc/LocalMembershipManager";
2120
import { MatrixRTCSession, MatrixRTCSessionEvent } from "../../../src/matrixrtc/MatrixRTCSession";
2221
import { EncryptionKeysEventContent } from "../../../src/matrixrtc/types";
2322
import { randomString } from "../../../src/randomstring";
23+
import { flushPromises } from "../../test-utils/flushPromises";
2424
import { makeMockRoom, makeMockRoomState, membershipTemplate } from "./mocks";
2525

2626
const mockFocus = { type: "mock" };
@@ -236,16 +236,15 @@ describe("MatrixRTCSession", () => {
236236
});
237237

238238
async function testSession(membershipData: SessionMembershipData): Promise<void> {
239-
const makeNewMembershipSpy = jest.spyOn(LocalMembershipManager.prototype as any, "makeNewMembership");
240239
sess = MatrixRTCSession.roomSessionForRoom(client, makeMockRoom(membershipData));
241240

242241
sess.joinRoomSession([mockFocus], mockFocus, joinSessionConfig);
243242
await Promise.race([sentStateEvent, new Promise((resolve) => setTimeout(resolve, 500))]);
244243

245-
expect(makeNewMembershipSpy).toHaveBeenCalledTimes(1);
244+
expect(sendStateEventMock).toHaveBeenCalledTimes(1);
246245

247246
await Promise.race([sentDelayedState, new Promise((resolve) => setTimeout(resolve, 500))]);
248-
expect(client._unstable_sendDelayedStateEvent).toHaveBeenCalledTimes(1);
247+
expect(sendDelayedStateMock).toHaveBeenCalledTimes(1);
249248
}
250249

251250
it("sends events", async () => {
@@ -323,9 +322,11 @@ describe("MatrixRTCSession", () => {
323322
let sendStateEventMock: jest.Mock;
324323
let sendDelayedStateMock: jest.Mock;
325324
let sendEventMock: jest.Mock;
325+
let updateDelayedEventMock: jest.Mock;
326326

327327
let sentStateEvent: Promise<void>;
328328
let sentDelayedState: Promise<void>;
329+
let updatedDelayedEvent: Promise<void>;
329330

330331
beforeEach(() => {
331332
sentStateEvent = new Promise((resolve) => {
@@ -339,12 +340,15 @@ describe("MatrixRTCSession", () => {
339340
};
340341
});
341342
});
343+
updatedDelayedEvent = new Promise((r) => {
344+
updateDelayedEventMock = jest.fn(r);
345+
});
342346
sendEventMock = jest.fn();
343347
client.sendStateEvent = sendStateEventMock;
344348
client._unstable_sendDelayedStateEvent = sendDelayedStateMock;
345349
client.sendEvent = sendEventMock;
346350

347-
client._unstable_updateDelayedEvent = jest.fn();
351+
client._unstable_updateDelayedEvent = updateDelayedEventMock;
348352

349353
mockRoom = makeMockRoom([]);
350354
sess = MatrixRTCSession.roomSessionForRoom(client, mockRoom);
@@ -482,19 +486,7 @@ describe("MatrixRTCSession", () => {
482486
membershipServerSideExpiryTimeout: 9000,
483487
});
484488

485-
// needed to advance the mock timers properly
486-
// depends on myMembershipManager being created
487-
const scheduledDelayDisconnection = new Promise<void>((resolve) => {
488-
const membershipManager = (sess as any).membershipManager;
489-
const originalFn: () => void = membershipManager.scheduleDelayDisconnection;
490-
membershipManager.scheduleDelayDisconnection = jest.fn(() => {
491-
originalFn.call(membershipManager);
492-
resolve();
493-
});
494-
});
495-
496489
await sendDelayedStateExceedAttempt.then(); // needed to resolve after the send attempt catches
497-
498490
await sendDelayedStateAttempt;
499491
const callProps = (d: number) => {
500492
return [mockRoom!.roomId, { delay: d }, "org.matrix.msc3401.call.member", {}, userStateKey];
@@ -525,11 +517,13 @@ describe("MatrixRTCSession", () => {
525517
await sentDelayedState;
526518

527519
// should have prepared the heartbeat to keep delaying the leave event while still connected
528-
await scheduledDelayDisconnection;
529-
// should have tried updating the delayed leave to test that it wasn't replaced by own state
520+
await updatedDelayedEvent;
530521
expect(client._unstable_updateDelayedEvent).toHaveBeenCalledTimes(1);
531-
// should update delayed disconnect
522+
523+
// ensures that we reach the code that schedules the timeout for the next delay update before we advance the timers.
524+
await flushPromises();
532525
jest.advanceTimersByTime(5000);
526+
// should update delayed disconnect
533527
expect(client._unstable_updateDelayedEvent).toHaveBeenCalledTimes(2);
534528

535529
jest.useRealTimers();

0 commit comments

Comments
 (0)