Skip to content

Commit b190cde

Browse files
committed
fix: update code from PR comments
1 parent f48bfdf commit b190cde

File tree

2 files changed

+84
-121
lines changed

2 files changed

+84
-121
lines changed

packages/amazonq/test/e2e_new/amazonq/helpers/pinContextHelper.ts

Lines changed: 81 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,25 @@ import { WebElement } from 'vscode-extension-tester'
99
/**
1010
* Clicks the "Pin Context" button in the chat interface
1111
* @param webview The WebviewView instance
12-
* @returns Promise<boolean> True if button was found and clicked, false otherwise
12+
* @throws Error if button is not found
1313
*/
14-
export async function clickPinContextButton(webview: WebviewView): Promise<boolean> {
15-
try {
16-
const topBar = await waitForElement(webview, By.css('.mynah-prompt-input-top-bar'))
17-
const buttons = await topBar.findElements(
18-
By.css('.mynah-button.mynah-button-secondary.fill-state-always.status-clear.mynah-ui-clickable-item')
19-
)
20-
// double check the label to make sure it says "Pin Context"
21-
for (const button of buttons) {
22-
const label = await button.findElement(By.css('.mynah-button-label'))
23-
const labelText = await label.getText()
24-
console.log('THE BUTTON TEXT LABEL IS:', labelText)
25-
if (labelText === '@Pin Context') {
26-
console.log('Found Pin Context button, clicking...')
27-
await button.click()
28-
return true
29-
}
14+
export async function clickPinContextButton(webview: WebviewView): Promise<void> {
15+
const topBar = await waitForElement(webview, By.css('.mynah-prompt-input-top-bar'))
16+
const buttons = await topBar.findElements(
17+
By.css('.mynah-button.mynah-button-secondary.fill-state-always.status-clear.mynah-ui-clickable-item')
18+
)
19+
// double check the label to make sure it says "Pin Context"
20+
for (const button of buttons) {
21+
const label = await button.findElement(By.css('.mynah-button-label'))
22+
const labelText = await label.getText()
23+
console.log('THE BUTTON TEXT LABEL IS:', labelText)
24+
if (labelText === '@Pin Context') {
25+
console.log('Found Pin Context button, clicking...')
26+
await button.click()
27+
return
3028
}
31-
console.log('Pin Context button not found')
32-
return false
33-
} catch (e) {
34-
console.error('Error clicking Pin Context button:', e)
35-
return false
3629
}
30+
throw new Error('Pin Context button not found')
3731
}
3832

3933
/**
@@ -42,136 +36,105 @@ export async function clickPinContextButton(webview: WebviewView): Promise<boole
4236
* @returns Promise<boolean> Returns the items as a WebElement List and the labels in a string array
4337
*/
4438
export async function getPinContextMenuItems(webview: WebviewView): Promise<{ items: WebElement[]; labels: string[] }> {
45-
try {
46-
const menuList = await waitForElement(webview, By.css('.mynah-detailed-list-items-block'))
47-
await sleep(3000)
48-
const menuListItems = await menuList.findElements(By.css('.mynah-detailed-list-item.mynah-ui-clickable-item'))
49-
const labels: string[] = []
39+
const menuList = await waitForElement(webview, By.css('.mynah-detailed-list-items-block'))
40+
// TODO: Fix the need for a sleep function to be required at all.
41+
await sleep(100)
42+
const menuListItems = await menuList.findElements(By.css('.mynah-detailed-list-item.mynah-ui-clickable-item'))
5043

51-
for (const item of menuListItems) {
52-
try {
53-
const textWrapper = await item.findElement(By.css('.mynah-detailed-list-item-text'))
54-
const nameElement = await textWrapper.findElement(By.css('.mynah-detailed-list-item-name'))
55-
const labelText = await nameElement.getText()
56-
labels.push(labelText)
57-
console.log('Menu item found:', labelText)
58-
} catch (e) {
59-
labels.push('')
60-
console.log('Could not get text for menu item')
61-
}
62-
}
44+
if (menuListItems.length === 0) {
45+
throw new Error('No pin context menu items found')
46+
}
6347

64-
return { items: menuListItems, labels }
65-
} catch (e) {
66-
console.error('Error getting Pin Context menu items:', e)
67-
return { items: [], labels: [] }
48+
const labels: string[] = []
49+
for (const item of menuListItems) {
50+
const textWrapper = await item.findElement(By.css('.mynah-detailed-list-item-text'))
51+
const nameElement = await textWrapper.findElement(By.css('.mynah-detailed-list-item-name'))
52+
const labelText = await nameElement.getText()
53+
labels.push(labelText)
54+
console.log('Menu item found:', labelText)
6855
}
56+
57+
return { items: menuListItems, labels }
6958
}
7059

7160
/**
7261
* Clicks a specific item in the Pin Context menu by its label text
7362
* @param webview The WebviewView instance
7463
* @param itemName The text label of the menu item to click
75-
* @returns Promise<boolean> True if the item was found and clicked, false otherwise
64+
* @throws Error if the menu item is not found or DOM structure is invalid
7665
*
7766
* NOTE: To find all possible text labels, you can call getPinContextMenuItems
7867
*/
79-
export async function clickPinContextMenuItem(webview: WebviewView, itemName: string): Promise<boolean> {
80-
try {
81-
const menuList = await waitForElement(webview, By.css('.mynah-detailed-list-items-block'))
82-
await sleep(3000)
83-
const menuListItems = await menuList.findElements(By.css('.mynah-detailed-list-item.mynah-ui-clickable-item'))
84-
for (const item of menuListItems) {
85-
try {
86-
const textWrapper = await item.findElement(By.css('.mynah-detailed-list-item-text'))
87-
const nameElement = await textWrapper.findElement(By.css('.mynah-detailed-list-item-name'))
88-
const labelText = await nameElement.getText()
68+
export async function clickPinContextMenuItem(webview: WebviewView, itemName: string): Promise<void> {
69+
const menuList = await waitForElement(webview, By.css('.mynah-detailed-list-items-block'))
70+
await sleep(100)
71+
const menuListItems = await menuList.findElements(By.css('.mynah-detailed-list-item.mynah-ui-clickable-item'))
72+
for (const item of menuListItems) {
73+
const textWrapper = await item.findElement(By.css('.mynah-detailed-list-item-text'))
74+
const nameElement = await textWrapper.findElement(By.css('.mynah-detailed-list-item-name'))
75+
const labelText = await nameElement.getText()
8976

90-
if (labelText === itemName) {
91-
console.log(`Clicking Pin Context menu item: ${itemName}`)
92-
await item.click()
93-
return true
94-
}
95-
} catch (e) {
96-
continue
97-
}
77+
if (labelText === itemName) {
78+
console.log(`Clicking Pin Context menu item: ${itemName}`)
79+
await item.click()
80+
return
9881
}
99-
100-
console.log(`Pin Context menu item not found: ${itemName}`)
101-
return false
102-
} catch (e) {
103-
console.error(`Error clicking Pin Context menu item ${itemName}:`, e)
104-
return false
10582
}
83+
84+
throw new Error(`Pin Context menu item not found: ${itemName}`)
10685
}
10786
/**
10887
* Lists all the possible Sub-menu items in the console.
10988
* @param webview The WebviewView instance
11089
* @returns Promise<boolean> Returns the items as a WebElement List and the labels in a string array
11190
*/
11291
export async function getSubMenuItems(webview: WebviewView): Promise<{ items: WebElement[]; labels: string[] }> {
113-
try {
114-
const menuList = await waitForElement(webview, By.css('.mynah-detailed-list-items-block'))
115-
await sleep(3000)
116-
const menuListItems = await menuList.findElements(By.css('.mynah-detailed-list-item.mynah-ui-clickable-item'))
117-
const labels: string[] = []
92+
const menuList = await waitForElement(webview, By.css('.mynah-detailed-list-items-block'))
93+
await sleep(100)
94+
const menuListItems = await menuList.findElements(By.css('.mynah-detailed-list-item.mynah-ui-clickable-item'))
11895

119-
for (const item of menuListItems) {
120-
try {
121-
const textWrapper = await item.findElement(
122-
By.css('.mynah-detailed-list-item-text.mynah-detailed-list-item-text-direction-row')
123-
)
124-
const nameElement = await textWrapper.findElement(By.css('.mynah-detailed-list-item-name'))
125-
const labelText = await nameElement.getText()
126-
labels.push(labelText)
127-
console.log('Menu item found:', labelText)
128-
} catch (e) {
129-
labels.push('')
130-
console.log('Could not get text for menu item')
131-
}
132-
}
96+
if (menuListItems.length === 0) {
97+
throw new Error('No sub-menu items found')
98+
}
13399

134-
return { items: menuListItems, labels }
135-
} catch (e) {
136-
console.error('Error getting Pin Context menu items:', e)
137-
return { items: [], labels: [] }
100+
const labels: string[] = []
101+
for (const item of menuListItems) {
102+
const textWrapper = await item.findElement(
103+
By.css('.mynah-detailed-list-item-text.mynah-detailed-list-item-text-direction-row')
104+
)
105+
const nameElement = await textWrapper.findElement(By.css('.mynah-detailed-list-item-name'))
106+
const labelText = await nameElement.getText()
107+
labels.push(labelText)
108+
console.log('Menu item found:', labelText)
138109
}
110+
111+
return { items: menuListItems, labels }
139112
}
140113
/**
141114
* Clicks a specific item in the Sub-Menu by its label text
142115
* @param webview The WebviewView instance
143116
* @param itemName The text label of the menu item to click
144-
* @returns Promise<boolean> True if the item was found and clicked, false otherwise
117+
* @throws Error if the menu item is not found or DOM structure is invalid
145118
*
146119
* NOTE: To find all possible text labels, you can call getPinContextMenuItems
147120
*/
148-
export async function clickSubMenuItem(webview: WebviewView, itemName: string): Promise<boolean> {
149-
try {
150-
const menuList = await waitForElement(webview, By.css('.mynah-detailed-list-items-block'))
151-
await sleep(3000)
152-
const menuListItems = await menuList.findElements(By.css('.mynah-detailed-list-item.mynah-ui-clickable-item'))
153-
for (const item of menuListItems) {
154-
try {
155-
const textWrapper = await item.findElement(
156-
By.css('.mynah-detailed-list-item-text.mynah-detailed-list-item-text-direction-row')
157-
)
158-
const nameElement = await textWrapper.findElement(By.css('.mynah-detailed-list-item-name'))
159-
const labelText = await nameElement.getText()
121+
export async function clickSubMenuItem(webview: WebviewView, itemName: string): Promise<void> {
122+
const menuList = await waitForElement(webview, By.css('.mynah-detailed-list-items-block'))
123+
await sleep(100)
124+
const menuListItems = await menuList.findElements(By.css('.mynah-detailed-list-item.mynah-ui-clickable-item'))
125+
for (const item of menuListItems) {
126+
const textWrapper = await item.findElement(
127+
By.css('.mynah-detailed-list-item-text.mynah-detailed-list-item-text-direction-row')
128+
)
129+
const nameElement = await textWrapper.findElement(By.css('.mynah-detailed-list-item-name'))
130+
const labelText = await nameElement.getText()
160131

161-
if (labelText === itemName) {
162-
console.log(`Clicking Pin Context menu item: ${itemName}`)
163-
await item.click()
164-
return true
165-
}
166-
} catch (e) {
167-
continue
168-
}
132+
if (labelText === itemName) {
133+
console.log(`Clicking Pin Context menu item: ${itemName}`)
134+
await item.click()
135+
return
169136
}
170-
171-
console.log(`Pin Context menu item not found: ${itemName}`)
172-
return false
173-
} catch (e) {
174-
console.error(`Error clicking Pin Context menu item ${itemName}:`, e)
175-
return false
176137
}
138+
139+
throw new Error(`Pin Context menu item not found: ${itemName}`)
177140
}

packages/amazonq/test/e2e_new/amazonq/tests/pinContext.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ describe('Amazon Q Pin Context Functionality', function () {
2222
await dismissOverlayIfPresent(webviewView)
2323
await closeAllTabs(webviewView)
2424
})
25-
it('File Context Test', async () => {
25+
it('Allows User to Add File Context', async () => {
2626
await clickPinContextButton(webviewView)
2727
await clickPinContextMenuItem(webviewView, 'Files')
2828
await clickPinContextMenuItem(webviewView, 'Active file')
2929
})
30-
it('Pin Context Test', async () => {
30+
it('Allows User to Pin Workspace Context', async () => {
3131
await clickPinContextButton(webviewView)
3232
await clickPinContextMenuItem(webviewView, '@workspace')
3333
})
34-
it('Prompts Context Test', async () => {
34+
it('Allows User to Add Prompt Context', async () => {
3535
await clickPinContextButton(webviewView)
3636
await clickPinContextMenuItem(webviewView, 'Prompts')
3737
const addPrompt = await waitForElement(webviewView, By.css('.mynah-ui-icon.mynah-ui-icon-list-add'))

0 commit comments

Comments
 (0)