1+ import { XMPPEvents } from './service/xmpp/XMPPEvents' ;
2+ import { JitsiConferenceEvents } from './JitsiConferenceEvents' ;
3+ import JitsiConferenceEventManager from './JitsiConferenceEventManager' ;
4+
5+ describe ( 'JitsiConference' , ( ) => {
6+ describe ( 'JitsiConferenceEvents message handling' , ( ) => {
7+ let conference ;
8+ let eventManager ;
9+ let emitterSpy ;
10+ let mockChatRoom ;
11+
12+ beforeEach ( ( ) => {
13+ // Mock ChatRoom with proper listener tracking
14+ mockChatRoom = {
15+ addListener : ( ) => { } ,
16+ setParticipantPropertyListener : ( ) => { } ,
17+ connectionTimes : { } ,
18+ xmpp : {
19+ connectionTimes : { }
20+ } ,
21+ listeners : new Map ( )
22+ } ;
23+
24+ // Create minimal mock JitsiConference with all required properties
25+ conference = {
26+ room : mockChatRoom ,
27+ eventEmitter : {
28+ emit : ( ) => { }
29+ } ,
30+ getParticipantById : ( ) => null ,
31+ xmpp : {
32+ addListener : ( ) => { } ,
33+ removeListener : ( ) => { }
34+ } ,
35+ rtc : {
36+ addListener : ( ) => { }
37+ } ,
38+ // Additional properties required by JitsiConferenceEventManager
39+ _onMucJoined : ( ) => { } ,
40+ isJvbConnectionInterrupted : false ,
41+ mutedByFocusActor : null ,
42+ isMutedByFocus : false ,
43+ mutedVideoByFocusActor : null ,
44+ isVideoMutedByFocus : false ,
45+ mutedDesktopByFocusActor : null ,
46+ isDesktopMutedByFocus : false ,
47+ onMemberKicked : ( ) => { } ,
48+ onSuspendDetected : ( ) => { } ,
49+ onMemberJoined : ( ) => { } ,
50+ _onMemberBotTypeChanged : ( ) => { } ,
51+ onMemberLeft : ( ) => { } ,
52+ onDisplayNameChanged : ( ) => { } ,
53+ onSilentStatusChanged : ( ) => { } ,
54+ onLocalRoleChanged : ( ) => { } ,
55+ onUserRoleChanged : ( ) => { } ,
56+ authEnabled : false ,
57+ authIdentity : null ,
58+ onRemoteTrackAdded : ( ) => { } ,
59+ onRemoteTrackRemoved : ( ) => { } ,
60+ lastDominantSpeaker : null ,
61+ dominantSpeakerIsSilent : false ,
62+ statistics : null ,
63+ myUserId : ( ) => 'mockuser' ,
64+ options : { config : { startSilent : false } } ,
65+ getLocalTracks : ( ) => [ ] ,
66+ onIncomingCall : ( ) => { } ,
67+ onCallAccepted : ( ) => { } ,
68+ onTransportInfo : ( ) => { } ,
69+ onCallEnded : ( ) => { } ,
70+ getParticipants : ( ) => [ ]
71+ } ;
72+
73+ emitterSpy = spyOn ( conference . eventEmitter , 'emit' ) ;
74+ eventManager = new JitsiConferenceEventManager ( conference ) ;
75+
76+ // Mock addListener to capture listeners for testing
77+ spyOn ( mockChatRoom , 'addListener' ) . and . callFake ( ( eventName , listener ) => {
78+ mockChatRoom . listeners . set ( eventName , listener ) ;
79+ } ) ;
80+
81+ // Setup chat room listeners to capture the event handlers
82+ eventManager . setupChatRoomListeners ( ) ;
83+ } ) ;
84+
85+ it ( 'transforms XMPPEvents.MESSAGE_RECEIVED with source=visitor correctly' , ( ) => {
86+ // Get the MESSAGE_RECEIVED listener that was registered
87+ const messageListener = mockChatRoom . listeners . get ( XMPPEvents . MESSAGE_RECEIVED ) ;
88+ expect ( messageListener ) . toBeDefined ( ) ;
89+
90+ // Simulate ChatRoom firing MESSAGE_RECEIVED event with display-name extension source='visitor'
91+ messageListener (
92+ '[email protected] /resource' , // jid 93+ 'Hello from visitor' , // txt
94+ 95+ 1234567890 , // ts
96+ 'Visitor Name' , // displayName
97+ true , // isVisitor
98+ 'msg123' , // messageId
99+ undefined // source (undefined for visitor)
100+ ) ;
101+
102+ expect ( emitterSpy ) . toHaveBeenCalledWith (
103+ JitsiConferenceEvents . MESSAGE_RECEIVED ,
104+ 'resource' , // participantId (resource from jid)
105+ 'Hello from visitor' , // txt
106+ 1234567890 , // ts
107+ 'Visitor Name' , // displayName
108+ true , // isVisitor
109+ 'msg123' , // messageId
110+ undefined // source (undefined for visitor)
111+ ) ;
112+ } ) ;
113+
114+ it ( 'transforms XMPPEvents.MESSAGE_RECEIVED with source=token correctly' , ( ) => {
115+ // Get the MESSAGE_RECEIVED listener that was registered
116+ const messageListener = mockChatRoom . listeners . get ( XMPPEvents . MESSAGE_RECEIVED ) ;
117+ expect ( messageListener ) . toBeDefined ( ) ;
118+
119+ // Simulate ChatRoom firing MESSAGE_RECEIVED event with display-name extension source='token'
120+ messageListener (
121+ '[email protected] /resource' , // jid 122+ 'Hello from token user' , // txt
123+ 124+ 1234567890 , // ts
125+ 'Token User' , // displayName
126+ false , // isVisitor
127+ 'msg124' , // messageId
128+ 'token' // source
129+ ) ;
130+
131+ expect ( emitterSpy ) . toHaveBeenCalledWith (
132+ JitsiConferenceEvents . MESSAGE_RECEIVED ,
133+ 'resource' , // participantId (resource from jid)
134+ 'Hello from token user' , // txt
135+ 1234567890 , // ts
136+ 'Token User' , // displayName
137+ false , // isVisitor
138+ 'msg124' , // messageId
139+ 'token' // source
140+ ) ;
141+ } ) ;
142+
143+ it ( 'transforms XMPPEvents.MESSAGE_RECEIVED with source=guest correctly' , ( ) => {
144+ // Get the MESSAGE_RECEIVED listener that was registered
145+ const messageListener = mockChatRoom . listeners . get ( XMPPEvents . MESSAGE_RECEIVED ) ;
146+ expect ( messageListener ) . toBeDefined ( ) ;
147+
148+ // Simulate ChatRoom firing MESSAGE_RECEIVED event with display-name extension source='guest'
149+ messageListener (
150+ '[email protected] /resource' , // jid 151+ 'Hello from guest user' , // txt
152+ 153+ 1234567891 , // ts
154+ 'Guest User' , // displayName
155+ false , // isVisitor
156+ 'msg125' , // messageId
157+ 'guest' // source
158+ ) ;
159+
160+ expect ( emitterSpy ) . toHaveBeenCalledWith (
161+ JitsiConferenceEvents . MESSAGE_RECEIVED ,
162+ 'resource' , // participantId (resource from jid)
163+ 'Hello from guest user' , // txt
164+ 1234567891 , // ts
165+ 'Guest User' , // displayName
166+ false , // isVisitor
167+ 'msg125' , // messageId
168+ 'guest' // source
169+ ) ;
170+ } ) ;
171+
172+ it ( 'transforms XMPPEvents.MESSAGE_RECEIVED without display-name extension correctly' , ( ) => {
173+ // Get the MESSAGE_RECEIVED listener that was registered
174+ const messageListener = mockChatRoom . listeners . get ( XMPPEvents . MESSAGE_RECEIVED ) ;
175+ expect ( messageListener ) . toBeDefined ( ) ;
176+
177+ // Simulate ChatRoom firing MESSAGE_RECEIVED event without display-name extension
178+ messageListener (
179+ '[email protected] /resource' , // jid 180+ 'Hello regular message' , // txt
181+ 182+ 1234567892 , // ts
183+ undefined , // displayName
184+ false , // isVisitor
185+ 'msg126' , // messageId
186+ undefined // source
187+ ) ;
188+
189+ expect ( emitterSpy ) . toHaveBeenCalledWith (
190+ JitsiConferenceEvents . MESSAGE_RECEIVED ,
191+ 'resource' , // participantId
192+ 'Hello regular message' , // txt
193+ 1234567892 , // ts
194+ undefined , // displayName
195+ false , // isVisitor
196+ 'msg126' , // messageId
197+ undefined // source
198+ ) ;
199+ } ) ;
200+
201+ it ( 'transforms XMPPEvents.PRIVATE_MESSAGE_RECEIVED with visitor correctly' , ( ) => {
202+ // Get the PRIVATE_MESSAGE_RECEIVED listener that was registered
203+ const privateMessageListener = mockChatRoom . listeners . get ( XMPPEvents . PRIVATE_MESSAGE_RECEIVED ) ;
204+ expect ( privateMessageListener ) . toBeDefined ( ) ;
205+
206+ // Simulate ChatRoom firing PRIVATE_MESSAGE_RECEIVED event for visitor
207+ privateMessageListener (
208+ '[email protected] /resource' , // jid 209+ 'Private message from visitor' , // txt
210+ 211+ 1234567893 , // ts
212+ 'msg127' , // messageId
213+ 'Visitor Name' , // displayName
214+ true , // isVisitor
215+ '[email protected] ' // ofrom (originalFrom) 216+ ) ;
217+
218+ expect ( emitterSpy ) . toHaveBeenCalledWith (
219+ JitsiConferenceEvents . PRIVATE_MESSAGE_RECEIVED ,
220+ '[email protected] ' , // participantId (ofrom for visitor) 221+ 'Private message from visitor' , // txt
222+ 1234567893 , // ts
223+ 'msg127' , // messageId
224+ 'Visitor Name' , // displayName
225+ true // isVisitor
226+ ) ;
227+ } ) ;
228+
229+ it ( 'transforms XMPPEvents.PRIVATE_MESSAGE_RECEIVED without visitor correctly' , ( ) => {
230+ // Get the PRIVATE_MESSAGE_RECEIVED listener that was registered
231+ const privateMessageListener = mockChatRoom . listeners . get ( XMPPEvents . PRIVATE_MESSAGE_RECEIVED ) ;
232+ expect ( privateMessageListener ) . toBeDefined ( ) ;
233+
234+ // Simulate ChatRoom firing PRIVATE_MESSAGE_RECEIVED event for regular participant
235+ privateMessageListener (
236+ '[email protected] /resource' , // jid 237+ 'Private message from regular' , // txt
238+ 239+ 1234567894 , // ts
240+ 'msg128' , // messageId
241+ undefined , // displayName
242+ false , // isVisitor
243+ undefined // ofrom
244+ ) ;
245+
246+ expect ( emitterSpy ) . toHaveBeenCalledWith (
247+ JitsiConferenceEvents . PRIVATE_MESSAGE_RECEIVED ,
248+ 'resource' , // participantId (resource from jid)
249+ 'Private message from regular' , // txt
250+ 1234567894 , // ts
251+ 'msg128' , // messageId
252+ undefined , // displayName
253+ false // isVisitor
254+ ) ;
255+ } ) ;
256+ } ) ;
257+ } ) ;
0 commit comments