diff --git a/apps/meteor/client/views/omnichannel/managers/ManagersRoute.tsx b/apps/meteor/client/views/omnichannel/managers/ManagersRoute.tsx index c409f06c089eebbe2767ad41945238ff7b5406c8..75f8fad9d15ebd7212d8e3005291a9f63d607f13 100644 --- a/apps/meteor/client/views/omnichannel/managers/ManagersRoute.tsx +++ b/apps/meteor/client/views/omnichannel/managers/ManagersRoute.tsx @@ -82,7 +82,7 @@ const ManagersRoute = (): ReactElement => { {t('Remove')} </GenericTableHeaderCell> </GenericTableHeader> - <GenericTableBody> + <GenericTableBody data-qa-id='GenericTableManagerInfoBody'> {result.phase === AsyncStatePhase.LOADING && <GenericTableLoadingTable headerCells={2} />} {result.phase === AsyncStatePhase.RESOLVED && result.value.users.length > 0 && diff --git a/apps/meteor/tests/e2e/homepage.spec.ts b/apps/meteor/tests/e2e/homepage.spec.ts index 3f3cd30ca37e79bf1b302b6114206c3478365321..4b2f99397291ec507445942487dc5c8826cb23ae 100644 --- a/apps/meteor/tests/e2e/homepage.spec.ts +++ b/apps/meteor/tests/e2e/homepage.spec.ts @@ -11,7 +11,6 @@ const CardIds = { Desktop: 'homepage-desktop-apps-card', Docs: 'homepage-documentation-card', }; - test.use({ storageState: 'admin-session.json' }); test.describe.serial('homepage', () => { diff --git a/apps/meteor/tests/e2e/message-actions.spec.ts b/apps/meteor/tests/e2e/message-actions.spec.ts index d0a68c624524abc91246db7ba583209354c73612..ad2499e12c4a807007547cbf6053667710b805ce 100644 --- a/apps/meteor/tests/e2e/message-actions.spec.ts +++ b/apps/meteor/tests/e2e/message-actions.spec.ts @@ -50,7 +50,7 @@ test.describe.serial('message-actions', () => { await poHomeChannel.content.sendMessage(message); await poHomeChannel.content.openLastMessageMenu(); await page.locator('[data-qa-id="quote-message"]').click(); - await page.locator('[name="msg"]').type('this is a quote message'); + await page.locator('[name="msg"]').fill('this is a quote message'); await page.keyboard.press('Enter'); await expect(poHomeChannel.content.waitForLastMessageTextAttachmentEqualsText).toHaveText(message); diff --git a/apps/meteor/tests/e2e/omnichannel-manager.spec.ts b/apps/meteor/tests/e2e/omnichannel-manager.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..18d0d4381c0704236f35c0878848651819d1223a --- /dev/null +++ b/apps/meteor/tests/e2e/omnichannel-manager.spec.ts @@ -0,0 +1,31 @@ +import { test, expect } from './utils/test'; +import { OmnichannelManager } from './page-objects'; + +test.use({ storageState: 'admin-session.json' }); + +test.describe.serial('omnichannel-manager', () => { + const user1 = 'user1'; + let poOmnichannelManagers: OmnichannelManager; + + test.beforeEach(async ({ page }) => { + poOmnichannelManagers = new OmnichannelManager(page); + + await page.goto('/omnichannel'); + await poOmnichannelManagers.sidenav.linkManagers.click(); + }); + + test('expect add "user1" as manager', async ({ page }) => { + await poOmnichannelManagers.inputUsername.type(user1, { delay: 1000 }); + await page.keyboard.press('Enter'); + await poOmnichannelManagers.btnAdd.click(); + + await expect(poOmnichannelManagers.firstRowInTable(user1)).toBeVisible(); + }); + + test('expect remove "user1" as manager', async () => { + await poOmnichannelManagers.btnDeleteFirstRowInTable.click(); + await poOmnichannelManagers.btnModalRemove.click(); + + await expect(poOmnichannelManagers.firstRowInTable(user1)).toBeHidden(); + }); +}); diff --git a/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts b/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts index cb281a02f456e184bf37986769cdd7389b3237db..ccc8ed59c154c0586b7704e5b65284dbbdc43f30 100644 --- a/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts +++ b/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts @@ -44,7 +44,7 @@ export class HomeSidenav { async openChat(name: string): Promise<void> { await this.page.locator('[data-qa="sidebar-search"]').click(); await this.page.locator('[data-qa="sidebar-search-input"]').type(name); - await this.page.locator('[data-qa="sidebar-item-title"]', { hasText: name }).first().click(); + await this.page.locator(`[data-qa="sidebar-item-title"] >> text="${name}"`).first().click(); } // Note: this is a workaround for now since queued omnichannel chats are not searchable yet so we can't use openChat() :( diff --git a/apps/meteor/tests/e2e/page-objects/fragments/omnichannel-sidenav.ts b/apps/meteor/tests/e2e/page-objects/fragments/omnichannel-sidenav.ts index 50a827213e84e7913b041c7720f44f63d183d2be..633106279f9994e0392dc6f5c1428100b7e744d6 100644 --- a/apps/meteor/tests/e2e/page-objects/fragments/omnichannel-sidenav.ts +++ b/apps/meteor/tests/e2e/page-objects/fragments/omnichannel-sidenav.ts @@ -15,6 +15,10 @@ export class OmnichannelSidenav { return this.page.locator('a[href="omnichannel/agents"]'); } + get linkManagers(): Locator { + return this.page.locator('a[href="omnichannel/managers"]'); + } + get linkCustomFields(): Locator { return this.page.locator('a[href="/omnichannel/customfields"]'); } diff --git a/apps/meteor/tests/e2e/page-objects/index.ts b/apps/meteor/tests/e2e/page-objects/index.ts index a5c624c4c3c0871f8a43f6802cc006daebd0e88b..96881fe213045d6772b0e6879d8503c0b5c3b55d 100644 --- a/apps/meteor/tests/e2e/page-objects/index.ts +++ b/apps/meteor/tests/e2e/page-objects/index.ts @@ -9,4 +9,5 @@ export * from './omnichannel-agents'; export * from './omnichannel-departments'; export * from './omnichannel-current-chats'; export * from './omnichannel-livechat'; +export * from './omnichannel-manager'; export * from './omnichannel-custom-fields'; diff --git a/apps/meteor/tests/e2e/page-objects/omnichannel-manager.ts b/apps/meteor/tests/e2e/page-objects/omnichannel-manager.ts new file mode 100644 index 0000000000000000000000000000000000000000..8f0406800ed45bdb0da1a2f21935ac28aac7060f --- /dev/null +++ b/apps/meteor/tests/e2e/page-objects/omnichannel-manager.ts @@ -0,0 +1,34 @@ +import type { Locator, Page } from '@playwright/test'; + +import { OmnichannelSidenav } from './fragments'; + +export class OmnichannelManager { + private readonly page: Page; + + readonly sidenav: OmnichannelSidenav; + + constructor(page: Page) { + this.page = page; + this.sidenav = new OmnichannelSidenav(page); + } + + get inputUsername(): Locator { + return this.page.locator('input').first(); + } + + get btnAdd(): Locator { + return this.page.locator('button.rcx-button--primary.rcx-button >> text="Add"'); + } + + firstRowInTable(userId: string) { + return this.page.locator(`[data-qa-id="GenericTableManagerInfoBody"] [qa-user-id="${userId}"]`); + } + + get btnDeleteFirstRowInTable() { + return this.page.locator('button[title="Remove"]'); + } + + get btnModalRemove(): Locator { + return this.page.locator('#modal-root dialog .rcx-modal__inner .rcx-modal__footer .rcx-button--danger'); + } +}