From 1976fff10e51a4de72b29a7c4a6b9e34e21d5ce7 Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Tue, 28 May 2024 12:51:00 -0300 Subject: [PATCH 01/13] feat: E2EE messages mentions --- .../app/lib/server/methods/updateMessage.ts | 2 +- apps/meteor/app/mentions/server/Mentions.ts | 20 +++++++++++++++---- apps/meteor/client/startup/e2e.ts | 18 ++++++++++++++++- .../.npm/package/npm-shrinkwrap.json | 2 +- .../core-typings/src/IMessage/IMessage.ts | 1 + 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/apps/meteor/app/lib/server/methods/updateMessage.ts b/apps/meteor/app/lib/server/methods/updateMessage.ts index 277841fd58e7..9eb324f314ad 100644 --- a/apps/meteor/app/lib/server/methods/updateMessage.ts +++ b/apps/meteor/app/lib/server/methods/updateMessage.ts @@ -10,7 +10,7 @@ import { hasPermissionAsync } from '../../../authorization/server/functions/hasP import { settings } from '../../../settings/server'; import { updateMessage } from '../functions/updateMessage'; -const allowedEditedFields = ['tshow', 'alias', 'attachments', 'avatar', 'emoji', 'msg', 'customFields']; +const allowedEditedFields = ['tshow', 'alias', 'attachments', 'avatar', 'emoji', 'msg', 'customFields', 'e2eMentions']; export async function executeUpdateMessage(uid: IUser['_id'], message: AtLeast, previewUrls?: string[]) { const originalMessage = await Messages.findOneById(message._id); diff --git a/apps/meteor/app/mentions/server/Mentions.ts b/apps/meteor/app/mentions/server/Mentions.ts index 9eda56fea21c..a03754ca891a 100644 --- a/apps/meteor/app/mentions/server/Mentions.ts +++ b/apps/meteor/app/mentions/server/Mentions.ts @@ -43,8 +43,17 @@ export class MentionsServer extends MentionsParser { }); } - async getUsersByMentions({ msg, rid, u: sender }: Pick): Promise { - const mentions = this.getUserMentions(msg); + async getUsersByMentions({ + msg, + rid, + u: sender, + t, + e2eMentions, + }: Pick): Promise { + const mentions = + t === 'e2e' && e2eMentions?.e2eUserMentions && e2eMentions?.e2eUserMentions.length > 0 + ? e2eMentions?.e2eUserMentions + : this.getUserMentions(msg); const mentionsAll: { _id: string; username: string }[] = []; const userMentions = []; @@ -67,8 +76,11 @@ export class MentionsServer extends MentionsParser { return [...mentionsAll, ...(userMentions.length ? await this.getUsers(userMentions) : [])]; } - async getChannelbyMentions({ msg }: Pick) { - const channels = this.getChannelMentions(msg); + async getChannelbyMentions({ msg, t, e2eMentions }: Pick) { + const channels = + t === 'e2e' && e2eMentions?.e2eChannelMentions && e2eMentions?.e2eChannelMentions.length > 0 + ? e2eMentions?.e2eChannelMentions + : this.getChannelMentions(msg); return this.getChannels(channels.map((c) => c.trim().substr(1))); } diff --git a/apps/meteor/client/startup/e2e.ts b/apps/meteor/client/startup/e2e.ts index f9cf156f8d8b..1cb2ad474668 100644 --- a/apps/meteor/client/startup/e2e.ts +++ b/apps/meteor/client/startup/e2e.ts @@ -3,7 +3,8 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { e2e } from '../../app/e2e/client/rocketchat.e2e'; -import { Subscriptions, ChatRoom } from '../../app/models/client'; +import { MentionsParser } from '../../app/mentions/lib/MentionsParser'; +import { Subscriptions, ChatRoom, Users } from '../../app/models/client'; import { settings } from '../../app/settings/client'; import { sdk } from '../../app/utils/client/lib/SDKClient'; import { onClientBeforeSendMessage } from '../lib/onClientBeforeSendMessage'; @@ -139,12 +140,27 @@ Meteor.startup(() => { return message; } + const me = (message.u?._id && Users.findOne(message.u?._id, { fields: { username: 1 } })?.username) || ''; + const pattern = settings.get('UTF8_User_Names_Validation'); + const useRealName = settings.get('UI_Use_Real_Name'); + + const mentions = new MentionsParser({ + pattern: () => pattern, + useRealName: () => useRealName, + me: () => me, + }); + + const e2eUserMentions: string[] = mentions.getUserMentions(message.msg); + const e2eChannelMentions: string[] = mentions.getChannelMentions(message.msg); + // Should encrypt this message. const msg = await e2eRoom.encrypt(message); message.msg = msg; message.t = 'e2e'; message.e2e = 'pending'; + message.e2eMentions = { e2eUserMentions, e2eChannelMentions }; + return message; }); }); diff --git a/apps/meteor/packages/flow-router/.npm/package/npm-shrinkwrap.json b/apps/meteor/packages/flow-router/.npm/package/npm-shrinkwrap.json index 47445b724946..8110d45c9f30 100644 --- a/apps/meteor/packages/flow-router/.npm/package/npm-shrinkwrap.json +++ b/apps/meteor/packages/flow-router/.npm/package/npm-shrinkwrap.json @@ -25,4 +25,4 @@ "integrity": "sha512-VH4FeG98gs6AkHivaW2O14vsOPBL9E80Sj7fITunoDijiYQ1lsVwJYmm1CSL+oLyO2N5HPdo23GXAG64uKOAZQ==" } } -} \ No newline at end of file +} diff --git a/packages/core-typings/src/IMessage/IMessage.ts b/packages/core-typings/src/IMessage/IMessage.ts index fc73ede6ece4..8f69adcdfedb 100644 --- a/packages/core-typings/src/IMessage/IMessage.ts +++ b/packages/core-typings/src/IMessage/IMessage.ts @@ -164,6 +164,7 @@ export interface IMessage extends IRocketChatRecord { tcount?: number; t?: MessageTypesValues; e2e?: 'pending' | 'done'; + e2eMentions?: { e2eUserMentions?: string[]; e2eChannelMentions?: string[] }; otrAck?: string; urls?: MessageUrl[]; From 1dafb569f65128d26546ec78916b5ffabff7732a Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Tue, 28 May 2024 13:54:56 -0300 Subject: [PATCH 02/13] adding E2E_Enabled_Mentions settings --- apps/meteor/client/startup/e2e.ts | 29 ++++++++++++++++---------- apps/meteor/server/settings/e2e.ts | 6 ++++++ packages/i18n/src/locales/en.i18n.json | 2 ++ 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/apps/meteor/client/startup/e2e.ts b/apps/meteor/client/startup/e2e.ts index b8f4e8c900fc..71ca1ed29c8d 100644 --- a/apps/meteor/client/startup/e2e.ts +++ b/apps/meteor/client/startup/e2e.ts @@ -147,25 +147,32 @@ Meteor.startup(() => { return message; } - const me = (message.u?._id && Users.findOne(message.u?._id, { fields: { username: 1 } })?.username) || ''; - const pattern = settings.get('UTF8_User_Names_Validation'); - const useRealName = settings.get('UI_Use_Real_Name'); + const mentionsEnabled = settings.get('E2E_Enabled_Mentions'); - const mentions = new MentionsParser({ - pattern: () => pattern, - useRealName: () => useRealName, - me: () => me, - }); + if (mentionsEnabled) { + const me = (message.u?._id && Users.findOne(message.u?._id, { fields: { username: 1 } })?.username) || ''; + const pattern = settings.get('UTF8_User_Names_Validation'); + const useRealName = settings.get('UI_Use_Real_Name'); - const e2eUserMentions: string[] = mentions.getUserMentions(message.msg); - const e2eChannelMentions: string[] = mentions.getChannelMentions(message.msg); + const mentions = new MentionsParser({ + pattern: () => pattern, + useRealName: () => useRealName, + me: () => me, + }); + + const e2eMentions: IMessage['e2eMentions'] = { + e2eUserMentions: mentions.getUserMentions(message.msg), + e2eChannelMentions: mentions.getChannelMentions(message.msg), + }; + + message.e2eMentions = e2eMentions; + } // Should encrypt this message. const msg = await e2eRoom.encrypt(message); message.msg = msg; message.t = 'e2e'; message.e2e = 'pending'; - message.e2eMentions = { e2eUserMentions, e2eChannelMentions }; return message; }); diff --git a/apps/meteor/server/settings/e2e.ts b/apps/meteor/server/settings/e2e.ts index 0ff31090f5d8..95a6d8020cd4 100644 --- a/apps/meteor/server/settings/e2e.ts +++ b/apps/meteor/server/settings/e2e.ts @@ -27,4 +27,10 @@ export const createE2ESettings = () => public: true, enableQuery: { _id: 'E2E_Enable', value: true }, }); + + await this.add('E2E_Enabled_Mentions', false, { + type: 'boolean', + public: true, + enableQuery: { _id: 'E2E_Enable', value: true }, + }); }); diff --git a/packages/i18n/src/locales/en.i18n.json b/packages/i18n/src/locales/en.i18n.json index 8e5c80ab1043..867e23f96814 100644 --- a/packages/i18n/src/locales/en.i18n.json +++ b/packages/i18n/src/locales/en.i18n.json @@ -1794,6 +1794,8 @@ "E2E_Enabled": "E2E Enabled", "E2E_Enabled_Default_DirectRooms": "Enable encryption for Direct Rooms by default", "E2E_Enabled_Default_PrivateRooms": "Enable encryption for Private Rooms by default", + "E2E_Enabled_Mentions": "Mentions", + "E2E_Enabled_Mentions_Description": "Notify people mentioned in encrypted content", "E2E_Encryption_Password_Change": "Change Encryption Password", "E2E_Encryption_Password_Explanation": "You can now create encrypted private groups and direct messages. You may also change existing private groups or DMs to encrypted.

This is end-to-end encryption so the key to encode/decode your messages will not be saved on the server. For that reason you need to store your password somewhere safe. You will be required to enter it on other devices you wish to use e2e encryption on.", "E2E_key_reset_email": "E2E Key Reset Notification", From 5442f41a53dc0689ff2870f130b48243e1f01ca9 Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Mon, 3 Jun 2024 17:17:00 -0300 Subject: [PATCH 03/13] fix: setting description --- packages/i18n/src/locales/en.i18n.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/i18n/src/locales/en.i18n.json b/packages/i18n/src/locales/en.i18n.json index 867e23f96814..bc0a825209e0 100644 --- a/packages/i18n/src/locales/en.i18n.json +++ b/packages/i18n/src/locales/en.i18n.json @@ -1795,7 +1795,7 @@ "E2E_Enabled_Default_DirectRooms": "Enable encryption for Direct Rooms by default", "E2E_Enabled_Default_PrivateRooms": "Enable encryption for Private Rooms by default", "E2E_Enabled_Mentions": "Mentions", - "E2E_Enabled_Mentions_Description": "Notify people mentioned in encrypted content", + "E2E_Enabled_Mentions_Description": "Notify people, and highlight user, channel, and team mentions in encrypted content.", "E2E_Encryption_Password_Change": "Change Encryption Password", "E2E_Encryption_Password_Explanation": "You can now create encrypted private groups and direct messages. You may also change existing private groups or DMs to encrypted.

This is end-to-end encryption so the key to encode/decode your messages will not be saved on the server. For that reason you need to store your password somewhere safe. You will be required to enter it on other devices you wish to use e2e encryption on.", "E2E_key_reset_email": "E2E Key Reset Notification", From f3656fc5e15f051c71900607fbcdf8a4bfc0a2cc Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Mon, 3 Jun 2024 17:17:19 -0300 Subject: [PATCH 04/13] test: adding mention tests --- apps/meteor/tests/e2e/e2e-encryption.spec.ts | 51 +++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/apps/meteor/tests/e2e/e2e-encryption.spec.ts b/apps/meteor/tests/e2e/e2e-encryption.spec.ts index 55de92ef8bad..84a3f5cedc55 100644 --- a/apps/meteor/tests/e2e/e2e-encryption.spec.ts +++ b/apps/meteor/tests/e2e/e2e-encryption.spec.ts @@ -132,11 +132,13 @@ test.describe.serial('e2e-encryption', () => { test.beforeAll(async ({ api }) => { expect((await api.post('/settings/E2E_Allow_Unencrypted_Messages', { value: true })).status()).toBe(200); + expect((await api.post('/settings/E2E_Enabled_Mentions', { value: true })).status()).toBe(200); }); test.afterAll(async ({ api }) => { expect((await api.post('/settings/E2E_Enable', { value: false })).status()).toBe(200); expect((await api.post('/settings/E2E_Allow_Unencrypted_Messages', { value: false })).status()).toBe(200); + expect((await api.post('/settings/E2E_Enabled_Mentions', { value: false })).status()).toBe(200); }); test('expect create a private channel encrypted and send an encrypted message', async ({ page }) => { @@ -205,6 +207,54 @@ test.describe.serial('e2e-encryption', () => { await expect(poHomeChannel.content.lastUserMessage.locator('.rcx-icon--name-key')).toBeVisible(); }); + test('expect create a encrypted private channel and mention user', async ({ page }) => { + const channelName = faker.string.uuid(); + + await poHomeChannel.sidenav.createEncryptedChannel(channelName); + + await expect(page).toHaveURL(`/group/${channelName}`); + + await poHomeChannel.dismissToast(); + + await expect(poHomeChannel.content.encryptedRoomHeaderIcon).toBeVisible(); + + await poHomeChannel.content.sendMessage('hello @user1'); + + const userMention = await page.getByRole('button', { + name: 'user1', + }); + + await expect(userMention).toBeVisible(); + + await userMention.click(); + + await expect(poHomeChannel.content.userCard).toBeVisible(); + }); + + test('expect create a encrypted private channel, mention a channel and navigate to it', async ({ page }) => { + const channelName = faker.string.uuid(); + + await poHomeChannel.sidenav.createEncryptedChannel(channelName); + + await expect(page).toHaveURL(`/group/${channelName}`); + + await poHomeChannel.dismissToast(); + + await expect(poHomeChannel.content.encryptedRoomHeaderIcon).toBeVisible(); + + await poHomeChannel.content.sendMessage('Are you in the #general channel?'); + + const channelMention = await page.getByRole('button', { + name: 'general', + }); + + await expect(channelMention).toBeVisible(); + + await channelMention.click(); + + await expect(page).toHaveURL(`/channel/general`); + }); + test('expect placeholder text in place of encrypted message, when E2EE is not setup', async ({ page }) => { const channelName = faker.string.uuid(); @@ -447,5 +497,4 @@ test.describe.serial('e2ee room setup', () => { await expect(poHomeChannel.content.inputMessage).not.toBeVisible(); await expect(page.locator('.rcx-states__title')).toContainText('Check back later'); }); - }); From d12a81956489c5a6cdf094880524f2f193d82ddc Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Mon, 3 Jun 2024 17:19:13 -0300 Subject: [PATCH 05/13] Create late-planes-sniff.md --- .changeset/late-planes-sniff.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/late-planes-sniff.md diff --git a/.changeset/late-planes-sniff.md b/.changeset/late-planes-sniff.md new file mode 100644 index 000000000000..28f4fe688b8d --- /dev/null +++ b/.changeset/late-planes-sniff.md @@ -0,0 +1,8 @@ +--- +"@rocket.chat/meteor": patch +"@rocket.chat/core-typings": patch +"@rocket.chat/i18n": patch +--- + +Added the possibility to enable mentions in End to end encrypted channels + From 184d9317c07d7daceadb8c90142813b059fec647 Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Wed, 5 Jun 2024 13:49:35 -0300 Subject: [PATCH 06/13] test: fix flaky keypress behavior --- apps/meteor/tests/e2e/page-objects/fragments/home-content.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/meteor/tests/e2e/page-objects/fragments/home-content.ts b/apps/meteor/tests/e2e/page-objects/fragments/home-content.ts index 4f55c4f088e7..6303f91440f5 100644 --- a/apps/meteor/tests/e2e/page-objects/fragments/home-content.ts +++ b/apps/meteor/tests/e2e/page-objects/fragments/home-content.ts @@ -82,8 +82,8 @@ export class HomeContent { async sendMessage(text: string): Promise { await this.joinRoomIfNeeded(); await this.page.waitForSelector('[name="msg"]:not([disabled])'); - await this.page.locator('[name="msg"]').type(text); - await this.page.keyboard.press('Enter'); + await this.page.locator('[name="msg"]').fill(text); + await this.page.getByLabel('Send').click(); } async dispatchSlashCommand(text: string): Promise { From 8c68d7d37e15883d92243eccc1dd9b3924b7f76f Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Wed, 12 Jun 2024 09:25:54 -0300 Subject: [PATCH 07/13] fix changeset --- .changeset/late-planes-sniff.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/late-planes-sniff.md b/.changeset/late-planes-sniff.md index 28f4fe688b8d..1be3518cac16 100644 --- a/.changeset/late-planes-sniff.md +++ b/.changeset/late-planes-sniff.md @@ -1,5 +1,5 @@ --- -"@rocket.chat/meteor": patch +"@rocket.chat/meteor": minor "@rocket.chat/core-typings": patch "@rocket.chat/i18n": patch --- From ad187fa9edb7a5c2b19ec114a35427efaef63637 Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Thu, 20 Jun 2024 09:53:24 -0300 Subject: [PATCH 08/13] fix: changeset --- .changeset/late-planes-sniff.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.changeset/late-planes-sniff.md b/.changeset/late-planes-sniff.md index 1be3518cac16..d702a938da78 100644 --- a/.changeset/late-planes-sniff.md +++ b/.changeset/late-planes-sniff.md @@ -4,5 +4,4 @@ "@rocket.chat/i18n": patch --- -Added the possibility to enable mentions in End to end encrypted channels - +Added a new setting to enable mentions in end to end encrypted channels From 912b80e9b9979193c0fb76315ff61e4d89b175b3 Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Thu, 20 Jun 2024 09:58:21 -0300 Subject: [PATCH 09/13] fix: e2e test --- apps/meteor/tests/e2e/e2e-encryption.spec.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apps/meteor/tests/e2e/e2e-encryption.spec.ts b/apps/meteor/tests/e2e/e2e-encryption.spec.ts index 8594eebe963f..405ccda3c52d 100644 --- a/apps/meteor/tests/e2e/e2e-encryption.spec.ts +++ b/apps/meteor/tests/e2e/e2e-encryption.spec.ts @@ -259,10 +259,6 @@ test.describe.serial('e2e-encryption', () => { }); await expect(userMention).toBeVisible(); - - await userMention.click(); - - await expect(poHomeChannel.content.userCard).toBeVisible(); }); test('expect create a encrypted private channel, mention a channel and navigate to it', async ({ page }) => { From 701b5ab901da8be1152b3fa8c592be5bbec42af6 Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Thu, 20 Jun 2024 09:58:52 -0300 Subject: [PATCH 10/13] fix: getting username --- apps/meteor/client/startup/e2e.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/meteor/client/startup/e2e.ts b/apps/meteor/client/startup/e2e.ts index 71ca1ed29c8d..129620d23648 100644 --- a/apps/meteor/client/startup/e2e.ts +++ b/apps/meteor/client/startup/e2e.ts @@ -150,7 +150,7 @@ Meteor.startup(() => { const mentionsEnabled = settings.get('E2E_Enabled_Mentions'); if (mentionsEnabled) { - const me = (message.u?._id && Users.findOne(message.u?._id, { fields: { username: 1 } })?.username) || ''; + const me = Meteor.user()?.username || ''; const pattern = settings.get('UTF8_User_Names_Validation'); const useRealName = settings.get('UI_Use_Real_Name'); From 66bc1dd58df0ed12c322fa8f4aa06c307d7298d2 Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Fri, 21 Jun 2024 10:53:54 -0300 Subject: [PATCH 11/13] fix: ts check --- apps/meteor/client/startup/e2e.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/meteor/client/startup/e2e.ts b/apps/meteor/client/startup/e2e.ts index 129620d23648..49a4da1fc17c 100644 --- a/apps/meteor/client/startup/e2e.ts +++ b/apps/meteor/client/startup/e2e.ts @@ -5,7 +5,7 @@ import { Tracker } from 'meteor/tracker'; import { E2EEState } from '../../app/e2e/client/E2EEState'; import { e2e } from '../../app/e2e/client/rocketchat.e2e'; import { MentionsParser } from '../../app/mentions/lib/MentionsParser'; -import { Subscriptions, ChatRoom, Users } from '../../app/models/client'; +import { Subscriptions, ChatRoom } from '../../app/models/client'; import { settings } from '../../app/settings/client'; import { sdk } from '../../app/utils/client/lib/SDKClient'; import { onClientBeforeSendMessage } from '../lib/onClientBeforeSendMessage'; From ad582e909a4c088f97ba83c3f6fa7d64585b4b96 Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Thu, 25 Jul 2024 10:02:35 -0300 Subject: [PATCH 12/13] fix: isE2EEMessage helper usage --- apps/meteor/app/mentions/server/Mentions.ts | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/apps/meteor/app/mentions/server/Mentions.ts b/apps/meteor/app/mentions/server/Mentions.ts index a03754ca891a..779af2087932 100644 --- a/apps/meteor/app/mentions/server/Mentions.ts +++ b/apps/meteor/app/mentions/server/Mentions.ts @@ -2,7 +2,7 @@ * Mentions is a named function that will process Mentions * @param {Object} message - The message object */ -import type { IMessage, IRoom, IUser } from '@rocket.chat/core-typings'; +import { isE2EEMessage, type IMessage, type IRoom, type IUser } from '@rocket.chat/core-typings'; import { type MentionsParserArgs, MentionsParser } from '../lib/MentionsParser'; @@ -43,15 +43,11 @@ export class MentionsServer extends MentionsParser { }); } - async getUsersByMentions({ - msg, - rid, - u: sender, - t, - e2eMentions, - }: Pick): Promise { + async getUsersByMentions(message: IMessage): Promise { + const { msg, rid, u: sender, e2eMentions }: Pick = message; + const mentions = - t === 'e2e' && e2eMentions?.e2eUserMentions && e2eMentions?.e2eUserMentions.length > 0 + isE2EEMessage(message) && e2eMentions?.e2eUserMentions && e2eMentions?.e2eUserMentions.length > 0 ? e2eMentions?.e2eUserMentions : this.getUserMentions(msg); const mentionsAll: { _id: string; username: string }[] = []; @@ -76,9 +72,11 @@ export class MentionsServer extends MentionsParser { return [...mentionsAll, ...(userMentions.length ? await this.getUsers(userMentions) : [])]; } - async getChannelbyMentions({ msg, t, e2eMentions }: Pick) { + async getChannelbyMentions(message: IMessage) { + const { msg, e2eMentions }: Pick = message; + const channels = - t === 'e2e' && e2eMentions?.e2eChannelMentions && e2eMentions?.e2eChannelMentions.length > 0 + isE2EEMessage(message) && e2eMentions?.e2eChannelMentions && e2eMentions?.e2eChannelMentions.length > 0 ? e2eMentions?.e2eChannelMentions : this.getChannelMentions(msg); return this.getChannels(channels.map((c) => c.trim().substr(1))); From 6e374c32a18c37daea7ee846d388053d24d67164 Mon Sep 17 00:00:00 2001 From: Hugo Costa Date: Thu, 25 Jul 2024 10:29:17 -0300 Subject: [PATCH 13/13] test: add user and channel test case --- apps/meteor/tests/e2e/e2e-encryption.spec.ts | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/apps/meteor/tests/e2e/e2e-encryption.spec.ts b/apps/meteor/tests/e2e/e2e-encryption.spec.ts index 08444579968f..2eef95d57d74 100644 --- a/apps/meteor/tests/e2e/e2e-encryption.spec.ts +++ b/apps/meteor/tests/e2e/e2e-encryption.spec.ts @@ -311,6 +311,31 @@ test.describe.serial('e2e-encryption', () => { await expect(page).toHaveURL(`/channel/general`); }); + test('expect create a encrypted private channel, mention a channel and user', async ({ page }) => { + const channelName = faker.string.uuid(); + + await poHomeChannel.sidenav.createEncryptedChannel(channelName); + + await expect(page).toHaveURL(`/group/${channelName}`); + + await poHomeChannel.dismissToast(); + + await expect(poHomeChannel.content.encryptedRoomHeaderIcon).toBeVisible(); + + await poHomeChannel.content.sendMessage('Are you in the #general channel, @user1 ?'); + + const channelMention = await page.getByRole('button', { + name: 'general', + }); + + const userMention = await page.getByRole('button', { + name: 'user1', + }); + + await expect(userMention).toBeVisible(); + await expect(channelMention).toBeVisible(); + }); + test('should encrypted field be available on edit room', async ({ page }) => { const channelName = faker.string.uuid();