@@ -27,6 +27,7 @@ import {
2727} from "../../../src" ;
2828import { KnownMembership } from "../../../src/@types/membership" ;
2929import { MatrixRTCSession , MatrixRTCSessionEvent } from "../../../src/matrixrtc/MatrixRTCSession" ;
30+ import { MembershipManagerEvent } from "../../../src/matrixrtc/IMembershipManager" ;
3031import { Status , type EncryptionKeysEventContent } from "../../../src/matrixrtc/types" ;
3132import {
3233 makeMockEvent ,
@@ -499,8 +500,8 @@ describe("MatrixRTCSession", () => {
499500 livekit_service_url : "https://active.url" ,
500501 livekit_alias : "!active:active.url" ,
501502 } ;
502- // eslint-disable-next-line @vitest/expect-expect
503- it ( "gets the correct active focus with oldest_membership" , ( ) => {
503+ it ( "gets the correct active focus with oldest_membership" , async ( ) => {
504+ client . sendStateEvent = vi . fn ( ) ;
504505 vi . useFakeTimers ( ) ;
505506 vi . setSystemTime ( 3000 ) ;
506507 const mockRoom = makeMockRoom ( [
@@ -515,10 +516,36 @@ describe("MatrixRTCSession", () => {
515516
516517 sess = MatrixRTCSession . sessionForSlot ( client , mockRoom , callSession ) ;
517518
518- sess . joinRTCSession ( owmMemberIdentity , [ { type : "livekit" , livekit_service_url : "htts://test.org" } ] , {
519- type : "livekit" ,
520- focus_selection : "oldest_membership" ,
521- } ) ;
519+ sess . joinRTCSession (
520+ owmMemberIdentity ,
521+ [ { type : "livekit" , livekit_service_url : "htts://test.org" } ] ,
522+ undefined ,
523+ ) ;
524+ await flushPromises ( ) ;
525+ expect ( client . sendStateEvent ) . toHaveBeenCalledWith (
526+ expect . any ( String ) ,
527+ "org.matrix.msc3401.call.member" ,
528+ {
529+ "application" : "m.call" ,
530+ "call_id" : "" ,
531+ "device_id" : "AAAAAAA" ,
532+ "expires" : 14400000 ,
533+ "foci_preferred" : [
534+ {
535+ livekit_service_url : "htts://test.org" ,
536+ type : "livekit" ,
537+ } ,
538+ ] ,
539+ "focus_active" : {
540+ focus_selection : "oldest_membership" ,
541+ type : "livekit" ,
542+ } ,
543+ "m.call.intent" : undefined ,
544+ "membershipID" : "@alice:example.org:AAAAAAA" ,
545+ "scope" : "m.room" ,
546+ } ,
547+ "_@alice:example.org_AAAAAAA_m.call" ,
548+ ) ;
522549 vi . useRealTimers ( ) ;
523550 } ) ;
524551 it ( "does not provide focus if the selection method is unknown" , ( ) => {
@@ -738,6 +765,9 @@ describe("MatrixRTCSession", () => {
738765 mockRoomState ( mockRoom , [ membershipTemplate , { ...membershipTemplate , user_id : client . getUserId ( ) ! } ] ) ;
739766 await sess ! . _onRTCSessionMemberUpdate ( ) ;
740767
768+ // check we send out join event
769+ expect ( client . sendStateEvent ) . toHaveBeenCalled ( ) ;
770+ // but no notification event
741771 expect ( client . sendEvent ) . not . toHaveBeenCalled ( ) ;
742772 } ) ;
743773
@@ -752,34 +782,31 @@ describe("MatrixRTCSession", () => {
752782 mockRoomState ( mockRoom , [ membershipTemplate , { ...membershipTemplate , user_id : client . getUserId ( ) ! } ] ) ;
753783 await sess ! . _onRTCSessionMemberUpdate ( ) ;
754784
755- // We assume that the responsibility to send a notification, if any, lies with the other
785+ // check we send out join event
786+ expect ( client . sendStateEvent ) . toHaveBeenCalled ( ) ;
787+ // but no notification event
788+ //
789+ // We assume that the responsibility to send a notification, if any, lies with the other
756790 // participant that won the race
757791 expect ( client . sendEvent ) . not . toHaveBeenCalled ( ) ;
758792 } ) ;
759793 } ) ;
760794
761795 describe ( "onMembershipsChanged" , ( ) => {
762- it ( "does not emit if no membership changes" , async ( ) => {
796+ it ( "only emit if membership changes" , async ( ) => {
763797 const mockRoom = makeMockRoom ( [ membershipTemplate ] ) ;
764798 sess = MatrixRTCSession . sessionForSlot ( client , mockRoom , callSession ) ;
765799 await flushPromises ( ) ;
766800 const onMembershipsChanged = vi . fn ( ) ;
767801 sess . on ( MatrixRTCSessionEvent . MembershipsChanged , onMembershipsChanged ) ;
768- await sess . _onRTCSessionMemberUpdate ( ) ;
769802
803+ // no change -> no emission
804+ await sess . _onRTCSessionMemberUpdate ( ) ;
770805 expect ( onMembershipsChanged ) . not . toHaveBeenCalled ( ) ;
771- } ) ;
772-
773- it ( "emits on membership changes" , async ( ) => {
774- const mockRoom = makeMockRoom ( [ membershipTemplate ] ) ;
775- sess = MatrixRTCSession . sessionForSlot ( client , mockRoom , callSession ) ;
776-
777- const onMembershipsChanged = vi . fn ( ) ;
778- sess . on ( MatrixRTCSessionEvent . MembershipsChanged , onMembershipsChanged ) ;
779806
807+ // no change -> emission
780808 mockRoomState ( mockRoom , [ ] ) ;
781809 await sess . _onRTCSessionMemberUpdate ( ) ;
782-
783810 expect ( onMembershipsChanged ) . toHaveBeenCalled ( ) ;
784811 } ) ;
785812
@@ -1704,5 +1731,24 @@ describe("MatrixRTCSession", () => {
17041731 expect ( sess ! . membershipStatus ) . toBe ( Status . Connecting ) ;
17051732 } ) ;
17061733 } ) ;
1734+ it ( "reemits membershipManager events" , ( ) => {
1735+ sess = MatrixRTCSession . sessionForSlot ( client , makeMockRoom ( [ membershipTemplate ] ) , callSession ) ;
1736+ const delayIdChanged = vi . fn ( ) ;
1737+ sess . on ( MembershipManagerEvent . DelayIdChanged , delayIdChanged ) ;
1738+ const statusChanged = vi . fn ( ) ;
1739+ sess . on ( MembershipManagerEvent . StatusChanged , statusChanged ) ;
1740+ const probablyLeftChanged = vi . fn ( ) ;
1741+ sess . on ( MembershipManagerEvent . ProbablyLeft , probablyLeftChanged ) ;
1742+
1743+ sess ! . joinRTCSession ( owmMemberIdentity , [ mockFocus ] , mockFocus ) ;
1744+
1745+ const membershipManager = sess [ "membershipManager" ] ! ;
1746+ membershipManager . emit ( MembershipManagerEvent . DelayIdChanged , "newDelayId" ) ;
1747+ membershipManager . emit ( MembershipManagerEvent . StatusChanged , Status . Connected , Status . Disconnected ) ;
1748+ membershipManager . emit ( MembershipManagerEvent . ProbablyLeft , false ) ;
1749+ expect ( delayIdChanged ) . toHaveBeenCalledWith ( "newDelayId" , membershipManager ) ;
1750+ expect ( statusChanged ) . toHaveBeenCalledWith ( Status . Connected , Status . Disconnected , membershipManager ) ;
1751+ expect ( probablyLeftChanged ) . toHaveBeenCalledWith ( false , membershipManager ) ;
1752+ } ) ;
17071753 } ) ;
17081754} ) ;
0 commit comments