mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-07-21 21:07:23 +01:00
Re-enable remaining tests.
This commit is contained in:
+116
-116
@@ -1,144 +1,144 @@
|
||||
// import { expect, test } from "@playwright/test";
|
||||
import { expect, test } from "@playwright/test";
|
||||
|
||||
// import { CommandBarButton, DataExplorer, Editor, QueryTab, TestAccount } from "../fx";
|
||||
// import { TestContainerContext, TestItem, createTestSQLContainer } from "../testData";
|
||||
import { CommandBarButton, DataExplorer, Editor, QueryTab, TestAccount } from "../fx";
|
||||
import { TestContainerContext, TestItem, createTestSQLContainer } from "../testData";
|
||||
|
||||
// let context: TestContainerContext = null!;
|
||||
// let explorer: DataExplorer = null!;
|
||||
// let queryTab: QueryTab = null!;
|
||||
// let queryEditor: Editor = null!;
|
||||
let context: TestContainerContext = null!;
|
||||
let explorer: DataExplorer = null!;
|
||||
let queryTab: QueryTab = null!;
|
||||
let queryEditor: Editor = null!;
|
||||
|
||||
// test.beforeAll("Create Test Database", async () => {
|
||||
// context = await createTestSQLContainer({ includeTestData: true });
|
||||
// });
|
||||
test.beforeAll("Create Test Database", async () => {
|
||||
context = await createTestSQLContainer({ includeTestData: true });
|
||||
});
|
||||
|
||||
// test.beforeEach("Open new query tab", async ({ page }) => {
|
||||
// // Open a query tab
|
||||
// explorer = await DataExplorer.open(page, TestAccount.SQL);
|
||||
test.beforeEach("Open new query tab", async ({ page }) => {
|
||||
// Open a query tab
|
||||
explorer = await DataExplorer.open(page, TestAccount.SQL);
|
||||
|
||||
// // Container nodes should be visible. The explorer auto-expands database nodes when they are first loaded.
|
||||
// const containerNode = await explorer.waitForContainerNode(context.database.id, context.container.id);
|
||||
// await containerNode.openContextMenu();
|
||||
// await containerNode.contextMenuItem("New SQL Query").click();
|
||||
// Container nodes should be visible. The explorer auto-expands database nodes when they are first loaded.
|
||||
const containerNode = await explorer.waitForContainerNode(context.database.id, context.container.id);
|
||||
await containerNode.openContextMenu();
|
||||
await containerNode.contextMenuItem("New SQL Query").click();
|
||||
|
||||
// // Wait for the editor to load
|
||||
// queryTab = explorer.queryTab("tab0");
|
||||
// queryEditor = queryTab.editor();
|
||||
// await queryEditor.locator.waitFor({ timeout: 30 * 1000 });
|
||||
// await queryTab.executeCTA.waitFor();
|
||||
// await explorer.frame.getByTestId("NotificationConsole/ExpandCollapseButton").click();
|
||||
// await explorer.frame.getByTestId("NotificationConsole/Contents").waitFor();
|
||||
// });
|
||||
// Wait for the editor to load
|
||||
queryTab = explorer.queryTab("tab0");
|
||||
queryEditor = queryTab.editor();
|
||||
await queryEditor.locator.waitFor({ timeout: 30 * 1000 });
|
||||
await queryTab.executeCTA.waitFor();
|
||||
await explorer.frame.getByTestId("NotificationConsole/ExpandCollapseButton").click();
|
||||
await explorer.frame.getByTestId("NotificationConsole/Contents").waitFor();
|
||||
});
|
||||
|
||||
// test.afterAll("Delete Test Database", async () => {
|
||||
// await context?.dispose();
|
||||
// });
|
||||
test.afterAll("Delete Test Database", async () => {
|
||||
await context?.dispose();
|
||||
});
|
||||
|
||||
// test("Query results", async () => {
|
||||
// test.skip();
|
||||
// // Run the query and verify the results
|
||||
// await queryEditor.locator.click();
|
||||
// const executeQueryButton = explorer.commandBarButton(CommandBarButton.ExecuteQuery);
|
||||
// await executeQueryButton.click();
|
||||
// await expect(queryTab.resultsEditor.locator).toBeAttached({ timeout: 60 * 1000 });
|
||||
test("Query results", async () => {
|
||||
test.skip();
|
||||
// Run the query and verify the results
|
||||
await queryEditor.locator.click();
|
||||
const executeQueryButton = explorer.commandBarButton(CommandBarButton.ExecuteQuery);
|
||||
await executeQueryButton.click();
|
||||
await expect(queryTab.resultsEditor.locator).toBeAttached({ timeout: 60 * 1000 });
|
||||
|
||||
// // Read the results
|
||||
// const resultText = await queryTab.resultsEditor.text();
|
||||
// expect(resultText).not.toBeNull();
|
||||
// const resultData: TestItem[] = JSON.parse(resultText!);
|
||||
// Read the results
|
||||
const resultText = await queryTab.resultsEditor.text();
|
||||
expect(resultText).not.toBeNull();
|
||||
const resultData: TestItem[] = JSON.parse(resultText!);
|
||||
|
||||
// // Pick 3 random documents and assert them
|
||||
// const randomDocs = [0, 1, 2].map(() => resultData[Math.floor(Math.random() * resultData.length)]);
|
||||
// randomDocs.forEach((doc) => {
|
||||
// const matchingDoc = context?.testData.get(doc.id);
|
||||
// expect(matchingDoc).not.toBeNull();
|
||||
// expect(doc.randomData).toEqual(matchingDoc?.randomData);
|
||||
// expect(doc.partitionKey).toEqual(matchingDoc?.partitionKey);
|
||||
// });
|
||||
// });
|
||||
// Pick 3 random documents and assert them
|
||||
const randomDocs = [0, 1, 2].map(() => resultData[Math.floor(Math.random() * resultData.length)]);
|
||||
randomDocs.forEach((doc) => {
|
||||
const matchingDoc = context?.testData.get(doc.id);
|
||||
expect(matchingDoc).not.toBeNull();
|
||||
expect(doc.randomData).toEqual(matchingDoc?.randomData);
|
||||
expect(doc.partitionKey).toEqual(matchingDoc?.partitionKey);
|
||||
});
|
||||
});
|
||||
|
||||
// test("Query stats", async () => {
|
||||
// test.skip();
|
||||
// // Run the query and verify the results
|
||||
// await queryEditor.locator.click();
|
||||
// const executeQueryButton = explorer.commandBarButton(CommandBarButton.ExecuteQuery);
|
||||
// await executeQueryButton.click();
|
||||
// await expect(queryTab.resultsEditor.locator).toBeAttached({ timeout: 60 * 1000 });
|
||||
test("Query stats", async () => {
|
||||
test.skip();
|
||||
// Run the query and verify the results
|
||||
await queryEditor.locator.click();
|
||||
const executeQueryButton = explorer.commandBarButton(CommandBarButton.ExecuteQuery);
|
||||
await executeQueryButton.click();
|
||||
await expect(queryTab.resultsEditor.locator).toBeAttached({ timeout: 60 * 1000 });
|
||||
|
||||
// // Open the query stats tab and validate some data there
|
||||
// queryTab.queryStatsTab.click();
|
||||
// await expect(queryTab.queryStatsList).toBeAttached();
|
||||
// const showingResultsCell = queryTab.queryStatsList.getByTestId("Row:Showing Results/Column:value");
|
||||
// await expect(showingResultsCell).toContainText(/\d+ - \d+/);
|
||||
// });
|
||||
// Open the query stats tab and validate some data there
|
||||
queryTab.queryStatsTab.click();
|
||||
await expect(queryTab.queryStatsList).toBeAttached();
|
||||
const showingResultsCell = queryTab.queryStatsList.getByTestId("Row:Showing Results/Column:value");
|
||||
await expect(showingResultsCell).toContainText(/\d+ - \d+/);
|
||||
});
|
||||
|
||||
// test("Query errors", async () => {
|
||||
// test.skip(true, "Disabled due to an issue with error reporting in the backend.");
|
||||
test("Query errors", async () => {
|
||||
test.skip(true, "Disabled due to an issue with error reporting in the backend.");
|
||||
|
||||
// await queryEditor.locator.click();
|
||||
// await queryEditor.setText("SELECT\n glarb(c.id),\n blarg(c.id)\nFROM c");
|
||||
await queryEditor.locator.click();
|
||||
await queryEditor.setText("SELECT\n glarb(c.id),\n blarg(c.id)\nFROM c");
|
||||
|
||||
// // Run the query and verify the results
|
||||
// const executeQueryButton = explorer.commandBarButton(CommandBarButton.ExecuteQuery);
|
||||
// await executeQueryButton.click();
|
||||
// Run the query and verify the results
|
||||
const executeQueryButton = explorer.commandBarButton(CommandBarButton.ExecuteQuery);
|
||||
await executeQueryButton.click();
|
||||
|
||||
// await expect(queryTab.errorList).toBeAttached({ timeout: 60 * 1000 });
|
||||
await expect(queryTab.errorList).toBeAttached({ timeout: 60 * 1000 });
|
||||
|
||||
// // Validating the squiggles requires a lot of digging through the Monaco model, OR a screenshot comparison.
|
||||
// // The screenshot ended up being fairly flaky, and a pain to maintain, so I decided not to include validation for the squiggles.
|
||||
// Validating the squiggles requires a lot of digging through the Monaco model, OR a screenshot comparison.
|
||||
// The screenshot ended up being fairly flaky, and a pain to maintain, so I decided not to include validation for the squiggles.
|
||||
|
||||
// // Validate the errors are in the list
|
||||
// await expect(queryTab.errorList.getByTestId("Row:0/Column:code")).toHaveText("SC2005");
|
||||
// await expect(queryTab.errorList.getByTestId("Row:0/Column:location")).toHaveText("Line 2");
|
||||
// await expect(queryTab.errorList.getByTestId("Row:1/Column:code")).toHaveText("SC2005");
|
||||
// await expect(queryTab.errorList.getByTestId("Row:1/Column:location")).toHaveText("Line 3");
|
||||
// });
|
||||
// Validate the errors are in the list
|
||||
await expect(queryTab.errorList.getByTestId("Row:0/Column:code")).toHaveText("SC2005");
|
||||
await expect(queryTab.errorList.getByTestId("Row:0/Column:location")).toHaveText("Line 2");
|
||||
await expect(queryTab.errorList.getByTestId("Row:1/Column:code")).toHaveText("SC2005");
|
||||
await expect(queryTab.errorList.getByTestId("Row:1/Column:location")).toHaveText("Line 3");
|
||||
});
|
||||
|
||||
// test("View button toggles between vertical and horizontal layout", async () => {
|
||||
// // The default layout is Horizontal (Allotment vertical={true} → split-view-vertical class)
|
||||
// const allotment = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
// await expect(allotment).toBeAttached();
|
||||
// await expect(allotment).toHaveClass(/split-view-vertical/);
|
||||
test("View button toggles between vertical and horizontal layout", async () => {
|
||||
// The default layout is Horizontal (Allotment vertical={true} → split-view-vertical class)
|
||||
const allotment = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
await expect(allotment).toBeAttached();
|
||||
await expect(allotment).toHaveClass(/split-view-vertical/);
|
||||
|
||||
// // Click the main View button (not the chevron) to toggle to Vertical layout
|
||||
// const viewButton = explorer.commandBarButton(CommandBarButton.View);
|
||||
// await viewButton.click();
|
||||
// Click the main View button (not the chevron) to toggle to Vertical layout
|
||||
const viewButton = explorer.commandBarButton(CommandBarButton.View);
|
||||
await viewButton.click();
|
||||
|
||||
// // After toggle, Allotment should have split-view-horizontal class (Vertical direction)
|
||||
// const allotmentAfterToggle = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
// await expect(allotmentAfterToggle).toHaveClass(/split-view-horizontal/);
|
||||
// After toggle, Allotment should have split-view-horizontal class (Vertical direction)
|
||||
const allotmentAfterToggle = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
await expect(allotmentAfterToggle).toHaveClass(/split-view-horizontal/);
|
||||
|
||||
// // Click again to toggle back to Horizontal
|
||||
// await viewButton.click();
|
||||
// const allotmentAfterSecondToggle = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
// await expect(allotmentAfterSecondToggle).toHaveClass(/split-view-vertical/);
|
||||
// });
|
||||
// Click again to toggle back to Horizontal
|
||||
await viewButton.click();
|
||||
const allotmentAfterSecondToggle = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
await expect(allotmentAfterSecondToggle).toHaveClass(/split-view-vertical/);
|
||||
});
|
||||
|
||||
// test("View dropdown allows selecting vertical or horizontal layout", async () => {
|
||||
// test.skip();
|
||||
// // The default layout is Horizontal (split-view-vertical)
|
||||
// const allotment = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
// await expect(allotment).toHaveClass(/split-view-vertical/);
|
||||
test("View dropdown allows selecting vertical or horizontal layout", async () => {
|
||||
test.skip();
|
||||
// The default layout is Horizontal (split-view-vertical)
|
||||
const allotment = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
await expect(allotment).toHaveClass(/split-view-vertical/);
|
||||
|
||||
// // Find the View split button's menu trigger (chevron).
|
||||
// // The primary button has data-test, so navigate to the split button container and find the menu button.
|
||||
// const viewPrimaryButton = explorer.commandBarButton(CommandBarButton.View);
|
||||
// const splitContainer = viewPrimaryButton.locator("..");
|
||||
// const menuButton = splitContainer.locator('[aria-haspopup="true"]');
|
||||
// await menuButton.click();
|
||||
// Find the View split button's menu trigger (chevron).
|
||||
// The primary button has data-test, so navigate to the split button container and find the menu button.
|
||||
const viewPrimaryButton = explorer.commandBarButton(CommandBarButton.View);
|
||||
const splitContainer = viewPrimaryButton.locator("..");
|
||||
const menuButton = splitContainer.locator('[aria-haspopup="true"]');
|
||||
await menuButton.click();
|
||||
|
||||
// // Select "Vertical" from the dropdown menu
|
||||
// await explorer.frame.getByRole("menuitem", { name: "Vertical" }).click();
|
||||
// Select "Vertical" from the dropdown menu
|
||||
await explorer.frame.getByRole("menuitem", { name: "Vertical" }).click();
|
||||
|
||||
// // Verify the layout changed to Vertical (split-view-horizontal)
|
||||
// const allotmentAfterVertical = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
// await expect(allotmentAfterVertical).toHaveClass(/split-view-horizontal/);
|
||||
// Verify the layout changed to Vertical (split-view-horizontal)
|
||||
const allotmentAfterVertical = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
await expect(allotmentAfterVertical).toHaveClass(/split-view-horizontal/);
|
||||
|
||||
// // Open dropdown again and select "Horizontal"
|
||||
// await menuButton.click();
|
||||
// await explorer.frame.getByRole("menuitem", { name: "Horizontal" }).click();
|
||||
// Open dropdown again and select "Horizontal"
|
||||
await menuButton.click();
|
||||
await explorer.frame.getByRole("menuitem", { name: "Horizontal" }).click();
|
||||
|
||||
// // Verify it reverted to Horizontal (split-view-vertical)
|
||||
// const allotmentAfterHorizontal = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
// await expect(allotmentAfterHorizontal).toHaveClass(/split-view-vertical/);
|
||||
// });
|
||||
// Verify it reverted to Horizontal (split-view-vertical)
|
||||
const allotmentAfterHorizontal = queryTab.locator.locator(".split-view-vertical, .split-view-horizontal");
|
||||
await expect(allotmentAfterHorizontal).toHaveClass(/split-view-vertical/);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user