Skip to content

Commit 15b8f3a

Browse files
committed
tests (#307, #306, #305, #263, #266)
- Update codeGraph Locators - Update code graph workers - Update projectInfo api call
1 parent 8f8d8ee commit 15b8f3a

File tree

8 files changed

+318
-160
lines changed

8 files changed

+318
-160
lines changed

app/components/code-graph.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -432,8 +432,8 @@ export function CodeGraph({
432432
</button>
433433
}
434434
</div>
435-
<div className="w-full absolute bottom-0 left-0 flex justify-between items-center p-4 z-10 pointer-events-none">
436-
<div className="flex gap-4 text-gray-500">
435+
<div data-name="canvas-info-panel" className="w-full absolute bottom-0 left-0 flex justify-between items-center p-4 z-10 pointer-events-none">
436+
<div data-name="metrics-panel" className="flex gap-4 text-gray-500">
437437
<p>{nodesCount} Nodes</p>
438438
<p>{edgesCount} Edges</p>
439439
</div>

app/components/dataPanel.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export default function DataPanel({ obj, setObj, url }: Props) {
3636
const object = Object.entries(obj).filter(([k]) => !excludedProperties.includes(k))
3737

3838
return (
39-
<div className="z-20 absolute -top-10 left-20 bg-[#343434] text-white shadow-lg rounded-lg flex flex-col max-h-[88%] max-w-[56%] overflow-hidden" >
39+
<div data-name="node-details-panel" className="z-20 absolute -top-10 left-20 bg-[#343434] text-white shadow-lg rounded-lg flex flex-col max-h-[88%] max-w-[56%] overflow-hidden" >
4040
<header className="bg-[#191919] flex items-center gap-8 justify-between p-8">
4141
<p title={label} className="truncate font-bold">{label.toUpperCase()}</p>
4242
<button onClick={() => setObj(undefined)}>

e2e/config/constants.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export const GRAPH_ID = "1";
1+
export const GRAPH_ID = "GraphRAG-SDK";
22
export const PROJECT_NAME = "GraphRAG-SDK";
33
export const CHAT_OPTTIONS_COUNT = 1;
44
export const Node_Question = "how many nodes do we have?";

e2e/logic/POM/codeGraph.ts

+35-9
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ export default class CodeGraph extends BasePage {
3939
}
4040

4141
private get selectGraphInComboBox(): (graph: string) => Locator {
42-
return (graph: string) => this.page.locator(`//div[@role='presentation']//div[@role='option'][${graph}]`);
42+
return (graph: string) => this.page.locator(`//div[@role='presentation']//div//span[contains(text(), '${graph}')]`);
4343
}
4444

4545
private get lastElementInChat(): Locator {
46-
return this.page.locator("//main[@data-name='main-chat']/*[last()]/p");
46+
return this.page.locator("//main[@data-name='main-chat']/*[last()]/span");
4747
}
4848

4949
private get typeUrlInput(): Locator {
@@ -161,10 +161,6 @@ export default class CodeGraph extends BasePage {
161161
return this.page.locator("//button[@title='Center']");
162162
}
163163

164-
private get removeNodeViaElementMenu(): Locator {
165-
return this.page.locator("//button[@title='Remove']");
166-
}
167-
168164
private get codeGraphCheckbox(): (checkbox: string) => Locator {
169165
return (checkbox: string) => this.page.locator(`(//button[@role='checkbox'])[${checkbox}]`);
170166
}
@@ -173,6 +169,21 @@ export default class CodeGraph extends BasePage {
173169
return this.page.locator("//button[p[text()='Clear Graph']]");
174170
}
175171

172+
private get elementMenuButton(): (buttonID: string) => Locator {
173+
return (buttonID: string) => this.page.locator(`//button[@title='${buttonID}']`);
174+
}
175+
176+
private get nodedetailsPanelHeader(): Locator {
177+
return this.page.locator("//div[@data-name='node-details-panel']/header/p");
178+
}
179+
180+
private get nodedetailsPanelcloseBtn(): Locator {
181+
return this.page.locator("//div[@data-name='node-details-panel']/header/button");
182+
}
183+
private get canvasMetricsPanel(): (itemId: string) => Locator {
184+
return (itemId: string) => this.page.locator(`//div[@data-name='metrics-panel']/p[${itemId}]`);
185+
}
186+
176187
/* NavBar functionality */
177188
async clickOnFalkorDbLogo(): Promise<Page> {
178189
await this.page.waitForLoadState('networkidle');
@@ -232,8 +243,9 @@ export default class CodeGraph extends BasePage {
232243
await this.lightbulbBtn.click();
233244
}
234245

235-
async getTextInLastChatElement(): Promise<string | null>{
236-
return await this.lastElementInChat.textContent();
246+
async getTextInLastChatElement(): Promise<string>{
247+
await delay(2500);
248+
return (await this.lastElementInChat.textContent())!;
237249
}
238250

239251
async getLastChatElementButtonCount(): Promise<number | null>{
@@ -318,6 +330,7 @@ export default class CodeGraph extends BasePage {
318330
}
319331

320332
async getSearchAutoCompleteCount(): Promise<number> {
333+
await this.searchBarAutoCompleteOptions.first().waitFor({ state: 'visible' });
321334
return await this.searchBarAutoCompleteOptions.count();
322335
}
323336

@@ -364,7 +377,7 @@ export default class CodeGraph extends BasePage {
364377
}
365378

366379
async clickOnRemoveNodeViaElementMenu(): Promise<void> {
367-
await this.removeNodeViaElementMenu.click();
380+
await this.elementMenuButton("Remove").click();
368381
}
369382

370383
async rightClickOnNode(x : number, y: number): Promise<void> {
@@ -395,4 +408,17 @@ export default class CodeGraph extends BasePage {
395408
await this.page.mouse.move(absEndX, absEndY);
396409
await this.page.mouse.up();
397410
}
411+
412+
async getNodeDetailsHeader(): Promise<string> {
413+
await this.elementMenuButton("View Node").click();
414+
const text = await this.nodedetailsPanelHeader.innerHTML();
415+
await this.nodedetailsPanelcloseBtn.click();
416+
return text;
417+
}
418+
419+
async getMetricsPanelInfo(): Promise<{nodes: string, edges: string}> {
420+
const nodes = await this.canvasMetricsPanel("1").innerHTML();
421+
const edges = await this.canvasMetricsPanel("2").innerHTML();
422+
return { nodes, edges }
423+
}
398424
}

e2e/logic/api/apiCalls.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export class ApiCalls {
1414
return await result.json();
1515
}
1616

17-
async fetchLatestRepoInfo(projectName: string): Promise<fetchLatestRepoInfo>{
18-
const result = await postRequest(urls.baseUrl + "api/repo/" + projectName);
17+
async projectInfo(projectName: string): Promise<fetchLatestRepoInfo>{
18+
const result = await getRequest(urls.baseUrl + "api/repo/" + projectName + "/info");
1919
return await result.json();
2020
}
2121

e2e/tests/chat.spec.ts

+26
Original file line numberDiff line numberDiff line change
@@ -95,5 +95,31 @@ test.describe("Chat tests", () => {
9595
expect(selectedQuestion).toEqual(await chat.getLastQuestionInChat())
9696
});
9797
}
98+
99+
test(`Validate consistent UI responses for repeated questions in chat`, async () => {
100+
const chat = await browser.createNewPage(CodeGraph, urls.baseUrl);
101+
await chat.selectGraph(GRAPH_ID);
102+
const responses: string[] = [];
103+
for (let i = 0; i < 3; i++) {
104+
await chat.sendMessage(Node_Question);
105+
const result = await chat.getTextInLastChatElement();
106+
const number = result.match(/\d+/g)?.[0]!;
107+
responses.push(number);
108+
}
109+
const identicalResponses = responses.every((value) => value === responses[0]);
110+
expect(identicalResponses).toBe(true);
111+
});
112+
113+
test(`Validate UI response matches API response for a given question in chat`, async () => {
114+
const chat = await browser.createNewPage(CodeGraph, urls.baseUrl);
115+
await chat.selectGraph(GRAPH_ID);
98116

117+
await chat.sendMessage(Node_Question);
118+
const uiResponse = await chat.getTextInLastChatElement();
119+
const number = uiResponse.match(/\d+/g)?.[0]!;
120+
121+
const api = new ApiCalls();
122+
const apiResponse = await api.askQuestion(PROJECT_NAME, Node_Question);
123+
expect(number).toEqual(apiResponse.result.response.match(/\d+/g)?.[0]);
124+
});
99125
});

0 commit comments

Comments
 (0)