@@ -304,7 +304,10 @@ describe("MatrixRTCSession", () => {
304304 let sentStateEvent : Promise < void > ;
305305 beforeEach ( async ( ) => {
306306 sentStateEvent = new Promise ( ( resolve ) => {
307- sendStateEventMock = jest . fn ( resolve ) ;
307+ sendStateEventMock = jest . fn ( ) . mockImplementation ( ( ) => {
308+ resolve ( ) ;
309+ return Promise . resolve ( { event_id : "id" } ) ;
310+ } ) ;
308311 } ) ;
309312 sendEventMock = jest . fn ( ) . mockResolvedValue ( undefined ) ;
310313 client . sendStateEvent = sendStateEventMock ;
@@ -349,14 +352,8 @@ describe("MatrixRTCSession", () => {
349352
350353 sess ! . joinRoomSession ( [ mockFocus ] , mockFocus , { notificationType : "ring" } ) ;
351354 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 ;
355355 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 ( ) ;
360357 const ownMembershipId = sess ?. memberships [ 0 ] . eventId ;
361358
362359 expect ( client . sendEvent ) . toHaveBeenCalledWith ( mockRoom ! . roomId , EventType . RTCNotification , {
@@ -425,7 +422,8 @@ describe("MatrixRTCSession", () => {
425422 } ,
426423 ] ) ;
427424
428- sess ! . onRTCSessionMemberUpdate ( ) ;
425+ await sess ! . onRTCSessionMemberUpdate ( ) ;
426+
429427 const ownMembershipId = sess ?. memberships [ 0 ] . eventId ;
430428 expect ( sess ! . getConsensusCallIntent ( ) ) . toEqual ( "audio" ) ;
431429
@@ -476,13 +474,13 @@ describe("MatrixRTCSession", () => {
476474 it ( "doesn't send a notification when joining an existing call" , async ( ) => {
477475 // Add another member to the call so that it is considered an existing call
478476 mockRoomState ( mockRoom , [ membershipTemplate ] ) ;
479- sess ! . onRTCSessionMemberUpdate ( ) ;
477+ await sess ! . onRTCSessionMemberUpdate ( ) ;
480478
481479 // Simulate a join, including the update to the room state
482480 sess ! . joinRoomSession ( [ mockFocus ] , mockFocus , { notificationType : "ring" } ) ;
483481 await Promise . race ( [ sentStateEvent , new Promise ( ( resolve ) => setTimeout ( resolve , 5000 ) ) ] ) ;
484482 mockRoomState ( mockRoom , [ membershipTemplate , { ...membershipTemplate , user_id : client . getUserId ( ) ! } ] ) ;
485- sess ! . onRTCSessionMemberUpdate ( ) ;
483+ await sess ! . onRTCSessionMemberUpdate ( ) ;
486484
487485 expect ( client . sendEvent ) . not . toHaveBeenCalled ( ) ;
488486 } ) ;
@@ -494,9 +492,9 @@ describe("MatrixRTCSession", () => {
494492 // But this time we want to simulate a race condition in which we receive a state event
495493 // from someone else, starting the call before our own state event has been sent
496494 mockRoomState ( mockRoom , [ membershipTemplate ] ) ;
497- sess ! . onRTCSessionMemberUpdate ( ) ;
495+ await sess ! . onRTCSessionMemberUpdate ( ) ;
498496 mockRoomState ( mockRoom , [ membershipTemplate , { ...membershipTemplate , user_id : client . getUserId ( ) ! } ] ) ;
499- sess ! . onRTCSessionMemberUpdate ( ) ;
497+ await sess ! . onRTCSessionMemberUpdate ( ) ;
500498
501499 // We assume that the responsibility to send a notification, if any, lies with the other
502500 // participant that won the race
@@ -511,7 +509,7 @@ describe("MatrixRTCSession", () => {
511509
512510 const onMembershipsChanged = jest . fn ( ) ;
513511 sess . on ( MatrixRTCSessionEvent . MembershipsChanged , onMembershipsChanged ) ;
514- sess . onRTCSessionMemberUpdate ( ) ;
512+ await sess . onRTCSessionMemberUpdate ( ) ;
515513
516514 expect ( onMembershipsChanged ) . not . toHaveBeenCalled ( ) ;
517515 } ) ;
@@ -524,8 +522,8 @@ describe("MatrixRTCSession", () => {
524522 sess . on ( MatrixRTCSessionEvent . MembershipsChanged , onMembershipsChanged ) ;
525523
526524 mockRoomState ( mockRoom , [ ] ) ;
527- sess . onRTCSessionMemberUpdate ( ) ;
528525
526+ await sess . onRTCSessionMemberUpdate ( ) ;
529527 expect ( onMembershipsChanged ) . toHaveBeenCalled ( ) ;
530528 } ) ;
531529
@@ -708,14 +706,14 @@ describe("MatrixRTCSession", () => {
708706
709707 // member2 leaves triggering key rotation
710708 mockRoomState ( mockRoom , [ membershipTemplate ] ) ;
711- sess . onRTCSessionMemberUpdate ( ) ;
709+ await sess . onRTCSessionMemberUpdate ( ) ;
712710
713711 // member2 re-joins which should trigger an immediate re-send
714712 const keysSentPromise2 = new Promise < EncryptionKeysEventContent > ( ( resolve ) => {
715713 sendEventMock . mockImplementation ( ( _roomId , _evType , payload ) => resolve ( payload ) ) ;
716714 } ) ;
717715 mockRoomState ( mockRoom , [ membershipTemplate , member2 ] ) ;
718- sess . onRTCSessionMemberUpdate ( ) ;
716+ await sess . onRTCSessionMemberUpdate ( ) ;
719717 // but, that immediate resend is throttled so we need to wait a bit
720718 jest . advanceTimersByTime ( 1000 ) ;
721719 const { keys } = await keysSentPromise2 ;
@@ -766,7 +764,7 @@ describe("MatrixRTCSession", () => {
766764 } ) ;
767765
768766 mockRoomState ( mockRoom , [ membershipTemplate , member2 ] ) ;
769- sess . onRTCSessionMemberUpdate ( ) ;
767+ await sess . onRTCSessionMemberUpdate ( ) ;
770768
771769 await keysSentPromise2 ;
772770
@@ -813,7 +811,7 @@ describe("MatrixRTCSession", () => {
813811 sendEventMock . mockClear ( ) ;
814812
815813 // these should be a no-op:
816- sess . onRTCSessionMemberUpdate ( ) ;
814+ await sess . onRTCSessionMemberUpdate ( ) ;
817815 expect ( sendEventMock ) . toHaveBeenCalledTimes ( 0 ) ;
818816 expect ( sess ! . statistics . counters . roomEventEncryptionKeysSent ) . toEqual ( 1 ) ;
819817 } finally {
@@ -858,7 +856,7 @@ describe("MatrixRTCSession", () => {
858856 sendEventMock . mockClear ( ) ;
859857
860858 // this should be a no-op:
861- sess . onRTCSessionMemberUpdate ( ) ;
859+ await sess . onRTCSessionMemberUpdate ( ) ;
862860 expect ( sendEventMock ) . toHaveBeenCalledTimes ( 0 ) ;
863861
864862 // advance time to avoid key throttling
@@ -873,7 +871,7 @@ describe("MatrixRTCSession", () => {
873871 } ) ;
874872
875873 // this should re-send the key
876- sess . onRTCSessionMemberUpdate ( ) ;
874+ await sess . onRTCSessionMemberUpdate ( ) ;
877875
878876 await keysSentPromise2 ;
879877
@@ -931,8 +929,10 @@ describe("MatrixRTCSession", () => {
931929 } ) ;
932930
933931 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 ;
936936 jest . advanceTimersByTime ( KEY_DELAY ) ;
937937 expect ( sendKeySpy ) . toHaveBeenCalledTimes ( 1 ) ;
938938 // check that we send the key with index 1 even though the send gets delayed when leaving.
@@ -998,7 +998,7 @@ describe("MatrixRTCSession", () => {
998998 mockRoomState ( mockRoom , members . slice ( 0 , membersToTest - i ) ) ;
999999 }
10001000
1001- sess ! . onRTCSessionMemberUpdate ( ) ;
1001+ await sess ! . onRTCSessionMemberUpdate ( ) ;
10021002
10031003 // advance time to avoid key throttling
10041004 jest . advanceTimersByTime ( 10000 ) ;
@@ -1037,7 +1037,7 @@ describe("MatrixRTCSession", () => {
10371037 } ) ;
10381038
10391039 mockRoomState ( mockRoom , [ membershipTemplate , member2 ] ) ;
1040- sess . onRTCSessionMemberUpdate ( ) ;
1040+ await sess . onRTCSessionMemberUpdate ( ) ;
10411041
10421042 await new Promise ( ( resolve ) => {
10431043 realSetTimeout ( resolve ) ;
@@ -1064,7 +1064,7 @@ describe("MatrixRTCSession", () => {
10641064 manageMediaKeys : true ,
10651065 useExperimentalToDeviceTransport : true ,
10661066 } ) ;
1067- sess . onRTCSessionMemberUpdate ( ) ;
1067+ await sess . onRTCSessionMemberUpdate ( ) ;
10681068
10691069 await keySentPromise ;
10701070
0 commit comments