mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-01-08 20:17:03 +00:00
* Temporarily re-enable key based auth for Mongo and Cassandra tests. * Increase number of shards for playwright tests. * Another small bump to test shard count. * click global new... button then collection in playwright tests * get new table button * create and delete container for every individual scale test * for scale and settings, dont create sample data in container * run scale tests serially * refactor scale setup and tear down to be within each test * record network traces * record network calls on all retries * when disposing of database during playwright test, refresh tree to remove deleted database * refresh tree before opening scale and settings * When opening scale and settings, refresh databases * reload all databases before loading offers * increase time for change partition key request * increase time for change partition key request * refresh databases in test instead of product code * when refreshing containers, open console window to check for status completion * close notification console window after seeing desired log * create and delete a container for each individual test * dont delete database after every test. leave it to the CI * Don't refresh databases when opening Scale+Settings and only delete database if running locally * only open scale and settings at the beginning of each test suite * get it back to working * change settings.spect.ts from serial to parallel * don't delete database after each test * update container creation throughpout to be 5000 * run tests with no throughput limit on the account * adjust scale test to reflect no throughput limit on account * remove test container throughput * don't refresh collections when clicking settings in product code * refactor and run cleanup during pr check * copy cleanup accounts * run cleanup after playwright tests * run cleanup every three hours * revert ci.yml * update cpk test * remove cpk * remove cleanup accounts and add cpk * add cpk * remove cpk changes * revert ci.yml * run cleanup every two hours --------- Co-authored-by: Jade Welton <jawelton@microsoft.com> Co-authored-by: Asier Isayas <aisayas@microsoft.com>
97 lines
4.1 KiB
TypeScript
97 lines
4.1 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
|
|
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!;
|
|
|
|
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);
|
|
|
|
// 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();
|
|
});
|
|
|
|
// Delete database only if not running in CI
|
|
if (!process.env.CI) {
|
|
test.afterAll("Delete Test Database", async () => {
|
|
await context?.dispose();
|
|
});
|
|
}
|
|
|
|
test("Query results", async () => {
|
|
// 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!);
|
|
|
|
// 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 () => {
|
|
// 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+/);
|
|
});
|
|
|
|
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");
|
|
|
|
// Run the query and verify the results
|
|
const executeQueryButton = explorer.commandBarButton(CommandBarButton.ExecuteQuery);
|
|
await executeQueryButton.click();
|
|
|
|
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.
|
|
|
|
// 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");
|
|
});
|