@@ -16,11 +16,11 @@ limitations under the License.
16
16
17
17
import { encodeBase64 , EventType , MatrixClient , type MatrixError , type MatrixEvent , type Room } from "../../../src" ;
18
18
import { KnownMembership } from "../../../src/@types/membership" ;
19
- import { DEFAULT_EXPIRE_DURATION , type SessionMembershipData } from "../../../src/matrixrtc/CallMembership" ;
19
+ import { DEFAULT_EXPIRE_DURATION } from "../../../src/matrixrtc/CallMembership" ;
20
20
import { MatrixRTCSession , MatrixRTCSessionEvent } from "../../../src/matrixrtc/MatrixRTCSession" ;
21
21
import { type EncryptionKeysEventContent } from "../../../src/matrixrtc/types" ;
22
22
import { secureRandomString } from "../../../src/randomstring" ;
23
- import { makeMockEvent , makeMockRoom , makeMockRoomState , membershipTemplate , makeKey } from "./mocks" ;
23
+ import { makeMockEvent , makeMockRoom , membershipTemplate , makeKey , type MembershipData , mockRoomState } from "./mocks" ;
24
24
25
25
const mockFocus = { type : "mock" } ;
26
26
@@ -47,7 +47,7 @@ describe("MatrixRTCSession", () => {
47
47
48
48
describe ( "roomSessionForRoom" , ( ) => {
49
49
it ( "creates a room-scoped session from room state" , ( ) => {
50
- const mockRoom = makeMockRoom ( membershipTemplate ) ;
50
+ const mockRoom = makeMockRoom ( [ membershipTemplate ] ) ;
51
51
52
52
sess = MatrixRTCSession . roomSessionForRoom ( client , mockRoom ) ;
53
53
expect ( sess ?. memberships . length ) . toEqual ( 1 ) ;
@@ -74,7 +74,7 @@ describe("MatrixRTCSession", () => {
74
74
} ) ;
75
75
76
76
it ( "ignores memberships events of members not in the room" , ( ) => {
77
- const mockRoom = makeMockRoom ( membershipTemplate ) ;
77
+ const mockRoom = makeMockRoom ( [ membershipTemplate ] ) ;
78
78
mockRoom . hasMembershipState = ( state ) => state === KnownMembership . Join ;
79
79
sess = MatrixRTCSession . roomSessionForRoom ( client , mockRoom ) ;
80
80
expect ( sess ?. memberships . length ) . toEqual ( 0 ) ;
@@ -205,10 +205,11 @@ describe("MatrixRTCSession", () => {
205
205
const mockFocus = { type : "livekit" , livekit_service_url : "https://test.org" } ;
206
206
const joinSessionConfig = { } ;
207
207
208
- const sessionMembershipData : SessionMembershipData = {
208
+ const sessionMembershipData : MembershipData = {
209
209
call_id : "" ,
210
210
scope : "m.room" ,
211
211
application : "m.call" ,
212
+ user_id : "@mock:user.example" ,
212
213
device_id : "AAAAAAA_session" ,
213
214
focus_active : mockFocus ,
214
215
foci_preferred : [ mockFocus ] ,
@@ -236,8 +237,8 @@ describe("MatrixRTCSession", () => {
236
237
client . _unstable_sendDelayedStateEvent = sendDelayedStateMock ;
237
238
} ) ;
238
239
239
- async function testSession ( membershipData : SessionMembershipData ) : Promise < void > {
240
- sess = MatrixRTCSession . roomSessionForRoom ( client , makeMockRoom ( membershipData ) ) ;
240
+ async function testSession ( membershipData : MembershipData ) : Promise < void > {
241
+ sess = MatrixRTCSession . roomSessionForRoom ( client , makeMockRoom ( [ membershipData ] ) ) ;
241
242
242
243
sess . joinRoomSession ( [ mockFocus ] , mockFocus , joinSessionConfig ) ;
243
244
await Promise . race ( [ sentStateEvent , new Promise ( ( resolve ) => setTimeout ( resolve , 500 ) ) ] ) ;
@@ -432,7 +433,7 @@ describe("MatrixRTCSession", () => {
432
433
433
434
describe ( "onMembershipsChanged" , ( ) => {
434
435
it ( "does not emit if no membership changes" , ( ) => {
435
- const mockRoom = makeMockRoom ( membershipTemplate ) ;
436
+ const mockRoom = makeMockRoom ( [ membershipTemplate ] ) ;
436
437
sess = MatrixRTCSession . roomSessionForRoom ( client , mockRoom ) ;
437
438
438
439
const onMembershipsChanged = jest . fn ( ) ;
@@ -443,13 +444,13 @@ describe("MatrixRTCSession", () => {
443
444
} ) ;
444
445
445
446
it ( "emits on membership changes" , ( ) => {
446
- const mockRoom = makeMockRoom ( membershipTemplate ) ;
447
+ const mockRoom = makeMockRoom ( [ membershipTemplate ] ) ;
447
448
sess = MatrixRTCSession . roomSessionForRoom ( client , mockRoom ) ;
448
449
449
450
const onMembershipsChanged = jest . fn ( ) ;
450
451
sess . on ( MatrixRTCSessionEvent . MembershipsChanged , onMembershipsChanged ) ;
451
452
452
- mockRoom . getLiveTimeline ( ) . getState = jest . fn ( ) . mockReturnValue ( makeMockRoomState ( [ ] , mockRoom . roomId ) ) ;
453
+ mockRoomState ( mockRoom , [ ] ) ;
453
454
sess . onRTCSessionMemberUpdate ( ) ;
454
455
455
456
expect ( onMembershipsChanged ) . toHaveBeenCalled ( ) ;
@@ -635,18 +636,14 @@ describe("MatrixRTCSession", () => {
635
636
expect ( sess ! . statistics . counters . roomEventEncryptionKeysSent ) . toEqual ( 1 ) ;
636
637
637
638
// member2 leaves triggering key rotation
638
- mockRoom . getLiveTimeline ( ) . getState = jest
639
- . fn ( )
640
- . mockReturnValue ( makeMockRoomState ( [ membershipTemplate ] , mockRoom . roomId ) ) ;
639
+ mockRoomState ( mockRoom , [ membershipTemplate ] ) ;
641
640
sess . onRTCSessionMemberUpdate ( ) ;
642
641
643
642
// member2 re-joins which should trigger an immediate re-send
644
643
const keysSentPromise2 = new Promise < EncryptionKeysEventContent > ( ( resolve ) => {
645
644
sendEventMock . mockImplementation ( ( _roomId , _evType , payload ) => resolve ( payload ) ) ;
646
645
} ) ;
647
- mockRoom . getLiveTimeline ( ) . getState = jest
648
- . fn ( )
649
- . mockReturnValue ( makeMockRoomState ( [ membershipTemplate , member2 ] , mockRoom . roomId ) ) ;
646
+ mockRoomState ( mockRoom , [ membershipTemplate , member2 ] ) ;
650
647
sess . onRTCSessionMemberUpdate ( ) ;
651
648
// but, that immediate resend is throttled so we need to wait a bit
652
649
jest . advanceTimersByTime ( 1000 ) ;
@@ -697,9 +694,7 @@ describe("MatrixRTCSession", () => {
697
694
device_id : "BBBBBBB" ,
698
695
} ) ;
699
696
700
- mockRoom . getLiveTimeline ( ) . getState = jest
701
- . fn ( )
702
- . mockReturnValue ( makeMockRoomState ( [ membershipTemplate , member2 ] , mockRoom . roomId ) ) ;
697
+ mockRoomState ( mockRoom , [ membershipTemplate , member2 ] ) ;
703
698
sess . onRTCSessionMemberUpdate ( ) ;
704
699
705
700
await keysSentPromise2 ;
@@ -724,9 +719,7 @@ describe("MatrixRTCSession", () => {
724
719
} ) ;
725
720
726
721
const mockRoom = makeMockRoom ( [ member1 , member2 ] ) ;
727
- mockRoom . getLiveTimeline ( ) . getState = jest
728
- . fn ( )
729
- . mockReturnValue ( makeMockRoomState ( [ member1 , member2 ] , mockRoom . roomId ) ) ;
722
+ mockRoomState ( mockRoom , [ member1 , member2 ] ) ;
730
723
731
724
sess = MatrixRTCSession . roomSessionForRoom ( client , mockRoom ) ;
732
725
sess . joinRoomSession ( [ mockFocus ] , mockFocus , { manageMediaKeys : true } ) ;
@@ -773,10 +766,6 @@ describe("MatrixRTCSession", () => {
773
766
} ;
774
767
775
768
const mockRoom = makeMockRoom ( [ member1 , member2 ] ) ;
776
- mockRoom . getLiveTimeline ( ) . getState = jest
777
- . fn ( )
778
- . mockReturnValue ( makeMockRoomState ( [ member1 , member2 ] , mockRoom . roomId ) ) ;
779
-
780
769
sess = MatrixRTCSession . roomSessionForRoom ( client , mockRoom ) ;
781
770
sess . joinRoomSession ( [ mockFocus ] , mockFocus , { manageMediaKeys : true } ) ;
782
771
@@ -806,6 +795,7 @@ describe("MatrixRTCSession", () => {
806
795
807
796
// update created_ts
808
797
member2 . created_ts = 5000 ;
798
+ mockRoomState ( mockRoom , [ member1 , member2 ] ) ;
809
799
810
800
const keysSentPromise2 = new Promise ( ( resolve ) => {
811
801
sendEventMock . mockImplementation ( resolve ) ;
@@ -869,9 +859,7 @@ describe("MatrixRTCSession", () => {
869
859
sendEventMock . mockImplementation ( ( _roomId , _evType , payload ) => resolve ( payload ) ) ;
870
860
} ) ;
871
861
872
- mockRoom . getLiveTimeline ( ) . getState = jest
873
- . fn ( )
874
- . mockReturnValue ( makeMockRoomState ( [ membershipTemplate ] , mockRoom . roomId ) ) ;
862
+ mockRoomState ( mockRoom , [ membershipTemplate ] ) ;
875
863
sess . onRTCSessionMemberUpdate ( ) ;
876
864
877
865
jest . advanceTimersByTime ( KEY_DELAY ) ;
@@ -900,7 +888,7 @@ describe("MatrixRTCSession", () => {
900
888
it ( "wraps key index around to 0 when it reaches the maximum" , async ( ) => {
901
889
// this should give us keys with index [0...255, 0, 1]
902
890
const membersToTest = 258 ;
903
- const members : SessionMembershipData [ ] = [ ] ;
891
+ const members : MembershipData [ ] = [ ] ;
904
892
for ( let i = 0 ; i < membersToTest ; i ++ ) {
905
893
members . push ( Object . assign ( { } , membershipTemplate , { device_id : `DEVICE${ i } ` } ) ) ;
906
894
}
@@ -920,11 +908,7 @@ describe("MatrixRTCSession", () => {
920
908
sess . joinRoomSession ( [ mockFocus ] , mockFocus , { manageMediaKeys : true } ) ;
921
909
} else {
922
910
// otherwise update the state reducing the membership each time in order to trigger key rotation
923
- mockRoom . getLiveTimeline ( ) . getState = jest
924
- . fn ( )
925
- . mockReturnValue (
926
- makeMockRoomState ( members . slice ( 0 , membersToTest - i ) , mockRoom . roomId ) ,
927
- ) ;
911
+ mockRoomState ( mockRoom , members . slice ( 0 , membersToTest - i ) ) ;
928
912
}
929
913
930
914
sess ! . onRTCSessionMemberUpdate ( ) ;
@@ -965,9 +949,7 @@ describe("MatrixRTCSession", () => {
965
949
device_id : "BBBBBBB" ,
966
950
} ) ;
967
951
968
- mockRoom . getLiveTimeline ( ) . getState = jest
969
- . fn ( )
970
- . mockReturnValue ( makeMockRoomState ( [ membershipTemplate , member2 ] , mockRoom . roomId ) ) ;
952
+ mockRoomState ( mockRoom , [ membershipTemplate , member2 ] ) ;
971
953
sess . onRTCSessionMemberUpdate ( ) ;
972
954
973
955
await new Promise ( ( resolve ) => {
0 commit comments