Skip to content

Commit 3e2717f

Browse files
HusneShabbirHusneShabbir
andauthored
Add tests for chatbot scroll controls & duplicate file upload validation for attachments (#891)
* added tests for scroll controls * test Restructure * change in menuItem locator * added sidePanelAssertions * replaced test inside lightspeed.test.ts * removed multiple imports * chages in reusableFn * renamed the reusableFn --------- Co-authored-by: HusneShabbir <husneshabbir447@gmail.com>
1 parent 3f93232 commit 3e2717f

4 files changed

Lines changed: 90 additions & 11 deletions

File tree

workspaces/lightspeed/packages/app/e2e-tests/fixtures/responses.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,36 @@ export const contents = [
8888
},
8989
];
9090

91+
const repeatedSentence =
92+
'OpenShift deployment is a way to manage applications on the OpenShift platform.';
93+
const openshiftLongParagraph = `${repeatedSentence} `.repeat(30);
94+
95+
export const demoChatContent = [
96+
{
97+
lc: 1,
98+
type: 'constructor',
99+
id: ['langchain_core', 'messages', 'HumanMessage'],
100+
content: 'let me know about openshift deplyment in detail',
101+
response_metadata: {
102+
created_at: createdAt,
103+
},
104+
additional_kwargs: {},
105+
},
106+
{
107+
lc: 1,
108+
type: 'constructor',
109+
id: ['langchain_core', 'messages', 'AIMessage'],
110+
content: openshiftLongParagraph,
111+
response_metadata: {
112+
created_at: createdAt,
113+
model: models[1].id,
114+
tool_calls: [],
115+
invalid_tool_calls: [],
116+
additional_kwargs: {},
117+
},
118+
},
119+
];
120+
91121
export const botResponse = `This is a placeholder message`;
92122

93123
export const generateQueryResponse = (conversationId: string) => {

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

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@ import {
2121
defaultConversation,
2222
conversations,
2323
contents,
24+
demoChatContent,
2425
generateQueryResponse,
2526
botResponse,
2627
moreConversations,
2728
} from './fixtures/responses';
2829
import { openLightspeed, sendMessage } from './utils/testHelper';
2930
import {
3031
uploadFile,
31-
validateSuccessfulUpload,
32+
uploadAndAssertDuplicate,
3233
validateFailedUpload,
3334
supportedFileTypes,
3435
} from './utils/fileUpload';
@@ -37,6 +38,7 @@ import {
3738
closeChatDrawer,
3839
openChatDrawer,
3940
assertDrawerState,
41+
verifySidePanelConversation,
4042
} from './utils/sidebar';
4143

4244
const botQuery = 'Please respond';
@@ -137,7 +139,7 @@ test.describe('File Attachment Validation', () => {
137139
await uploadFile(page, path);
138140

139141
if (supportedFileTypes.includes(fileExtension)) {
140-
await validateSuccessfulUpload(page, name);
142+
await uploadAndAssertDuplicate(page, path, name);
141143
} else {
142144
await validateFailedUpload(page);
143145
}
@@ -175,15 +177,41 @@ test.describe('Conversation', () => {
175177

176178
test('Conversation is created and shown in side panel', async ({ page }) => {
177179
await sendMessage('test', page);
180+
await verifySidePanelConversation(page);
181+
});
178182

179-
const sidePanel = page.locator('.pf-v6-c-drawer__panel');
180-
await expect(sidePanel).toBeVisible();
183+
test('Verify scroll controls in Conversation', async ({ page }) => {
184+
await page.route(`${modelBaseUrl}/conversations/user*`, async route => {
185+
const json = { chat_history: demoChatContent };
186+
await route.fulfill({ json });
187+
});
188+
189+
await openLightspeed(page);
190+
191+
const message = demoChatContent[0].content;
192+
await sendMessage(message, page);
193+
194+
const loadingIndicator = page.locator('div.pf-chatbot__message-loading');
195+
await loadingIndicator.waitFor({ state: 'visible' });
196+
await verifySidePanelConversation(page);
197+
198+
const jumpTopButton = page.getByRole('button', { name: 'Jump top' });
199+
const jumpBottomButton = page.getByRole('button', { name: 'Jump bottom' });
200+
201+
await expect(jumpTopButton).toBeVisible();
202+
await jumpTopButton.click();
203+
await page.waitForTimeout(500);
204+
await expect(
205+
page.locator('span').filter({ hasText: message }),
206+
).toBeVisible();
181207

182-
const newButton = sidePanel.getByRole('button', { name: 'new chat' });
183-
await expect(newButton).toBeEnabled();
208+
await expect(jumpBottomButton).toBeVisible();
209+
await jumpBottomButton.click();
184210

185-
const conversation = sidePanel.locator('li.pf-chatbot__menu-item--active');
186-
await expect(conversation).toBeVisible();
211+
const responseMessage = page
212+
.locator('div.pf-chatbot__message-response')
213+
.last();
214+
await expect(responseMessage).toHaveText(/OpenShift deployment/);
187215
});
188216

189217
test('Filter and switch conversations', async ({ page }) => {

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,19 @@ export async function uploadFile(page: Page, filePath: string) {
3636
await fileChooser.setFiles(filePath);
3737
}
3838

39+
export async function uploadAndAssertDuplicate(
40+
page: Page,
41+
filePath: string,
42+
fileName: string,
43+
) {
44+
await validateSuccessfulUpload(page, fileName);
45+
await uploadFile(page, filePath);
46+
await expect(
47+
page.getByRole('heading', { name: 'File upload failed' }),
48+
).toBeVisible();
49+
await expect(page.getByText('File already exists.')).toBeVisible();
50+
}
51+
3952
export async function validateSuccessfulUpload(page: Page, fileName: string) {
4053
const trimmerFilename = fileName.split('.')[0];
4154

@@ -65,9 +78,6 @@ export async function validateSuccessfulUpload(page: Page, fileName: string) {
6578
.getByRole('contentinfo')
6679
.getByRole('button', { name: 'Close' })
6780
.click();
68-
await page
69-
.getByRole('button', { name: `Close ${trimmerFilename}` })
70-
.click({ force: true });
7181
}
7282

7383
export async function validateFailedUpload(page: Page) {

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,14 @@ export async function assertDrawerState(page: Page, state: 'open' | 'closed') {
4949
await expectations[state](locator);
5050
}
5151
}
52+
53+
export async function verifySidePanelConversation(page: Page) {
54+
const sidePanel = page.locator('.pf-v6-c-drawer__panel');
55+
await expect(sidePanel).toBeVisible();
56+
57+
const newButton = sidePanel.getByRole('button', { name: 'new chat' });
58+
await expect(newButton).toBeEnabled();
59+
60+
const conversation = sidePanel.locator('li.pf-chatbot__menu-item--active');
61+
await expect(conversation).toBeVisible();
62+
}

0 commit comments

Comments
 (0)