From a4d8a2b65e9a4dd00ed543521f8ca7e75fbe10bb Mon Sep 17 00:00:00 2001
From: Aleksander Nicacio da Silva <aleksander.silva@rocket.chat>
Date: Mon, 15 Apr 2024 14:50:32 -0300
Subject: [PATCH] test: Added e2e tests for Livechat's avatar visibility
 (#32163)

---
 ...channel-livechat-avatar-visibility.spec.ts | 103 ++++++++++++++++++
 .../omnichannel-livechat-embedded.ts          |   4 +
 2 files changed, 107 insertions(+)
 create mode 100644 apps/meteor/tests/e2e/omnichannel/omnichannel-livechat-avatar-visibility.spec.ts

diff --git a/apps/meteor/tests/e2e/omnichannel/omnichannel-livechat-avatar-visibility.spec.ts b/apps/meteor/tests/e2e/omnichannel/omnichannel-livechat-avatar-visibility.spec.ts
new file mode 100644
index 00000000000..ec54ee6421a
--- /dev/null
+++ b/apps/meteor/tests/e2e/omnichannel/omnichannel-livechat-avatar-visibility.spec.ts
@@ -0,0 +1,103 @@
+import { faker } from '@faker-js/faker';
+import { Page } from '@playwright/test';
+
+import { createAuxContext } from '../fixtures/createAuxContext';
+import { Users } from '../fixtures/userStates';
+import { HomeOmnichannel, OmnichannelLiveChatEmbedded } from '../page-objects';
+import { createAgent, makeAgentAvailable } from '../utils/omnichannel/agents';
+import { test, expect } from '../utils/test';
+
+declare const window: Window & {
+	RocketChat: {
+		livechat: {
+			setTheme: (theme: { hideAgentAvatar?: boolean; hideGuestAvatar?: boolean }) => void;
+		};
+	};
+};
+
+const createVisitor = () => ({
+	name: `${faker.person.firstName()} ${faker.string.uuid()}`,
+	email: faker.internet.email(),
+});
+
+test.use({ storageState: Users.user1.state });
+
+test.describe('OC - Livechat - Avatar visibility', async () => {
+	let agent: Awaited<ReturnType<typeof createAgent>>;
+	let poLiveChat: OmnichannelLiveChatEmbedded;
+	let poAuxContext: { page: Page; poHomeOmnichannel: HomeOmnichannel };
+
+	test.beforeAll(async ({ api }) => {
+		agent = await createAgent(api, 'user1');
+
+		const res = await makeAgentAvailable(api, agent.data._id);
+
+		if (res.status() !== 200) {
+			throw new Error('Failed to make agent available');
+		}
+	});
+
+	test.beforeEach(async ({ browser }) => {
+		const { page: pageCtx } = await createAuxContext(browser, Users.user1);
+		poAuxContext = { page: pageCtx, poHomeOmnichannel: new HomeOmnichannel(pageCtx) };
+	});
+
+	test.beforeEach(async ({ page }) => {
+		poLiveChat = new OmnichannelLiveChatEmbedded(page);
+
+		await page.goto('/packages/rocketchat_livechat/assets/demo.html');
+	});
+
+	test.afterEach(async ({ page }) => {
+		await poAuxContext.page?.close();
+		await page.close();
+	});
+
+	test.afterAll(async () => {
+		await agent.delete();
+	});
+
+	test('OC - Livechat - Change avatar visibility', async () => {
+		const visitor = createVisitor();
+
+		await test.step('should initiate Livechat conversation', async () => {
+			await poLiveChat.openLiveChat();
+			await poLiveChat.sendMessage(visitor, false);
+			await poLiveChat.onlineAgentMessage.fill('this_a_test_message_from_user');
+			await poLiveChat.btnSendMessageToOnlineAgent.click();
+			await expect(poLiveChat.txtChatMessage('this_a_test_message_from_user')).toBeVisible();
+		});
+
+		await test.step('expect to send a message as agent', async () => {
+			await poAuxContext.poHomeOmnichannel.sidenav.openChat(visitor.name);
+			await poAuxContext.poHomeOmnichannel.content.sendMessage('this_is_a_test_message_from_agent');
+			await expect(poLiveChat.txtChatMessage('this_is_a_test_message_from_agent')).toBeVisible();
+		});
+
+		await test.step('expect visitor avatar to be hidden', async () => {
+			await expect(poLiveChat.imgAvatar(visitor.name)).not.toBeVisible();
+		});
+
+		await test.step('expect agent avatar to be visible', async () => {
+			await expect(poLiveChat.imgAvatar('user1')).toBeVisible();
+		});
+
+		await test.step('expect to make visitor avatar visible', async () => {
+			await poLiveChat.page.evaluate(() => window.RocketChat.livechat.setTheme({ hideGuestAvatar: false }));
+			await expect(poLiveChat.imgAvatar(visitor.name)).toBeVisible();
+		});
+
+		await test.step('expect to hide agent avatar', async () => {
+			await poLiveChat.page.evaluate(() => window.RocketChat.livechat.setTheme({ hideAgentAvatar: false }));
+			await expect(poLiveChat.imgAvatar('user1')).toBeVisible();
+		});
+
+		await test.step('should close the conversation', async () => {
+			await poAuxContext.poHomeOmnichannel.sidenav.openChat(visitor.name);
+			await poAuxContext.poHomeOmnichannel.content.btnCloseChat.click();
+			await poAuxContext.poHomeOmnichannel.content.closeChatModal.inputComment.fill('this_is_a_test_comment');
+			await poAuxContext.poHomeOmnichannel.content.closeChatModal.btnConfirm.click();
+			await expect(poAuxContext.poHomeOmnichannel.toastSuccess).toBeVisible();
+		});
+	});
+});
diff --git a/apps/meteor/tests/e2e/page-objects/omnichannel-livechat-embedded.ts b/apps/meteor/tests/e2e/page-objects/omnichannel-livechat-embedded.ts
index db4993eaaac..cd9d27f914f 100644
--- a/apps/meteor/tests/e2e/page-objects/omnichannel-livechat-embedded.ts
+++ b/apps/meteor/tests/e2e/page-objects/omnichannel-livechat-embedded.ts
@@ -43,6 +43,10 @@ export class OmnichannelLiveChatEmbedded {
 		return this.page.frameLocator('#rocketchat-iframe').locator(`li >> text="${message}"`);
 	}
 
+	imgAvatar(username: string): Locator {
+		return this.page.frameLocator('#rocketchat-iframe').locator(`img[alt="${username}"]`).last();
+	}
+
 	async closeChat(): Promise<void> {
 		await this.btnOptions.click();
 		await this.btnCloseChat.click();
-- 
GitLab