From 632642f5d9f9a870c10a6b26024d337d18f51a5d Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Date: Fri, 15 Aug 2025 16:52:08 -0300 Subject: [PATCH 1/9] fix and tests --- apps/meteor/app/api/server/v1/emoji-custom.ts | 10 +++- .../views/admin/customEmoji/CustomEmoji.tsx | 2 +- apps/meteor/tests/e2e/emojis.spec.ts | 50 ++++++++++++++++++- .../tests/e2e/page-objects/admin-emojis.ts | 31 ++++++++++++ .../fragments/admin-flextab-emoji.ts | 21 ++++++++ apps/meteor/tests/e2e/page-objects/index.ts | 1 + .../gazzodown/src/emoji/EmojiRenderer.tsx | 8 ++- packages/rest-typings/src/v1/emojiCustom.ts | 2 +- 8 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 apps/meteor/tests/e2e/page-objects/admin-emojis.ts create mode 100644 apps/meteor/tests/e2e/page-objects/fragments/admin-flextab-emoji.ts diff --git a/apps/meteor/app/api/server/v1/emoji-custom.ts b/apps/meteor/app/api/server/v1/emoji-custom.ts index a2f886afb1c11..a0b981d139060 100644 --- a/apps/meteor/app/api/server/v1/emoji-custom.ts +++ b/apps/meteor/app/api/server/v1/emoji-custom.ts @@ -79,10 +79,18 @@ API.v1.addRoute( async get() { const { offset, count } = await getPaginationItems(this.queryParams); const { sort, query } = await this.parseJsonQuery(); + const { name } = this.queryParams; return API.v1.success( await findEmojisCustom({ - query, + query: name + ? { + name: { + $regex: name, + $options: 'i', + }, + } + : query, pagination: { offset, count, diff --git a/apps/meteor/client/views/admin/customEmoji/CustomEmoji.tsx b/apps/meteor/client/views/admin/customEmoji/CustomEmoji.tsx index 66829705f5b74..fdb08f40b1be2 100644 --- a/apps/meteor/client/views/admin/customEmoji/CustomEmoji.tsx +++ b/apps/meteor/client/views/admin/customEmoji/CustomEmoji.tsx @@ -35,7 +35,7 @@ const CustomEmoji = ({ onClick, reload }: CustomEmojiProps) => { const query = useDebouncedValue( useMemo( () => ({ - query: JSON.stringify({ name: { $regex: escapeRegExp(text), $options: 'i' } }), + name: escapeRegExp(text), sort: `{ "${sortBy}": ${sortDirection === 'asc' ? 1 : -1} }`, count: itemsPerPage, offset: current, diff --git a/apps/meteor/tests/e2e/emojis.spec.ts b/apps/meteor/tests/e2e/emojis.spec.ts index c19d2f6b13b37..a57ae6ec626be 100644 --- a/apps/meteor/tests/e2e/emojis.spec.ts +++ b/apps/meteor/tests/e2e/emojis.spec.ts @@ -1,5 +1,5 @@ import { Users } from './fixtures/userStates'; -import { HomeChannel } from './page-objects'; +import { HomeChannel, AdminEmoji } from './page-objects'; import { createTargetChannel } from './utils'; import { test, expect } from './utils/test'; @@ -7,6 +7,7 @@ test.use({ storageState: Users.admin.state }); test.describe.serial('emoji', () => { let poHomeChannel: HomeChannel; + let poAdminEmoji: AdminEmoji; let targetChannel: string; test.beforeAll(async ({ api }) => { @@ -57,4 +58,51 @@ test.describe.serial('emoji', () => { await poHomeChannel.content.sendMessage('® © ™ # *'); await expect(poHomeChannel.content.lastUserMessage).toContainText('® © ™ # *'); }); + + test('should add a custom emoji, send it, rename it, and check render', async ({ page }) => { + const emojiName = 'customemoji'; + const newEmojiName = 'renamedemoji'; + const emojiUrl = './tests/e2e/fixtures/files/test-image.jpeg'; + + poAdminEmoji = new AdminEmoji(page); + + // Add custom emoji + await poHomeChannel.sidenav.openAdministrationByLabel('Workspace'); + await page.locator('role=link[name="Emoji"]').click(); + await poAdminEmoji.newButton.click(); + await poAdminEmoji.addEmoji.nameInput.fill(emojiName); + + const [fileChooser] = await Promise.all([page.waitForEvent('filechooser'), page.locator('role=button[name="Custom Emoji"]').click()]); + await fileChooser.setFiles(emojiUrl); + + await poAdminEmoji.addEmoji.btnSave.click(); + await poAdminEmoji.closeAdminButton.click(); + + await poHomeChannel.sidenav.openChat(targetChannel); + + await poHomeChannel.content.sendMessage(`:${emojiName}:`); + await page.keyboard.press('Enter'); + await expect(poHomeChannel.content.lastUserMessage.getByTestId(emojiName)).toBeVisible(); + + // Rename custom emoji + await poHomeChannel.sidenav.openAdministrationByLabel('Workspace'); + await page.locator('role=link[name="Emoji"]').click(); + await poAdminEmoji.findEmojiByName(emojiName); + await poAdminEmoji.addEmoji.nameInput.fill(newEmojiName); + + await poAdminEmoji.addEmoji.btnSave.click(); + await poAdminEmoji.closeAdminButton.click(); + + await poHomeChannel.sidenav.openChat(targetChannel); + + await poHomeChannel.content.sendMessage(`:${newEmojiName}:`); + await page.keyboard.press('Enter'); + await expect(poHomeChannel.content.lastUserMessage.getByTestId(newEmojiName)).toBeVisible(); + + // Remove custom emoji + await poHomeChannel.sidenav.openAdministrationByLabel('Workspace'); + await page.locator('role=link[name="Emoji"]').click(); + await poAdminEmoji.findEmojiByName(emojiName); + await poAdminEmoji.addEmoji.btnDelete.click(); + }); }); diff --git a/apps/meteor/tests/e2e/page-objects/admin-emojis.ts b/apps/meteor/tests/e2e/page-objects/admin-emojis.ts new file mode 100644 index 0000000000000..5b0d04d7951d6 --- /dev/null +++ b/apps/meteor/tests/e2e/page-objects/admin-emojis.ts @@ -0,0 +1,31 @@ +import type { Locator, Page } from '@playwright/test'; + +import { AdminFlextabEmoji } from './fragments/admin-flextab-emoji'; + +export class AdminEmoji { + private readonly page: Page; + + readonly addEmoji: AdminFlextabEmoji; + + constructor(page: Page) { + this.page = page; + this.addEmoji = new AdminFlextabEmoji(page); + } + + get newButton(): Locator { + return this.page.locator('role=button[name="New"]'); + } + + get closeAdminButton(): Locator { + return this.page.locator('#sidebar-region').getByRole('button', { name: 'Close' }); + } + + get searchInput(): Locator { + return this.page.locator('role=textbox[name="Search"]'); + } + + async findEmojiByName(emojiName: string) { + await this.searchInput.fill(emojiName); + await this.page.locator(`role=link[name=${emojiName}]`).click(); + } +} diff --git a/apps/meteor/tests/e2e/page-objects/fragments/admin-flextab-emoji.ts b/apps/meteor/tests/e2e/page-objects/fragments/admin-flextab-emoji.ts new file mode 100644 index 0000000000000..e28508729e582 --- /dev/null +++ b/apps/meteor/tests/e2e/page-objects/fragments/admin-flextab-emoji.ts @@ -0,0 +1,21 @@ +import type { Locator, Page } from '@playwright/test'; + +export class AdminFlextabEmoji { + private readonly page: Page; + + constructor(page: Page) { + this.page = page; + } + + get nameInput(): Locator { + return this.page.locator('role=textbox[name="Name"]'); + } + + get btnSave(): Locator { + return this.page.locator('role=button[name="Save"]'); + } + + get btnDelete(): Locator { + return this.page.locator('role=button[name="Delete"]'); + } +} diff --git a/apps/meteor/tests/e2e/page-objects/index.ts b/apps/meteor/tests/e2e/page-objects/index.ts index e503d367e8758..80914a7b75d2e 100644 --- a/apps/meteor/tests/e2e/page-objects/index.ts +++ b/apps/meteor/tests/e2e/page-objects/index.ts @@ -1,5 +1,6 @@ export * from './account-profile'; export * from './admin-email-inboxes'; +export * from './admin-emojis'; export * from './admin'; export * from './auth'; export * from './home-channel'; diff --git a/packages/gazzodown/src/emoji/EmojiRenderer.tsx b/packages/gazzodown/src/emoji/EmojiRenderer.tsx index 84116361157c9..ed221518ec363 100644 --- a/packages/gazzodown/src/emoji/EmojiRenderer.tsx +++ b/packages/gazzodown/src/emoji/EmojiRenderer.tsx @@ -25,7 +25,7 @@ const EmojiRenderer = ({ big = false, preview = false, ...emoji }: EmojiProps): return ( <> {descriptors?.map(({ name, className, image, content }, i) => ( - + {preview ? ( {content} @@ -37,7 +37,11 @@ const EmojiRenderer = ({ big = false, preview = false, ...emoji }: EmojiProps): )} )) ?? ( - + {sanitizedFallback} )} diff --git a/packages/rest-typings/src/v1/emojiCustom.ts b/packages/rest-typings/src/v1/emojiCustom.ts index 1ffb41f671a88..0498e82ac1811 100644 --- a/packages/rest-typings/src/v1/emojiCustom.ts +++ b/packages/rest-typings/src/v1/emojiCustom.ts @@ -52,7 +52,7 @@ export const isEmojiCustomList = ajv.compile(emojiCustomListSch export type EmojiCustomEndpoints = { '/v1/emoji-custom.all': { - GET: (params: PaginatedRequest<{ query: string }, 'name'>) => PaginatedResult<{ + GET: (params: PaginatedRequest<{ query?: string }, 'name'>) => PaginatedResult<{ emojis: IEmojiCustom[]; }>; }; From c0938939eddcbeb332334ebdf78983c47adc6ee2 Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Pinto Date: Fri, 15 Aug 2025 16:55:33 -0300 Subject: [PATCH 2/9] Create clean-feet-worry.md --- .changeset/clean-feet-worry.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/clean-feet-worry.md diff --git a/.changeset/clean-feet-worry.md b/.changeset/clean-feet-worry.md new file mode 100644 index 0000000000000..a6eb688c86e1d --- /dev/null +++ b/.changeset/clean-feet-worry.md @@ -0,0 +1,7 @@ +--- +"@rocket.chat/meteor": patch +"@rocket.chat/gazzodown": patch +"@rocket.chat/rest-typings": patch +--- + +Fixes search by name in custom emojis list, by adding a correct parameter to the endpoint `emoji-custom.all` From 774ca346fe0b4148490c44531f9ba6d91e2bf802 Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Pinto Date: Mon, 18 Aug 2025 10:10:21 -0300 Subject: [PATCH 3/9] Update clean-feet-worry.md --- .changeset/clean-feet-worry.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.changeset/clean-feet-worry.md b/.changeset/clean-feet-worry.md index a6eb688c86e1d..107aa31a1ace9 100644 --- a/.changeset/clean-feet-worry.md +++ b/.changeset/clean-feet-worry.md @@ -1,7 +1,9 @@ --- -"@rocket.chat/meteor": patch +"@rocket.chat/meteor": minor "@rocket.chat/gazzodown": patch -"@rocket.chat/rest-typings": patch +"@rocket.chat/rest-typings": minor --- Fixes search by name in custom emojis list, by adding a correct parameter to the endpoint `emoji-custom.all` + +Now the endpoint `emoji-custom.all` accepts a `name` as parameter, so the filter should work on emojis page withouth the necessity of set `ALLOW_UNSAFE_QUERY_AND_FIELDS_API_PARAMS` env var From c8701c03f586b8b8393a6503f3a1f9cece06ee44 Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Date: Mon, 18 Aug 2025 11:38:37 -0300 Subject: [PATCH 4/9] review --- apps/meteor/app/api/server/v1/emoji-custom.ts | 3 ++- apps/meteor/tests/end-to-end/api/emoji-custom.ts | 16 ++++++++++++++++ packages/rest-typings/src/v1/emojiCustom.ts | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/apps/meteor/app/api/server/v1/emoji-custom.ts b/apps/meteor/app/api/server/v1/emoji-custom.ts index a0b981d139060..fa84d3cc6b995 100644 --- a/apps/meteor/app/api/server/v1/emoji-custom.ts +++ b/apps/meteor/app/api/server/v1/emoji-custom.ts @@ -2,6 +2,7 @@ import { Media } from '@rocket.chat/core-services'; import type { IEmojiCustom } from '@rocket.chat/core-typings'; import { EmojiCustom } from '@rocket.chat/models'; import { isEmojiCustomList } from '@rocket.chat/rest-typings'; +import { escapeRegExp } from '@rocket.chat/string-helpers'; import { Meteor } from 'meteor/meteor'; import { SystemLogger } from '../../../../server/lib/logger/system'; @@ -86,7 +87,7 @@ API.v1.addRoute( query: name ? { name: { - $regex: name, + $regex: escapeRegExp(name), $options: 'i', }, } diff --git a/apps/meteor/tests/end-to-end/api/emoji-custom.ts b/apps/meteor/tests/end-to-end/api/emoji-custom.ts index 07285b928f8fe..4ff1072785feb 100644 --- a/apps/meteor/tests/end-to-end/api/emoji-custom.ts +++ b/apps/meteor/tests/end-to-end/api/emoji-custom.ts @@ -321,6 +321,22 @@ describe('[EmojiCustom]', () => { }) .end(done); }); + it('should return only filtered by name emojis', (done) => { + void request + .get(api('emoji-custom.all')) + .set(credentials) + .query({ + name: customEmojiName, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('emojis').and.to.be.an('array').and.to.have.length(1); + expect(res.body).to.have.property('total'); + expect(res.body).to.have.property('offset'); + expect(res.body).to.have.property('count'); + }) + .end(done); + }); }); describe('Accessing custom emojis', () => { diff --git a/packages/rest-typings/src/v1/emojiCustom.ts b/packages/rest-typings/src/v1/emojiCustom.ts index 0498e82ac1811..ad67bbf7d0e9b 100644 --- a/packages/rest-typings/src/v1/emojiCustom.ts +++ b/packages/rest-typings/src/v1/emojiCustom.ts @@ -52,7 +52,7 @@ export const isEmojiCustomList = ajv.compile(emojiCustomListSch export type EmojiCustomEndpoints = { '/v1/emoji-custom.all': { - GET: (params: PaginatedRequest<{ query?: string }, 'name'>) => PaginatedResult<{ + GET: (params: PaginatedRequest<{ name?: string }, 'name'>) => PaginatedResult<{ emojis: IEmojiCustom[]; }>; }; From 0e9461873e97511e2468909df41dc82a3c813343 Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Date: Mon, 18 Aug 2025 14:12:59 -0300 Subject: [PATCH 5/9] fix test --- apps/meteor/tests/end-to-end/api/emoji-custom.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/meteor/tests/end-to-end/api/emoji-custom.ts b/apps/meteor/tests/end-to-end/api/emoji-custom.ts index 4ff1072785feb..744480ea6f716 100644 --- a/apps/meteor/tests/end-to-end/api/emoji-custom.ts +++ b/apps/meteor/tests/end-to-end/api/emoji-custom.ts @@ -326,11 +326,11 @@ describe('[EmojiCustom]', () => { .get(api('emoji-custom.all')) .set(credentials) .query({ - name: customEmojiName, + name: `${customEmojiName}-without-aliases`, }) .expect(200) .expect((res) => { - expect(res.body).to.have.property('emojis').and.to.be.an('array').and.to.have.length(1); + expect(res.body).to.have.property('emojis').and.to.be.an('array').and.to.have.lengthOf(1); expect(res.body).to.have.property('total'); expect(res.body).to.have.property('offset'); expect(res.body).to.have.property('count'); From aa0b2c53d42276588e0aedc984b5ac2f75aea208 Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Date: Mon, 18 Aug 2025 15:58:43 -0300 Subject: [PATCH 6/9] fix e2e test --- apps/meteor/tests/e2e/emojis.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/meteor/tests/e2e/emojis.spec.ts b/apps/meteor/tests/e2e/emojis.spec.ts index a57ae6ec626be..21fc222bb174a 100644 --- a/apps/meteor/tests/e2e/emojis.spec.ts +++ b/apps/meteor/tests/e2e/emojis.spec.ts @@ -102,7 +102,7 @@ test.describe.serial('emoji', () => { // Remove custom emoji await poHomeChannel.sidenav.openAdministrationByLabel('Workspace'); await page.locator('role=link[name="Emoji"]').click(); - await poAdminEmoji.findEmojiByName(emojiName); + await poAdminEmoji.findEmojiByName(newEmojiName); await poAdminEmoji.addEmoji.btnDelete.click(); }); }); From 8441fbf5c3e957e2b5c910bdad2455f0271301af Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Pinto Date: Mon, 18 Aug 2025 18:28:49 -0300 Subject: [PATCH 7/9] remove escapeRegexp client --- apps/meteor/client/views/admin/customEmoji/CustomEmoji.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/meteor/client/views/admin/customEmoji/CustomEmoji.tsx b/apps/meteor/client/views/admin/customEmoji/CustomEmoji.tsx index fdb08f40b1be2..e0476e26ff47d 100644 --- a/apps/meteor/client/views/admin/customEmoji/CustomEmoji.tsx +++ b/apps/meteor/client/views/admin/customEmoji/CustomEmoji.tsx @@ -1,6 +1,5 @@ import { Box, Pagination, States, StatesActions, StatesAction, StatesIcon, StatesTitle } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; -import { escapeRegExp } from '@rocket.chat/string-helpers'; import { useTranslation, useEndpoint } from '@rocket.chat/ui-contexts'; import { useQuery } from '@tanstack/react-query'; import type { MutableRefObject } from 'react'; @@ -35,7 +34,7 @@ const CustomEmoji = ({ onClick, reload }: CustomEmojiProps) => { const query = useDebouncedValue( useMemo( () => ({ - name: escapeRegExp(text), + name: text, sort: `{ "${sortBy}": ${sortDirection === 'asc' ? 1 : -1} }`, count: itemsPerPage, offset: current, From 11b6dac53953900dbd26d90208870227de1933f6 Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Date: Wed, 20 Aug 2025 11:06:28 -0300 Subject: [PATCH 8/9] review fix --- apps/meteor/tests/e2e/emojis.spec.ts | 61 ++++++++++--------- .../gazzodown/src/emoji/EmojiRenderer.tsx | 8 +-- 2 files changed, 34 insertions(+), 35 deletions(-) diff --git a/apps/meteor/tests/e2e/emojis.spec.ts b/apps/meteor/tests/e2e/emojis.spec.ts index 21fc222bb174a..a938b6ca069c7 100644 --- a/apps/meteor/tests/e2e/emojis.spec.ts +++ b/apps/meteor/tests/e2e/emojis.spec.ts @@ -66,43 +66,46 @@ test.describe.serial('emoji', () => { poAdminEmoji = new AdminEmoji(page); - // Add custom emoji - await poHomeChannel.sidenav.openAdministrationByLabel('Workspace'); - await page.locator('role=link[name="Emoji"]').click(); - await poAdminEmoji.newButton.click(); - await poAdminEmoji.addEmoji.nameInput.fill(emojiName); + await test.step('Add custom emoji', async () => { + await poHomeChannel.sidenav.openAdministrationByLabel('Workspace'); + await page.locator('role=link[name="Emoji"]').click(); + await poAdminEmoji.newButton.click(); + await poAdminEmoji.addEmoji.nameInput.fill(emojiName); - const [fileChooser] = await Promise.all([page.waitForEvent('filechooser'), page.locator('role=button[name="Custom Emoji"]').click()]); - await fileChooser.setFiles(emojiUrl); + const [fileChooser] = await Promise.all([page.waitForEvent('filechooser'), page.locator('role=button[name="Custom Emoji"]').click()]); + await fileChooser.setFiles(emojiUrl); - await poAdminEmoji.addEmoji.btnSave.click(); - await poAdminEmoji.closeAdminButton.click(); + await poAdminEmoji.addEmoji.btnSave.click(); + await poAdminEmoji.closeAdminButton.click(); - await poHomeChannel.sidenav.openChat(targetChannel); + await poHomeChannel.sidenav.openChat(targetChannel); - await poHomeChannel.content.sendMessage(`:${emojiName}:`); - await page.keyboard.press('Enter'); - await expect(poHomeChannel.content.lastUserMessage.getByTestId(emojiName)).toBeVisible(); + await poHomeChannel.content.sendMessage(`:${emojiName}:`); + await page.keyboard.press('Enter'); + await expect(poHomeChannel.content.lastUserMessage.getByTitle(`:${emojiName}:`)).toBeVisible(); + }); - // Rename custom emoji - await poHomeChannel.sidenav.openAdministrationByLabel('Workspace'); - await page.locator('role=link[name="Emoji"]').click(); - await poAdminEmoji.findEmojiByName(emojiName); - await poAdminEmoji.addEmoji.nameInput.fill(newEmojiName); + await test.step('Rename custom emoji', async () => { + await poHomeChannel.sidenav.openAdministrationByLabel('Workspace'); + await page.locator('role=link[name="Emoji"]').click(); + await poAdminEmoji.findEmojiByName(emojiName); + await poAdminEmoji.addEmoji.nameInput.fill(newEmojiName); - await poAdminEmoji.addEmoji.btnSave.click(); - await poAdminEmoji.closeAdminButton.click(); + await poAdminEmoji.addEmoji.btnSave.click(); + await poAdminEmoji.closeAdminButton.click(); - await poHomeChannel.sidenav.openChat(targetChannel); + await poHomeChannel.sidenav.openChat(targetChannel); - await poHomeChannel.content.sendMessage(`:${newEmojiName}:`); - await page.keyboard.press('Enter'); - await expect(poHomeChannel.content.lastUserMessage.getByTestId(newEmojiName)).toBeVisible(); + await poHomeChannel.content.sendMessage(`:${newEmojiName}:`); + await page.keyboard.press('Enter'); + await expect(poHomeChannel.content.lastUserMessage.getByTitle(`:${newEmojiName}:`)).toBeVisible(); + }); - // Remove custom emoji - await poHomeChannel.sidenav.openAdministrationByLabel('Workspace'); - await page.locator('role=link[name="Emoji"]').click(); - await poAdminEmoji.findEmojiByName(newEmojiName); - await poAdminEmoji.addEmoji.btnDelete.click(); + await test.step('Delete custom emoji', async () => { + await poHomeChannel.sidenav.openAdministrationByLabel('Workspace'); + await page.locator('role=link[name="Emoji"]').click(); + await poAdminEmoji.findEmojiByName(newEmojiName); + await poAdminEmoji.addEmoji.btnDelete.click(); + }); }); }); diff --git a/packages/gazzodown/src/emoji/EmojiRenderer.tsx b/packages/gazzodown/src/emoji/EmojiRenderer.tsx index ed221518ec363..2021442d1006e 100644 --- a/packages/gazzodown/src/emoji/EmojiRenderer.tsx +++ b/packages/gazzodown/src/emoji/EmojiRenderer.tsx @@ -25,7 +25,7 @@ const EmojiRenderer = ({ big = false, preview = false, ...emoji }: EmojiProps): return ( <> {descriptors?.map(({ name, className, image, content }, i) => ( - + {preview ? ( {content} @@ -37,11 +37,7 @@ const EmojiRenderer = ({ big = false, preview = false, ...emoji }: EmojiProps): )} )) ?? ( - + {sanitizedFallback} )} From 3c2daa125665022124e75dc3e7ac06eb7add72ea Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Pinto Date: Wed, 20 Aug 2025 17:01:59 -0300 Subject: [PATCH 9/9] Update apps/meteor/tests/e2e/page-objects/admin-emojis.ts Co-authored-by: Douglas Fabris --- apps/meteor/tests/e2e/page-objects/admin-emojis.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/meteor/tests/e2e/page-objects/admin-emojis.ts b/apps/meteor/tests/e2e/page-objects/admin-emojis.ts index 5b0d04d7951d6..b489a611436b6 100644 --- a/apps/meteor/tests/e2e/page-objects/admin-emojis.ts +++ b/apps/meteor/tests/e2e/page-objects/admin-emojis.ts @@ -17,7 +17,7 @@ export class AdminEmoji { } get closeAdminButton(): Locator { - return this.page.locator('#sidebar-region').getByRole('button', { name: 'Close' }); + return this.page.getByRole('navigation').getByRole('button', { name: 'Close' }); } get searchInput(): Locator {