Files
upstream-jitsi-meet/tests/specs/jaas/fileSharing.spec.ts
upstream-mirror 1d2bfcac0c
Some checks failed
Prosody Plugin Tests / test (push) Failing after 10m11s
Close stale issues and PRs / stale (push) Failing after 1s
snapshot of https://github.com/jitsi/jitsi-meet.git @ fd1749dd28f4138aa80234fc7f311b19aaffa0e7 (2026-09-15)
2026-09-15 15:56:32 +05:00

173 lines
5.5 KiB
TypeScript

import path from 'node:path';
import type { Participant } from '../../helpers/Participant';
import { setTestProperties } from '../../helpers/TestProperties';
import { expectations } from '../../helpers/expectations';
import { joinJaasMuc, generateJaasToken as t } from '../../helpers/jaas';
setTestProperties(__filename, {
useJaas: true,
usesBrowsers: [ 'p1', 'p2' ]
});
// __dirname-based (not CWD-relative) - this is a local path read on the machine running the
// tests (uploaded to the remote grid session via wdio's own uploadFile), so it needs to resolve
// correctly regardless of whether the process's CWD is the repo root or tests/ itself.
const TEST_FILE_PATH = path.join(__dirname, '..', '..', 'resources', 'test-upload.txt');
const TEST_FILE_NAME = 'test-upload.txt';
describe('File sharing', () => {
let p1: Participant, p2: Participant;
let fileSharingEnabled: boolean;
it('setup', async () => {
const room = ctx.roomName;
p1 = await joinJaasMuc({
name: 'p1',
token: t({ room, features: { 'file-upload': 'true' } })
});
fileSharingEnabled = await p1.execute(
() => Boolean((window as any).config?.fileSharing?.enabled && (window as any).config?.fileSharing?.apiUrl)
);
expect(fileSharingEnabled).toBe(expectations.jaas.fileSharingEnabled);
});
it('upload button enabled with file-upload feature', async () => {
if (!fileSharingEnabled) {
return;
}
const panel = p1.getFileSharingPanel();
await panel.open();
expect(await panel.isUploadButtonEnabled()).toBe(true);
});
it('upload button disabled without file-upload feature', async () => {
if (!fileSharingEnabled) {
return;
}
p2 = await joinJaasMuc({ name: 'p2', token: t({ room: ctx.roomName }) });
const panel = p2.getFileSharingPanel();
await panel.open();
expect(await panel.isUploadButtonEnabled()).toBe(false);
});
it('user with file-upload can delete files uploaded by another participant', async () => {
if (!fileSharingEnabled) {
return;
}
// p1 (with file-upload) uploads a file
const p1Panel = p1.getFileSharingPanel();
await p1Panel.open();
await p1Panel.uploadFile(TEST_FILE_PATH);
await p1Panel.waitForFile(TEST_FILE_NAME);
// p2 (joined earlier without file-upload) rejoins with file-upload to test deletion of p1's file
p2 = await joinJaasMuc({
name: 'p2',
token: t({ room: ctx.roomName, features: { 'file-upload': 'true' } })
});
const p2Panel = p2.getFileSharingPanel();
await p2Panel.open();
await p2Panel.waitForFile(TEST_FILE_NAME);
// p2 should be able to see and use the remove button for p1's file
expect(await p2Panel.canRemoveFile(TEST_FILE_NAME)).toBe(true);
await p2Panel.removeFile(TEST_FILE_NAME);
await p1Panel.waitForFileGone(TEST_FILE_NAME);
});
it('user without file-upload can download but not delete files', async () => {
if (!fileSharingEnabled) {
return;
}
// p1 (with file-upload) uploads a fresh file
const p1Panel = p1.getFileSharingPanel();
await p1Panel.open();
await p1Panel.uploadFile(TEST_FILE_PATH);
await p1Panel.waitForFile(TEST_FILE_NAME);
// p2 rejoins without file-upload
p2 = await joinJaasMuc({ name: 'p2', token: t({ room: ctx.roomName }) });
const p2Panel = p2.getFileSharingPanel();
await p2Panel.open();
await p2Panel.waitForFile(TEST_FILE_NAME);
// Download button should be present, remove button should not
expect(await p2Panel.canDownloadFile(TEST_FILE_NAME)).toBe(true);
expect(await p2Panel.canRemoveFile(TEST_FILE_NAME)).toBe(false);
});
it('dragging into conference opens file sharing tab', async () => {
if (!fileSharingEnabled) {
return;
}
// p1 already has file-upload feature
const panel = p1.getFileSharingPanel();
// Ensure chat is closed before starting
if (await panel.isChatOpen()) {
await p1.getToolbar().clickCloseChatButton();
}
await panel.simulateDragIntoConference();
await p1.driver.waitUntil(
() => panel.isChatOpen(),
{ timeout: 3000, timeoutMsg: 'Chat did not open after drag' }
);
expect(await panel.isActive()).toBe(true);
});
it('dragging on pre-join screen does not open file sharing', async () => {
if (!fileSharingEnabled) {
return;
}
// Join with iFrame API, file-upload feature, and pre-join screen enabled — but do NOT click join
p1 = await joinJaasMuc(
{
name: 'p1',
iFrameApi: true,
token: t({ room: ctx.roomName, features: { 'file-upload': 'true' } })
},
{
configOverwrite: { prejoinConfig: { enabled: true } },
skipPrejoinButtonClick: true,
skipWaitToJoin: true
}
);
// Wait for pre-join screen to appear
await p1.getPreJoinScreen().waitForLoading();
// Simulate drag while on pre-join screen
const panel = p1.getFileSharingPanel();
await panel.simulateDragIntoConference();
// Chat/file sharing should NOT have opened
expect(await panel.isChatOpen()).toBe(false);
});
});