@@ -23,25 +23,30 @@ import { logger } from "../../../src/logger";
2323describe ( "MatrixRTCSessionManager" , ( ) => {
2424 let client : MatrixClient ;
2525
26- beforeEach ( ( ) => {
26+ beforeEach ( async ( ) => {
2727 client = new MatrixClient ( { baseUrl : "base_url" } ) ;
28- client . matrixRTC . start ( ) ;
28+ await client . matrixRTC . start ( ) ;
2929 } ) ;
3030
3131 afterEach ( ( ) => {
3232 client . stopClient ( ) ;
3333 client . matrixRTC . stop ( ) ;
3434 } ) ;
3535
36- it ( "Fires event when session starts" , ( ) => {
36+ it ( "Fires event when session starts" , async ( ) => {
3737 const onStarted = jest . fn ( ) ;
38- client . matrixRTC . on ( MatrixRTCSessionManagerEvents . SessionStarted , onStarted ) ;
38+ const { promise, resolve } = Promise . withResolvers < void > ( ) ;
39+ client . matrixRTC . on ( MatrixRTCSessionManagerEvents . SessionStarted , ( ...v ) => {
40+ onStarted ( ...v ) ;
41+ resolve ( ) ;
42+ } ) ;
3943
4044 try {
4145 const room1 = makeMockRoom ( [ membershipTemplate ] ) ;
4246 jest . spyOn ( client , "getRooms" ) . mockReturnValue ( [ room1 ] ) ;
4347
4448 client . emit ( ClientEvent . Room , room1 ) ;
49+ await promise ;
4550 expect ( onStarted ) . toHaveBeenCalledWith ( room1 . roomId , client . matrixRTC . getActiveRoomSession ( room1 ) ) ;
4651 } finally {
4752 client . matrixRTC . off ( MatrixRTCSessionManagerEvents . SessionStarted , onStarted ) ;
@@ -63,34 +68,48 @@ describe("MatrixRTCSessionManager", () => {
6368 }
6469 } ) ;
6570
66- it ( "Fires event when session ends" , ( ) => {
71+ it ( "Fires event when session ends" , async ( ) => {
6772 const onEnded = jest . fn ( ) ;
68- client . matrixRTC . on ( MatrixRTCSessionManagerEvents . SessionEnded , onEnded ) ;
73+ const { promise : endPromise , resolve : rEnd } = Promise . withResolvers ( ) ;
74+ client . matrixRTC . once ( MatrixRTCSessionManagerEvents . SessionEnded , onEnded ) ;
75+ const { promise : startPromise , resolve : rStart } = Promise . withResolvers ( ) ;
76+ client . matrixRTC . once ( MatrixRTCSessionManagerEvents . SessionEnded , rEnd ) ;
77+ client . matrixRTC . once ( MatrixRTCSessionManagerEvents . SessionStarted , rStart ) ;
78+
6979 const room1 = makeMockRoom ( [ membershipTemplate ] ) ;
7080 jest . spyOn ( client , "getRooms" ) . mockReturnValue ( [ room1 ] ) ;
7181 jest . spyOn ( client , "getRoom" ) . mockReturnValue ( room1 ) ;
7282
7383 client . emit ( ClientEvent . Room , room1 ) ;
84+ await startPromise ;
7485
7586 mockRoomState ( room1 , [ { user_id : membershipTemplate . user_id } ] ) ;
76-
7787 const roomState = room1 . getLiveTimeline ( ) . getState ( EventTimeline . FORWARDS ) ! ;
7888 const membEvent = roomState . getStateEvents ( "org.matrix.msc3401.call.member" ) [ 0 ] ;
7989 client . emit ( RoomStateEvent . Events , membEvent , roomState , null ) ;
80-
90+ await endPromise ;
8191 expect ( onEnded ) . toHaveBeenCalledWith ( room1 . roomId , client . matrixRTC . getActiveRoomSession ( room1 ) ) ;
8292 } ) ;
8393
84- it ( "Fires correctly with for with custom sessionDescription" , ( ) => {
94+ it ( "Fires correctly with for with custom sessionDescription" , async ( ) => {
8595 const onStarted = jest . fn ( ) ;
8696 const onEnded = jest . fn ( ) ;
8797 // create a session manager with a custom session description
8898 const sessionManager = new MatrixRTCSessionManager ( logger , client , { id : "test" , application : "m.notCall" } ) ;
8999
90100 // manually start the session manager (its not the default one started by the client)
91- sessionManager . start ( ) ;
92- sessionManager . on ( MatrixRTCSessionManagerEvents . SessionEnded , onEnded ) ;
93- sessionManager . on ( MatrixRTCSessionManagerEvents . SessionStarted , onStarted ) ;
101+ await sessionManager . start ( ) ;
102+ const { promise : startPromise , resolve : rStart } = Promise . withResolvers < void > ( ) ;
103+ const { promise : endPromise , resolve : rEnd } = Promise . withResolvers < void > ( ) ;
104+
105+ sessionManager . on ( MatrixRTCSessionManagerEvents . SessionEnded , ( v ) => {
106+ onEnded ( v ) ;
107+ rEnd ( ) ;
108+ } ) ;
109+ sessionManager . on ( MatrixRTCSessionManagerEvents . SessionStarted , ( v ) => {
110+ onStarted ( v ) ;
111+ rStart ( ) ;
112+ } ) ;
94113
95114 try {
96115 const room1 = makeMockRoom ( [ { ...membershipTemplate , application : "m.other" } ] ) ;
@@ -104,6 +123,7 @@ describe("MatrixRTCSessionManager", () => {
104123 jest . spyOn ( client , "getRooms" ) . mockReturnValue ( [ room1 , room2 ] ) ;
105124
106125 client . emit ( ClientEvent . Room , room2 ) ;
126+ await startPromise ;
107127 expect ( onStarted ) . toHaveBeenCalled ( ) ;
108128 onStarted . mockClear ( ) ;
109129
@@ -113,6 +133,7 @@ describe("MatrixRTCSessionManager", () => {
113133 const roomState = room2 . getLiveTimeline ( ) . getState ( EventTimeline . FORWARDS ) ! ;
114134 const membEvent = roomState . getStateEvents ( "org.matrix.msc3401.call.member" ) [ 0 ] ;
115135 client . emit ( RoomStateEvent . Events , membEvent , roomState , null ) ;
136+ await endPromise ;
116137 expect ( onEnded ) . toHaveBeenCalled ( ) ;
117138 onEnded . mockClear ( ) ;
118139
0 commit comments