@@ -304,7 +304,10 @@ describe("MatrixRTCSession", () => {
304
304
let sentStateEvent : Promise < void > ;
305
305
beforeEach ( async ( ) => {
306
306
sentStateEvent = new Promise ( ( resolve ) => {
307
- sendStateEventMock = jest . fn ( resolve ) ;
307
+ sendStateEventMock = jest . fn ( ) . mockImplementation ( ( ) => {
308
+ resolve ( ) ;
309
+ return Promise . resolve ( { event_id : "id" } ) ;
310
+ } ) ;
308
311
} ) ;
309
312
sendEventMock = jest . fn ( ) . mockResolvedValue ( undefined ) ;
310
313
client . sendStateEvent = sendStateEventMock ;
@@ -349,14 +352,8 @@ describe("MatrixRTCSession", () => {
349
352
350
353
sess ! . joinRoomSession ( [ mockFocus ] , mockFocus , { notificationType : "ring" } ) ;
351
354
await Promise . race ( [ sentStateEvent , new Promise ( ( resolve ) => setTimeout ( resolve , 5000 ) ) ] ) ;
352
- const { resolve : r , promise : p } = Promise . withResolvers ( ) ;
353
- sess ?. once ( MatrixRTCSessionEvent . JoinStateChanged , r ) ;
354
- await p ;
355
355
mockRoomState ( mockRoom , [ { ...membershipTemplate , user_id : client . getUserId ( ) ! } ] ) ;
356
- sess ! . onRTCSessionMemberUpdate ( ) ;
357
- const { resolve, promise } = Promise . withResolvers ( ) ;
358
- sess ?. once ( MatrixRTCSessionEvent . MembershipsChanged , resolve ) ;
359
- await promise ;
356
+ await sess ! . onRTCSessionMemberUpdate ( ) ;
360
357
const ownMembershipId = sess ?. memberships [ 0 ] . eventId ;
361
358
362
359
expect ( client . sendEvent ) . toHaveBeenCalledWith ( mockRoom ! . roomId , EventType . RTCNotification , {
@@ -425,7 +422,8 @@ describe("MatrixRTCSession", () => {
425
422
} ,
426
423
] ) ;
427
424
428
- sess ! . onRTCSessionMemberUpdate ( ) ;
425
+ await sess ! . onRTCSessionMemberUpdate ( ) ;
426
+
429
427
const ownMembershipId = sess ?. memberships [ 0 ] . eventId ;
430
428
expect ( sess ! . getConsensusCallIntent ( ) ) . toEqual ( "audio" ) ;
431
429
@@ -476,13 +474,13 @@ describe("MatrixRTCSession", () => {
476
474
it ( "doesn't send a notification when joining an existing call" , async ( ) => {
477
475
// Add another member to the call so that it is considered an existing call
478
476
mockRoomState ( mockRoom , [ membershipTemplate ] ) ;
479
- sess ! . onRTCSessionMemberUpdate ( ) ;
477
+ await sess ! . onRTCSessionMemberUpdate ( ) ;
480
478
481
479
// Simulate a join, including the update to the room state
482
480
sess ! . joinRoomSession ( [ mockFocus ] , mockFocus , { notificationType : "ring" } ) ;
483
481
await Promise . race ( [ sentStateEvent , new Promise ( ( resolve ) => setTimeout ( resolve , 5000 ) ) ] ) ;
484
482
mockRoomState ( mockRoom , [ membershipTemplate , { ...membershipTemplate , user_id : client . getUserId ( ) ! } ] ) ;
485
- sess ! . onRTCSessionMemberUpdate ( ) ;
483
+ await sess ! . onRTCSessionMemberUpdate ( ) ;
486
484
487
485
expect ( client . sendEvent ) . not . toHaveBeenCalled ( ) ;
488
486
} ) ;
@@ -494,9 +492,9 @@ describe("MatrixRTCSession", () => {
494
492
// But this time we want to simulate a race condition in which we receive a state event
495
493
// from someone else, starting the call before our own state event has been sent
496
494
mockRoomState ( mockRoom , [ membershipTemplate ] ) ;
497
- sess ! . onRTCSessionMemberUpdate ( ) ;
495
+ await sess ! . onRTCSessionMemberUpdate ( ) ;
498
496
mockRoomState ( mockRoom , [ membershipTemplate , { ...membershipTemplate , user_id : client . getUserId ( ) ! } ] ) ;
499
- sess ! . onRTCSessionMemberUpdate ( ) ;
497
+ await sess ! . onRTCSessionMemberUpdate ( ) ;
500
498
501
499
// We assume that the responsibility to send a notification, if any, lies with the other
502
500
// participant that won the race
@@ -511,7 +509,7 @@ describe("MatrixRTCSession", () => {
511
509
512
510
const onMembershipsChanged = jest . fn ( ) ;
513
511
sess . on ( MatrixRTCSessionEvent . MembershipsChanged , onMembershipsChanged ) ;
514
- sess . onRTCSessionMemberUpdate ( ) ;
512
+ await sess . onRTCSessionMemberUpdate ( ) ;
515
513
516
514
expect ( onMembershipsChanged ) . not . toHaveBeenCalled ( ) ;
517
515
} ) ;
@@ -524,8 +522,8 @@ describe("MatrixRTCSession", () => {
524
522
sess . on ( MatrixRTCSessionEvent . MembershipsChanged , onMembershipsChanged ) ;
525
523
526
524
mockRoomState ( mockRoom , [ ] ) ;
527
- sess . onRTCSessionMemberUpdate ( ) ;
528
525
526
+ await sess . onRTCSessionMemberUpdate ( ) ;
529
527
expect ( onMembershipsChanged ) . toHaveBeenCalled ( ) ;
530
528
} ) ;
531
529
@@ -708,14 +706,14 @@ describe("MatrixRTCSession", () => {
708
706
709
707
// member2 leaves triggering key rotation
710
708
mockRoomState ( mockRoom , [ membershipTemplate ] ) ;
711
- sess . onRTCSessionMemberUpdate ( ) ;
709
+ await sess . onRTCSessionMemberUpdate ( ) ;
712
710
713
711
// member2 re-joins which should trigger an immediate re-send
714
712
const keysSentPromise2 = new Promise < EncryptionKeysEventContent > ( ( resolve ) => {
715
713
sendEventMock . mockImplementation ( ( _roomId , _evType , payload ) => resolve ( payload ) ) ;
716
714
} ) ;
717
715
mockRoomState ( mockRoom , [ membershipTemplate , member2 ] ) ;
718
- sess . onRTCSessionMemberUpdate ( ) ;
716
+ await sess . onRTCSessionMemberUpdate ( ) ;
719
717
// but, that immediate resend is throttled so we need to wait a bit
720
718
jest . advanceTimersByTime ( 1000 ) ;
721
719
const { keys } = await keysSentPromise2 ;
@@ -766,7 +764,7 @@ describe("MatrixRTCSession", () => {
766
764
} ) ;
767
765
768
766
mockRoomState ( mockRoom , [ membershipTemplate , member2 ] ) ;
769
- sess . onRTCSessionMemberUpdate ( ) ;
767
+ await sess . onRTCSessionMemberUpdate ( ) ;
770
768
771
769
await keysSentPromise2 ;
772
770
@@ -813,7 +811,7 @@ describe("MatrixRTCSession", () => {
813
811
sendEventMock . mockClear ( ) ;
814
812
815
813
// these should be a no-op:
816
- sess . onRTCSessionMemberUpdate ( ) ;
814
+ await sess . onRTCSessionMemberUpdate ( ) ;
817
815
expect ( sendEventMock ) . toHaveBeenCalledTimes ( 0 ) ;
818
816
expect ( sess ! . statistics . counters . roomEventEncryptionKeysSent ) . toEqual ( 1 ) ;
819
817
} finally {
@@ -858,7 +856,7 @@ describe("MatrixRTCSession", () => {
858
856
sendEventMock . mockClear ( ) ;
859
857
860
858
// this should be a no-op:
861
- sess . onRTCSessionMemberUpdate ( ) ;
859
+ await sess . onRTCSessionMemberUpdate ( ) ;
862
860
expect ( sendEventMock ) . toHaveBeenCalledTimes ( 0 ) ;
863
861
864
862
// advance time to avoid key throttling
@@ -873,7 +871,7 @@ describe("MatrixRTCSession", () => {
873
871
} ) ;
874
872
875
873
// this should re-send the key
876
- sess . onRTCSessionMemberUpdate ( ) ;
874
+ await sess . onRTCSessionMemberUpdate ( ) ;
877
875
878
876
await keysSentPromise2 ;
879
877
@@ -931,8 +929,10 @@ describe("MatrixRTCSession", () => {
931
929
} ) ;
932
930
933
931
mockRoomState ( mockRoom , [ membershipTemplate ] ) ;
934
- sess . onRTCSessionMemberUpdate ( ) ;
935
-
932
+ const { promise, resolve } = Promise . withResolvers ( ) ;
933
+ sess . once ( MatrixRTCSessionEvent . MembershipsChanged , resolve ) ;
934
+ await sess . onRTCSessionMemberUpdate ( ) ;
935
+ await promise ;
936
936
jest . advanceTimersByTime ( KEY_DELAY ) ;
937
937
expect ( sendKeySpy ) . toHaveBeenCalledTimes ( 1 ) ;
938
938
// check that we send the key with index 1 even though the send gets delayed when leaving.
@@ -998,7 +998,7 @@ describe("MatrixRTCSession", () => {
998
998
mockRoomState ( mockRoom , members . slice ( 0 , membersToTest - i ) ) ;
999
999
}
1000
1000
1001
- sess ! . onRTCSessionMemberUpdate ( ) ;
1001
+ await sess ! . onRTCSessionMemberUpdate ( ) ;
1002
1002
1003
1003
// advance time to avoid key throttling
1004
1004
jest . advanceTimersByTime ( 10000 ) ;
@@ -1037,7 +1037,7 @@ describe("MatrixRTCSession", () => {
1037
1037
} ) ;
1038
1038
1039
1039
mockRoomState ( mockRoom , [ membershipTemplate , member2 ] ) ;
1040
- sess . onRTCSessionMemberUpdate ( ) ;
1040
+ await sess . onRTCSessionMemberUpdate ( ) ;
1041
1041
1042
1042
await new Promise ( ( resolve ) => {
1043
1043
realSetTimeout ( resolve ) ;
@@ -1064,7 +1064,7 @@ describe("MatrixRTCSession", () => {
1064
1064
manageMediaKeys : true ,
1065
1065
useExperimentalToDeviceTransport : true ,
1066
1066
} ) ;
1067
- sess . onRTCSessionMemberUpdate ( ) ;
1067
+ await sess . onRTCSessionMemberUpdate ( ) ;
1068
1068
1069
1069
await keySentPromise ;
1070
1070
0 commit comments