141 lines
5.3 KiB
TypeScript
141 lines
5.3 KiB
TypeScript
import { Participant } from '../../../helpers/Participant';
|
|
import { setTestProperties } from '../../../helpers/TestProperties';
|
|
import { config as testsConfig } from '../../../helpers/TestsConfig';
|
|
import WebhookProxy from '../../../helpers/WebhookProxy';
|
|
import { joinJaasMuc, generateJaasToken as t } from '../../../helpers/jaas';
|
|
|
|
setTestProperties(__filename, {
|
|
requireWebhookProxy: true,
|
|
useJaas: true,
|
|
usesBrowsers: [ 'p1', 'p2', 'p3' ]
|
|
});
|
|
|
|
describe('Visitors triggered by visitor tokens', () => {
|
|
let webhooksProxy: WebhookProxy;
|
|
let room: string;
|
|
|
|
async function verifyJoinedWebhook(participant: Participant) {
|
|
const context = participant.getToken()?.payload.context;
|
|
const event: {
|
|
customerId: string;
|
|
data: {
|
|
avatar: string;
|
|
email: string;
|
|
group: string;
|
|
id: string;
|
|
name: string;
|
|
participantJid: string;
|
|
role: string;
|
|
};
|
|
eventType: string;
|
|
} = await webhooksProxy.waitForEvent('PARTICIPANT_JOINED');
|
|
|
|
expect('PARTICIPANT_JOINED').toBe(event.eventType);
|
|
expect(event.data.avatar).toBe(context.user.avatar);
|
|
expect(event.data.email).toBe(context.user.email);
|
|
expect(event.data.id).toBe(context.user.id);
|
|
expect(event.data.group).toBe(context.group);
|
|
expect(event.data.name).toBe(context.user.name);
|
|
if (context.user.visitor) {
|
|
expect(event.data.participantJid.indexOf('meet.jitsi') != -1).toBe(true);
|
|
expect(event.data.role).toBe('visitor');
|
|
}
|
|
expect(event.customerId).toBe(testsConfig.jaas.customerId);
|
|
}
|
|
|
|
async function verifyLeftWebhook(participant: Participant) {
|
|
const context = participant.getToken()?.payload.context;
|
|
const eventLeft: {
|
|
customerId: string;
|
|
data: {
|
|
avatar: string;
|
|
email: string;
|
|
group: string;
|
|
id: string;
|
|
name: string;
|
|
participantJid: string;
|
|
role: string;
|
|
};
|
|
eventType: string;
|
|
} = await webhooksProxy.waitForEvent('PARTICIPANT_LEFT');
|
|
|
|
expect('PARTICIPANT_LEFT').toBe(eventLeft.eventType);
|
|
expect(eventLeft.data.avatar).toBe(context.user.avatar);
|
|
expect(eventLeft.data.email).toBe(context.user.email);
|
|
expect(eventLeft.data.id).toBe(context.user.id);
|
|
expect(eventLeft.data.group).toBe(context.group);
|
|
expect(eventLeft.data.name).toBe(context.user.name);
|
|
if (context.user.visitor) {
|
|
expect(eventLeft.data.participantJid.indexOf('meet.jitsi') != -1).toBe(true);
|
|
expect(eventLeft.data.role).toBe('visitor');
|
|
}
|
|
expect(eventLeft.customerId).toBe(testsConfig.jaas.customerId);
|
|
}
|
|
|
|
it('setup', async () => {
|
|
webhooksProxy = ctx.webhooksProxy;
|
|
webhooksProxy.defaultMeetingSettings = {
|
|
visitorsEnabled: true
|
|
};
|
|
room = ctx.roomName;
|
|
});
|
|
|
|
it('test visitor tokens', async () => {
|
|
|
|
webhooksProxy.clearCache();
|
|
const moderatorToken = t({ room, displayName: 'Mo de Rator', moderator: true });
|
|
const moderator = await joinJaasMuc({ name: 'p1', token: moderatorToken });
|
|
|
|
expect(await moderator.isInMuc()).toBe(true);
|
|
expect(await moderator.isModerator()).toBe(true);
|
|
expect(await moderator.isVisitor()).toBe(false);
|
|
await verifyJoinedWebhook(moderator);
|
|
|
|
webhooksProxy.clearCache();
|
|
// Joining with a participant token before any visitors
|
|
const participantToken = t({ room, displayName: 'Parti Cipant' });
|
|
const participant = await joinJaasMuc({ name: 'p2', token: participantToken });
|
|
|
|
expect(await participant.isInMuc()).toBe(true);
|
|
expect(await participant.isModerator()).toBe(false);
|
|
expect(await participant.isVisitor()).toBe(false);
|
|
await verifyJoinedWebhook(participant);
|
|
|
|
webhooksProxy.clearCache();
|
|
// Joining with a visitor token
|
|
const visitorToken = t({ room, displayName: 'Visi Tor', visitor: true });
|
|
const visitor = await joinJaasMuc({ name: 'p3', token: visitorToken });
|
|
|
|
expect(await visitor.isInMuc()).toBe(true);
|
|
expect(await visitor.isModerator()).toBe(false);
|
|
expect(await visitor.isVisitor()).toBe(true);
|
|
await verifyJoinedWebhook(visitor);
|
|
|
|
webhooksProxy.clearCache();
|
|
await participant.hangup();
|
|
await verifyLeftWebhook(participant);
|
|
|
|
webhooksProxy.clearCache();
|
|
// Joining with a participant token after visitors -> visitor
|
|
const participantToken2 = t({ room, displayName: 'Visi Tor 2' });
|
|
const visitor2 = await joinJaasMuc({ name: 'p2', token: participantToken2 });
|
|
|
|
expect(await visitor2.isInMuc()).toBe(true);
|
|
expect(await visitor2.isModerator()).toBe(false);
|
|
expect(await visitor2.isVisitor()).toBe(true);
|
|
await verifyJoinedWebhook(visitor2);
|
|
|
|
webhooksProxy.clearCache();
|
|
await visitor.hangup();
|
|
await verifyLeftWebhook(visitor);
|
|
|
|
webhooksProxy.clearCache();
|
|
await visitor2.hangup();
|
|
await verifyLeftWebhook(visitor2);
|
|
|
|
webhooksProxy.clearCache();
|
|
await moderator.hangup();
|
|
await verifyLeftWebhook(moderator);
|
|
});
|
|
});
|