import { faker } from '@faker-js/faker'; import { resetOwnE2EKey } from './resetOwnE2EKey'; import { ADMIN_CREDENTIALS } from '../config/constants'; import { Users } from '../fixtures/userStates'; import { EncryptedRoomPage } from '../page-objects/encrypted-room'; import { CreateE2EEChannel } from '../page-objects/fragments/e2ee'; import { ExportMessagesFlexTab } from '../page-objects/fragments/flextabs'; import { LoginPage } from '../page-objects/login'; import { deletePrivateRoomsByName } from '../utils'; import { preserveSettings } from '../utils/preserveSettings'; import { test, expect } from '../utils/test'; const settingsList = [ 'E2E_Enable', 'E2E_Allow_Unencrypted_Messages', 'E2E_Enabled_Default_DirectRooms', 'E2E_Enabled_Default_PrivateRooms', ]; preserveSettings(settingsList); test.describe('E2EE PDF Export', () => { const createdChannels: string[] = []; let createE2EEChannel: CreateE2EEChannel; test.use({ storageState: Users.admin.state }); test.beforeAll(async ({ api }) => { await api.post('/settings/E2E_Enable', { value: true }); await api.post('/settings/E2E_Allow_Unencrypted_Messages', { value: true }); await api.post('/settings/E2E_Enabled_Default_DirectRooms', { value: false }); await api.post('/settings/E2E_Enabled_Default_PrivateRooms', { value: false }); // Note: Using admin user, so no need for userE2EE cleanup }); test.beforeEach(async ({ page }) => { const loginPage = new LoginPage(page); await expect(await resetOwnE2EKey(ADMIN_CREDENTIALS)).toBeOK(); await loginPage.goto(); await loginPage.loginByUserState(Users.admin); createE2EEChannel = new CreateE2EEChannel(page); }); test.afterAll(async () => { await deletePrivateRoomsByName(ADMIN_CREDENTIALS, createdChannels); }); test('should display only the download file method when exporting messages in an e2ee room', async ({ page }) => { const encryptedRoomPage = new EncryptedRoomPage(page); const exportMessagesTab = new ExportMessagesFlexTab(page); const channelName = faker.string.uuid(); await createE2EEChannel.createAndStore(channelName, createdChannels); await expect(page).toHaveURL(`/group/${channelName}`); await expect(encryptedRoomPage.encryptedRoomHeaderIcon).toBeVisible(); await encryptedRoomPage.showExportMessagesTab(); await expect(exportMessagesTab.method).toContainClass('disabled'); // FIXME: looks like the component have an a11y issue await expect(exportMessagesTab.method).toHaveAccessibleName('Download file Method'); }); test('should allow exporting messages as PDF in an encrypted room', async ({ page }) => { const encryptedRoomPage = new EncryptedRoomPage(page); const exportMessagesTab = new ExportMessagesFlexTab(page); const channelName = faker.string.uuid(); await createE2EEChannel.createAndStore(channelName, createdChannels); await expect(page).toHaveURL(`/group/${channelName}`); await expect(encryptedRoomPage.encryptedRoomHeaderIcon).toBeVisible(); await encryptedRoomPage.sendMessage('This is a message to export as PDF.'); await encryptedRoomPage.showExportMessagesTab(); await expect(exportMessagesTab.method).toHaveAccessibleName('Download file Method'); // Select Output format as PDF await exportMessagesTab.setOutputFormat('PDF'); // select messages to be exported await exportMessagesTab.selectAllMessages(); // Wait for download event and match format const download = await exportMessagesTab.downloadMessages(); expect(download.suggestedFilename()).toMatch(/\.pdf$/); }); });