@@ -16,15 +16,7 @@ limitations under the License.
1616
1717import { type Mock } from "jest-mock" ;
1818
19- import {
20- ClientEvent ,
21- EventTimeline ,
22- EventType ,
23- type IRoomTimelineData ,
24- MatrixClient ,
25- type MatrixEvent ,
26- RoomEvent ,
27- } from "../../../src" ;
19+ import { ClientEvent , EventTimeline , MatrixClient } from "../../../src" ;
2820import { RoomStateEvent } from "../../../src/models/room-state" ;
2921import { MatrixRTCSessionManagerEvents } from "../../../src/matrixrtc/MatrixRTCSessionManager" ;
3022import { makeMockRoom , makeMockRoomState , membershipTemplate } from "./mocks" ;
@@ -77,117 +69,4 @@ describe("MatrixRTCSessionManager", () => {
7769
7870 expect ( onEnded ) . toHaveBeenCalledWith ( room1 . roomId , client . matrixRTC . getActiveRoomSession ( room1 ) ) ;
7971 } ) ;
80-
81- it ( "Calls onCallEncryption on encryption keys event" , async ( ) => {
82- const room1 = makeMockRoom ( [ membershipTemplate ] ) ;
83- jest . spyOn ( client , "getRooms" ) . mockReturnValue ( [ room1 ] ) ;
84- jest . spyOn ( client , "getRoom" ) . mockReturnValue ( room1 ) ;
85-
86- client . emit ( ClientEvent . Room , room1 ) ;
87- const onCallEncryptionMock = jest . fn ( ) ;
88- client . matrixRTC . getRoomSession ( room1 ) . onCallEncryption = onCallEncryptionMock ;
89- client . decryptEventIfNeeded = ( ) => Promise . resolve ( ) ;
90- const timelineEvent = {
91- getType : jest . fn ( ) . mockReturnValue ( EventType . CallEncryptionKeysPrefix ) ,
92- getContent : jest . fn ( ) . mockReturnValue ( { } ) ,
93- getSender : jest . fn ( ) . mockReturnValue ( "@mock:user.example" ) ,
94- getRoomId : jest . fn ( ) . mockReturnValue ( "!room:id" ) ,
95- isDecryptionFailure : jest . fn ( ) . mockReturnValue ( false ) ,
96- sender : {
97- userId : "@mock:user.example" ,
98- } ,
99- } as unknown as MatrixEvent ;
100- client . emit ( RoomEvent . Timeline , timelineEvent , undefined , undefined , false , { } as IRoomTimelineData ) ;
101- await new Promise ( process . nextTick ) ;
102- expect ( onCallEncryptionMock ) . toHaveBeenCalled ( ) ;
103- } ) ;
104-
105- describe ( "event decryption" , ( ) => {
106- it ( "Retries decryption and processes success" , async ( ) => {
107- try {
108- jest . useFakeTimers ( ) ;
109- const room1 = makeMockRoom ( [ membershipTemplate ] ) ;
110- jest . spyOn ( client , "getRooms" ) . mockReturnValue ( [ room1 ] ) ;
111- jest . spyOn ( client , "getRoom" ) . mockReturnValue ( room1 ) ;
112-
113- client . emit ( ClientEvent . Room , room1 ) ;
114- const onCallEncryptionMock = jest . fn ( ) ;
115- client . matrixRTC . getRoomSession ( room1 ) . onCallEncryption = onCallEncryptionMock ;
116- let isDecryptionFailure = true ;
117- client . decryptEventIfNeeded = jest
118- . fn ( )
119- . mockReturnValueOnce ( Promise . resolve ( ) )
120- . mockImplementation ( ( ) => {
121- isDecryptionFailure = false ;
122- return Promise . resolve ( ) ;
123- } ) ;
124- const timelineEvent = {
125- getType : jest . fn ( ) . mockReturnValue ( EventType . CallEncryptionKeysPrefix ) ,
126- getContent : jest . fn ( ) . mockReturnValue ( { } ) ,
127- getSender : jest . fn ( ) . mockReturnValue ( "@mock:user.example" ) ,
128- getRoomId : jest . fn ( ) . mockReturnValue ( "!room:id" ) ,
129- isDecryptionFailure : jest . fn ( ) . mockImplementation ( ( ) => isDecryptionFailure ) ,
130- getId : jest . fn ( ) . mockReturnValue ( "event_id" ) ,
131- sender : {
132- userId : "@mock:user.example" ,
133- } ,
134- } as unknown as MatrixEvent ;
135- client . emit ( RoomEvent . Timeline , timelineEvent , undefined , undefined , false , { } as IRoomTimelineData ) ;
136-
137- expect ( client . decryptEventIfNeeded ) . toHaveBeenCalledTimes ( 1 ) ;
138- expect ( onCallEncryptionMock ) . toHaveBeenCalledTimes ( 0 ) ;
139-
140- // should retry after one second:
141- await jest . advanceTimersByTimeAsync ( 1500 ) ;
142-
143- expect ( client . decryptEventIfNeeded ) . toHaveBeenCalledTimes ( 2 ) ;
144- expect ( onCallEncryptionMock ) . toHaveBeenCalledTimes ( 1 ) ;
145- } finally {
146- jest . useRealTimers ( ) ;
147- }
148- } ) ;
149-
150- it ( "Retries decryption and processes failure" , async ( ) => {
151- try {
152- jest . useFakeTimers ( ) ;
153- const room1 = makeMockRoom ( [ membershipTemplate ] ) ;
154- jest . spyOn ( client , "getRooms" ) . mockReturnValue ( [ room1 ] ) ;
155- jest . spyOn ( client , "getRoom" ) . mockReturnValue ( room1 ) ;
156-
157- client . emit ( ClientEvent . Room , room1 ) ;
158- const onCallEncryptionMock = jest . fn ( ) ;
159- client . matrixRTC . getRoomSession ( room1 ) . onCallEncryption = onCallEncryptionMock ;
160- client . decryptEventIfNeeded = jest . fn ( ) . mockReturnValue ( Promise . resolve ( ) ) ;
161- const timelineEvent = {
162- getType : jest . fn ( ) . mockReturnValue ( EventType . CallEncryptionKeysPrefix ) ,
163- getContent : jest . fn ( ) . mockReturnValue ( { } ) ,
164- getSender : jest . fn ( ) . mockReturnValue ( "@mock:user.example" ) ,
165- getRoomId : jest . fn ( ) . mockReturnValue ( "!room:id" ) ,
166- isDecryptionFailure : jest . fn ( ) . mockReturnValue ( true ) , // always fail
167- getId : jest . fn ( ) . mockReturnValue ( "event_id" ) ,
168- sender : {
169- userId : "@mock:user.example" ,
170- } ,
171- } as unknown as MatrixEvent ;
172- client . emit ( RoomEvent . Timeline , timelineEvent , undefined , undefined , false , { } as IRoomTimelineData ) ;
173-
174- expect ( client . decryptEventIfNeeded ) . toHaveBeenCalledTimes ( 1 ) ;
175- expect ( onCallEncryptionMock ) . toHaveBeenCalledTimes ( 0 ) ;
176-
177- // should retry after one second:
178- await jest . advanceTimersByTimeAsync ( 1500 ) ;
179-
180- expect ( client . decryptEventIfNeeded ) . toHaveBeenCalledTimes ( 2 ) ;
181- expect ( onCallEncryptionMock ) . toHaveBeenCalledTimes ( 0 ) ;
182-
183- // doesn't retry again:
184- await jest . advanceTimersByTimeAsync ( 1500 ) ;
185-
186- expect ( client . decryptEventIfNeeded ) . toHaveBeenCalledTimes ( 2 ) ;
187- expect ( onCallEncryptionMock ) . toHaveBeenCalledTimes ( 0 ) ;
188- } finally {
189- jest . useRealTimers ( ) ;
190- }
191- } ) ;
192- } ) ;
19372} ) ;
0 commit comments