Skip to content

Commit 00c4c0b

Browse files
authored
Merge branch 'master' into moderator
2 parents 3394a00 + ecd43c9 commit 00c4c0b

File tree

85 files changed

+1907
-1850
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+1907
-1850
lines changed

JitsiConference.spec.ts

Lines changed: 257 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,257 @@
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+
'[email protected]', // myJid
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+
'[email protected]', // myJid
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+
'[email protected]', // myJid
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+
'[email protected]', // myJid
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+
'[email protected]', // myJid
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+
'[email protected]', // myJid
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

Comments
 (0)