@@ -17,10 +17,10 @@ limitations under the License.
1717import { encodeBase64 , EventType , MatrixClient , MatrixError , MatrixEvent , Room } from "../../../src" ;
1818import { KnownMembership } from "../../../src/@types/membership" ;
1919import { DEFAULT_EXPIRE_DURATION , SessionMembershipData } from "../../../src/matrixrtc/CallMembership" ;
20- import { LocalMembershipManager } from "../../../src/matrixrtc/LocalMembershipManager" ;
2120import { MatrixRTCSession , MatrixRTCSessionEvent } from "../../../src/matrixrtc/MatrixRTCSession" ;
2221import { EncryptionKeysEventContent } from "../../../src/matrixrtc/types" ;
2322import { randomString } from "../../../src/randomstring" ;
23+ import { flushPromises } from "../../test-utils/flushPromises" ;
2424import { makeMockRoom , makeMockRoomState , membershipTemplate } from "./mocks" ;
2525
2626const 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