Skip to content

Commit 3715d1c

Browse files
HusneShabbirHusneShabbir
andauthored
enhance e2e tests (#1861)
Co-authored-by: HusneShabbir <husneshabbir447@gmail.com>
1 parent 58e26ba commit 3715d1c

3 files changed

Lines changed: 106 additions & 10 deletions

File tree

workspaces/lightspeed/packages/app/e2e-tests/lightspeed.test.ts

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@ import {
7272
verifyEnablePinnedChatsOption,
7373
selectDisablePinnedChats,
7474
selectEnablePinnedChats,
75+
verifyUnpinActionAvailable,
76+
selectUnpinAction,
77+
searchChats,
78+
verifyEmptySearchResults,
79+
verifyNoResultsFoundMessage,
80+
verifyChatUnpinned,
81+
clearSearch,
7582
} from './utils/chatManagement';
7683
import { login } from './utils/login';
7784
import {
@@ -169,7 +176,7 @@ test.describe('Lightspeed tests', () => {
169176
browser,
170177
}, testInfo) => {
171178
await test.step('Verify initial state of sidebar', async () => {
172-
await assertChatDialogInitialState(sharedPage, translations);
179+
await assertChatDialogInitialState(sharedPage, translations, devMode);
173180
});
174181

175182
await test.step('Close the sidebar and verify elements are hidden', async () => {
@@ -398,12 +405,14 @@ test.describe('Lightspeed tests', () => {
398405
);
399406
});
400407

401-
test.describe('Chat Management', () => {
408+
const chatManagementDescribeFn = devMode
409+
? test.describe
410+
: test.describe.skip;
411+
chatManagementDescribeFn('Chat Management', () => {
402412
const testChatName = 'Test Rename';
403413

404414
test('Verify chat actions menu', async () => {
405415
await sharedPage.reload();
406-
await sharedPage.waitForTimeout(3000);
407416
await openChatContextMenu(sharedPage);
408417
await verifyChatContextMenuOptions(sharedPage, translations);
409418
});
@@ -438,7 +447,7 @@ test.describe('Lightspeed tests', () => {
438447
await verifyChatDeleted(sharedPage, testChatName);
439448
});
440449

441-
test('Verify disable pinned chats', async () => {
450+
test('Verify disable pinned chats section via settings', async () => {
442451
await verifyPinnedSectionVisible(sharedPage, translations);
443452
await verifyEmptyPinnedChatsMessage(sharedPage, translations);
444453
await verifyChatbotSettingsVisible(sharedPage, translations);
@@ -449,7 +458,7 @@ test.describe('Lightspeed tests', () => {
449458
await verifyPinnedChatsNotEmpty(sharedPage, translations);
450459
});
451460

452-
test('Verify enable pinned chats', async () => {
461+
test('Verify enable pinned chats section via settings', async () => {
453462
await verifyPinnedSectionHidden(sharedPage, translations);
454463
await verifyPinnedChatsNotEmpty(sharedPage, translations);
455464
await openChatbotSettings(sharedPage, translations);
@@ -458,11 +467,29 @@ test.describe('Lightspeed tests', () => {
458467
await verifyPinnedSectionVisible(sharedPage, translations);
459468
await verifyEmptyPinnedChatsMessage(sharedPage, translations);
460469
});
461-
/**
462-
* TODO (after persistence is implemented):
463-
* - Verify pinned chat is visible after page refresh
464-
* - Add test to verify unpin actions
465-
*/
470+
471+
test.describe('Search no-results scenarios', () => {
472+
test('Verify search results when chats are not pinned', async () => {
473+
await searchChats(sharedPage, 'dummy search', translations);
474+
await verifyEmptySearchResults(sharedPage, translations);
475+
});
476+
477+
test('Verify search results when chats are pinned', async () => {
478+
await sharedPage.reload();
479+
await openChatContextMenu(sharedPage);
480+
await selectPinAction(sharedPage, translations);
481+
await searchChats(sharedPage, 'dummy search', translations);
482+
await verifyNoResultsFoundMessage(sharedPage, translations);
483+
});
484+
});
485+
486+
test('Verify unpin chat action removes chat from pinned section', async () => {
487+
await clearSearch(sharedPage);
488+
await openChatContextMenu(sharedPage);
489+
await verifyUnpinActionAvailable(sharedPage, translations);
490+
await selectUnpinAction(sharedPage, translations);
491+
await verifyChatUnpinned(sharedPage, translations);
492+
});
466493
});
467494
});
468495
});

workspaces/lightspeed/packages/app/e2e-tests/utils/chatManagement.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ export const submitChatRename = async (
8787
name: translations['conversation.rename.placeholder'],
8888
})
8989
.fill(newName);
90+
await expect(
91+
page.getByRole('textbox', {
92+
name: translations['conversation.rename.placeholder'],
93+
}),
94+
).toBeVisible();
9095
await page
9196
.getByRole('button', {
9297
name: translations['conversation.rename.confirm.action'],
@@ -306,3 +311,54 @@ export const selectEnablePinnedChats = async (
306311
.getByRole('menuitem', { name: translations['settings.pinned.enable'] })
307312
.click();
308313
};
314+
315+
export const searchChats = async (
316+
page: Page,
317+
searchQuery: string,
318+
translations: LightspeedMessages,
319+
) => {
320+
await page
321+
.getByRole('textbox', { name: translations['chatbox.search.placeholder'] })
322+
.fill(searchQuery);
323+
};
324+
325+
export const clearSearch = async (page: Page) => {
326+
await page.getByRole('button', { name: 'Reset' }).click();
327+
};
328+
329+
export const verifyEmptySearchResults = async (
330+
page: Page,
331+
translations: LightspeedMessages,
332+
) => {
333+
await expect(page.getByLabel(translations['conversation.category.recent']))
334+
.toMatchAriaSnapshot(`
335+
- heading "${translations['conversation.category.pinnedChats']}"
336+
- menu:
337+
- menuitem "${translations['chatbox.emptyState.noPinnedChats']}"
338+
- heading "${translations['conversation.category.recent']}"
339+
- menu:
340+
- menuitem "${translations['common.noSearchResults']}"
341+
`);
342+
};
343+
344+
export const verifyNoResultsFoundMessage = async (
345+
page: Page,
346+
translations: LightspeedMessages,
347+
) => {
348+
await expect(page.getByLabel(translations['button.newChat']))
349+
.toMatchAriaSnapshot(`
350+
- heading "${translations['chatbox.emptyState.noResults.title']}"
351+
- text: ${translations['chatbox.emptyState.noResults.body']}
352+
`);
353+
};
354+
355+
export const verifyChatUnpinned = async (
356+
page: Page,
357+
translations: LightspeedMessages,
358+
) => {
359+
await expect(
360+
page
361+
.getByRole('menu')
362+
.filter({ hasText: translations['chatbox.emptyState.noPinnedChats'] }),
363+
).toBeVisible();
364+
};

workspaces/lightspeed/packages/app/e2e-tests/utils/sidebar.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { LightspeedMessages } from './translations';
1919
export async function assertChatDialogInitialState(
2020
page: Page,
2121
translations: LightspeedMessages,
22+
devMode = true,
2223
) {
2324
await expect(page.getByLabel('Chatbot', { exact: true })).toContainText(
2425
translations['chatbox.header.title'],
@@ -27,6 +28,18 @@ export async function assertChatDialogInitialState(
2728
page.getByRole('button', { name: translations['aria.chatHistoryMenu'] }),
2829
).toBeVisible();
2930
await assertDrawerState(page, 'open', translations);
31+
32+
if (devMode) {
33+
await expect(page.getByLabel(translations['conversation.category.recent']))
34+
.toMatchAriaSnapshot(`
35+
- heading "${translations['conversation.category.pinnedChats']}"
36+
- menu:
37+
- menuitem "${translations['chatbox.emptyState.noPinnedChats']}"
38+
- heading "${translations['conversation.category.recent']}"
39+
- menu:
40+
- menuitem "${translations['chatbox.emptyState.noRecentChats']}"
41+
`);
42+
}
3043
}
3144

3245
export async function closeChatDrawer(

0 commit comments

Comments
 (0)