@@ -17,10 +17,10 @@ limitations under the License.
17
17
import { encodeBase64 , EventType , MatrixClient , MatrixError , MatrixEvent , Room } from "../../../src" ;
18
18
import { KnownMembership } from "../../../src/@types/membership" ;
19
19
import { DEFAULT_EXPIRE_DURATION , SessionMembershipData } from "../../../src/matrixrtc/CallMembership" ;
20
- import { MembershipManager } from "../../../src/matrixrtc/MembershipManager" ;
21
20
import { MatrixRTCSession , MatrixRTCSessionEvent } from "../../../src/matrixrtc/MatrixRTCSession" ;
22
21
import { EncryptionKeysEventContent } from "../../../src/matrixrtc/types" ;
23
22
import { randomString } from "../../../src/randomstring" ;
23
+ import { flushPromises } from "../../test-utils/flushPromises" ;
24
24
import { makeMockRoom , makeMockRoomState , membershipTemplate } from "./mocks" ;
25
25
26
26
const mockFocus = { type : "mock" } ;
@@ -236,16 +236,15 @@ describe("MatrixRTCSession", () => {
236
236
} ) ;
237
237
238
238
async function testSession ( membershipData : SessionMembershipData ) : Promise < void > {
239
- const makeNewMembershipSpy = jest . spyOn ( MembershipManager . prototype as any , "makeNewMembership" ) ;
240
239
sess = MatrixRTCSession . roomSessionForRoom ( client , makeMockRoom ( membershipData ) ) ;
241
240
242
241
sess . joinRoomSession ( [ mockFocus ] , mockFocus , joinSessionConfig ) ;
243
242
await Promise . race ( [ sentStateEvent , new Promise ( ( resolve ) => setTimeout ( resolve , 500 ) ) ] ) ;
244
243
245
- expect ( makeNewMembershipSpy ) . toHaveBeenCalledTimes ( 1 ) ;
244
+ expect ( sendStateEventMock ) . toHaveBeenCalledTimes ( 1 ) ;
246
245
247
246
await Promise . race ( [ sentDelayedState , new Promise ( ( resolve ) => setTimeout ( resolve , 500 ) ) ] ) ;
248
- expect ( client . _unstable_sendDelayedStateEvent ) . toHaveBeenCalledTimes ( 1 ) ;
247
+ expect ( sendDelayedStateMock ) . toHaveBeenCalledTimes ( 1 ) ;
249
248
}
250
249
251
250
it ( "sends events" , async ( ) => {
@@ -323,9 +322,11 @@ describe("MatrixRTCSession", () => {
323
322
let sendStateEventMock : jest . Mock ;
324
323
let sendDelayedStateMock : jest . Mock ;
325
324
let sendEventMock : jest . Mock ;
325
+ let updateDelayedEventMock : jest . Mock ;
326
326
327
327
let sentStateEvent : Promise < void > ;
328
328
let sentDelayedState : Promise < void > ;
329
+ let updatedDelayedEvent : Promise < void > ;
329
330
330
331
beforeEach ( ( ) => {
331
332
sentStateEvent = new Promise ( ( resolve ) => {
@@ -339,12 +340,15 @@ describe("MatrixRTCSession", () => {
339
340
} ;
340
341
} ) ;
341
342
} ) ;
343
+ updatedDelayedEvent = new Promise ( ( r ) => {
344
+ updateDelayedEventMock = jest . fn ( r ) ;
345
+ } ) ;
342
346
sendEventMock = jest . fn ( ) ;
343
347
client . sendStateEvent = sendStateEventMock ;
344
348
client . _unstable_sendDelayedStateEvent = sendDelayedStateMock ;
345
349
client . sendEvent = sendEventMock ;
346
350
347
- client . _unstable_updateDelayedEvent = jest . fn ( ) ;
351
+ client . _unstable_updateDelayedEvent = updateDelayedEventMock ;
348
352
349
353
mockRoom = makeMockRoom ( [ ] ) ;
350
354
sess = MatrixRTCSession . roomSessionForRoom ( client , mockRoom ) ;
@@ -482,19 +486,7 @@ describe("MatrixRTCSession", () => {
482
486
membershipServerSideExpiryTimeout : 9000 ,
483
487
} ) ;
484
488
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
-
496
489
await sendDelayedStateExceedAttempt . then ( ) ; // needed to resolve after the send attempt catches
497
-
498
490
await sendDelayedStateAttempt ;
499
491
const callProps = ( d : number ) => {
500
492
return [ mockRoom ! . roomId , { delay : d } , "org.matrix.msc3401.call.member" , { } , userStateKey ] ;
@@ -525,11 +517,13 @@ describe("MatrixRTCSession", () => {
525
517
await sentDelayedState ;
526
518
527
519
// 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 ;
530
521
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 ( ) ;
532
525
jest . advanceTimersByTime ( 5000 ) ;
526
+ // should update delayed disconnect
533
527
expect ( client . _unstable_updateDelayedEvent ) . toHaveBeenCalledTimes ( 2 ) ;
534
528
535
529
jest . useRealTimers ( ) ;
@@ -561,7 +555,7 @@ describe("MatrixRTCSession", () => {
561
555
562
556
const onMembershipsChanged = jest . fn ( ) ;
563
557
sess . on ( MatrixRTCSessionEvent . MembershipsChanged , onMembershipsChanged ) ;
564
- sess . onMembershipUpdate ( ) ;
558
+ sess . onRTCSessionMemberUpdate ( ) ;
565
559
566
560
expect ( onMembershipsChanged ) . not . toHaveBeenCalled ( ) ;
567
561
} ) ;
@@ -574,7 +568,7 @@ describe("MatrixRTCSession", () => {
574
568
sess . on ( MatrixRTCSessionEvent . MembershipsChanged , onMembershipsChanged ) ;
575
569
576
570
mockRoom . getLiveTimeline ( ) . getState = jest . fn ( ) . mockReturnValue ( makeMockRoomState ( [ ] , mockRoom . roomId ) ) ;
577
- sess . onMembershipUpdate ( ) ;
571
+ sess . onRTCSessionMemberUpdate ( ) ;
578
572
579
573
expect ( onMembershipsChanged ) . toHaveBeenCalled ( ) ;
580
574
} ) ;
@@ -763,7 +757,7 @@ describe("MatrixRTCSession", () => {
763
757
mockRoom . getLiveTimeline ( ) . getState = jest
764
758
. fn ( )
765
759
. mockReturnValue ( makeMockRoomState ( [ membershipTemplate ] , mockRoom . roomId ) ) ;
766
- sess . onMembershipUpdate ( ) ;
760
+ sess . onRTCSessionMemberUpdate ( ) ;
767
761
768
762
// member2 re-joins which should trigger an immediate re-send
769
763
const keysSentPromise2 = new Promise < EncryptionKeysEventContent > ( ( resolve ) => {
@@ -772,7 +766,7 @@ describe("MatrixRTCSession", () => {
772
766
mockRoom . getLiveTimeline ( ) . getState = jest
773
767
. fn ( )
774
768
. mockReturnValue ( makeMockRoomState ( [ membershipTemplate , member2 ] , mockRoom . roomId ) ) ;
775
- sess . onMembershipUpdate ( ) ;
769
+ sess . onRTCSessionMemberUpdate ( ) ;
776
770
// but, that immediate resend is throttled so we need to wait a bit
777
771
jest . advanceTimersByTime ( 1000 ) ;
778
772
const { keys } = await keysSentPromise2 ;
@@ -825,7 +819,7 @@ describe("MatrixRTCSession", () => {
825
819
mockRoom . getLiveTimeline ( ) . getState = jest
826
820
. fn ( )
827
821
. mockReturnValue ( makeMockRoomState ( [ membershipTemplate , member2 ] , mockRoom . roomId ) ) ;
828
- sess . onMembershipUpdate ( ) ;
822
+ sess . onRTCSessionMemberUpdate ( ) ;
829
823
830
824
await keysSentPromise2 ;
831
825
@@ -879,7 +873,7 @@ describe("MatrixRTCSession", () => {
879
873
sendEventMock . mockClear ( ) ;
880
874
881
875
// these should be a no-op:
882
- sess . onMembershipUpdate ( ) ;
876
+ sess . onRTCSessionMemberUpdate ( ) ;
883
877
expect ( sendEventMock ) . toHaveBeenCalledTimes ( 0 ) ;
884
878
expect ( sess ! . statistics . counters . roomEventEncryptionKeysSent ) . toEqual ( 1 ) ;
885
879
} finally {
@@ -933,7 +927,7 @@ describe("MatrixRTCSession", () => {
933
927
sendEventMock . mockClear ( ) ;
934
928
935
929
// this should be a no-op:
936
- sess . onMembershipUpdate ( ) ;
930
+ sess . onRTCSessionMemberUpdate ( ) ;
937
931
expect ( sendEventMock ) . toHaveBeenCalledTimes ( 0 ) ;
938
932
939
933
// advance time to avoid key throttling
@@ -947,7 +941,7 @@ describe("MatrixRTCSession", () => {
947
941
} ) ;
948
942
949
943
// this should re-send the key
950
- sess . onMembershipUpdate ( ) ;
944
+ sess . onRTCSessionMemberUpdate ( ) ;
951
945
952
946
await keysSentPromise2 ;
953
947
@@ -1010,7 +1004,7 @@ describe("MatrixRTCSession", () => {
1010
1004
mockRoom . getLiveTimeline ( ) . getState = jest
1011
1005
. fn ( )
1012
1006
. mockReturnValue ( makeMockRoomState ( [ membershipTemplate ] , mockRoom . roomId ) ) ;
1013
- sess . onMembershipUpdate ( ) ;
1007
+ sess . onRTCSessionMemberUpdate ( ) ;
1014
1008
1015
1009
jest . advanceTimersByTime ( 10000 ) ;
1016
1010
@@ -1055,7 +1049,7 @@ describe("MatrixRTCSession", () => {
1055
1049
) ;
1056
1050
}
1057
1051
1058
- sess ! . onMembershipUpdate ( ) ;
1052
+ sess ! . onRTCSessionMemberUpdate ( ) ;
1059
1053
1060
1054
// advance time to avoid key throttling
1061
1055
jest . advanceTimersByTime ( 10000 ) ;
@@ -1096,7 +1090,7 @@ describe("MatrixRTCSession", () => {
1096
1090
mockRoom . getLiveTimeline ( ) . getState = jest
1097
1091
. fn ( )
1098
1092
. mockReturnValue ( makeMockRoomState ( [ membershipTemplate , member2 ] , mockRoom . roomId ) ) ;
1099
- sess . onMembershipUpdate ( ) ;
1093
+ sess . onRTCSessionMemberUpdate ( ) ;
1100
1094
1101
1095
await new Promise ( ( resolve ) => {
1102
1096
realSetTimeout ( resolve ) ;
0 commit comments