mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-12-24 03:11:32 +00:00
104 lines
4.1 KiB
TypeScript
104 lines
4.1 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
import * as DataModels from "../../../src/Contracts/DataModels";
|
|
import { CommandBarButton, DataExplorer, ONE_MINUTE_MS, TestAccount } from "../../fx";
|
|
import { createTestSQLContainer, TestContainerContext } from "../../testData";
|
|
|
|
test.describe("Computed Properties", () => {
|
|
let context: TestContainerContext = null!;
|
|
let explorer: DataExplorer = null!;
|
|
|
|
test.beforeAll("Create Test Database", async () => {
|
|
context = await createTestSQLContainer(true);
|
|
});
|
|
|
|
test.beforeEach("Open Settings tab under Scale & Settings", async ({ page }) => {
|
|
explorer = await DataExplorer.open(page, TestAccount.SQL);
|
|
const containerNode = await explorer.waitForContainerNode(context.database.id, context.container.id);
|
|
await containerNode.expand();
|
|
|
|
// Click Scale & Settings and open Settings tab
|
|
await explorer.openScaleAndSettings(context);
|
|
const computedPropertiesTab = explorer.frame.getByTestId("settings-tab-header/ComputedPropertiesTab");
|
|
await computedPropertiesTab.click();
|
|
});
|
|
|
|
test.afterAll("Delete Test Database", async () => {
|
|
await context?.dispose();
|
|
});
|
|
|
|
test("Add valid computed property", async ({ page }) => {
|
|
await clearComputedPropertiesTextBoxContent({ page });
|
|
|
|
// Create computed property
|
|
const computedProperties: DataModels.ComputedProperties = [
|
|
{
|
|
name: "cp_lowerName",
|
|
query: "SELECT VALUE LOWER(c.name) FROM c",
|
|
},
|
|
];
|
|
const computedPropertiesString: string = JSON.stringify(computedProperties);
|
|
await page.keyboard.type(computedPropertiesString);
|
|
|
|
// Save changes
|
|
const saveButton = explorer.commandBarButton(CommandBarButton.Save);
|
|
await expect(saveButton).toBeEnabled();
|
|
await saveButton.click();
|
|
await expect(explorer.getConsoleMessage()).toContainText(`Successfully updated container ${context.container.id}`, {
|
|
timeout: ONE_MINUTE_MS,
|
|
});
|
|
});
|
|
|
|
test("Add computed property with invalid query", async ({ page }) => {
|
|
await clearComputedPropertiesTextBoxContent({ page });
|
|
|
|
// Create computed property with no VALUE keyword in query
|
|
const computedProperties: DataModels.ComputedProperties = [
|
|
{
|
|
name: "cp_lowerName",
|
|
query: "SELECT LOWER(c.name) FROM c",
|
|
},
|
|
];
|
|
const computedPropertiesString: string = JSON.stringify(computedProperties);
|
|
await page.keyboard.type(computedPropertiesString);
|
|
|
|
// Save changes
|
|
const saveButton = explorer.commandBarButton(CommandBarButton.Save);
|
|
await expect(saveButton).toBeEnabled();
|
|
await saveButton.click();
|
|
await expect(explorer.getConsoleMessage()).toContainText(`Failed to update container ${context.container.id}`, {
|
|
timeout: ONE_MINUTE_MS,
|
|
});
|
|
});
|
|
|
|
test("Add computed property with invalid json", async ({ page }) => {
|
|
await clearComputedPropertiesTextBoxContent({ page });
|
|
|
|
// Create computed property with no VALUE keyword in query
|
|
const computedProperties: DataModels.ComputedProperties = [
|
|
{
|
|
name: "cp_lowerName",
|
|
query: "SELECT LOWER(c.name) FROM c",
|
|
},
|
|
];
|
|
const computedPropertiesString: string = JSON.stringify(computedProperties);
|
|
await page.keyboard.type(computedPropertiesString + "]");
|
|
|
|
// Save button should remain disabled due to invalid json
|
|
const saveButton = explorer.commandBarButton(CommandBarButton.Save);
|
|
await expect(saveButton).toBeDisabled();
|
|
});
|
|
|
|
const clearComputedPropertiesTextBoxContent = async ({ page }): Promise<void> => {
|
|
// Get computed properties text box
|
|
const computedPropertiesTextBox = explorer.frame.getByRole("textbox", { name: "Computed properties" });
|
|
await computedPropertiesTextBox.waitFor();
|
|
const computedPropertiesEditor = explorer.frame.getByTestId("computed-properties-editor");
|
|
await computedPropertiesEditor.click();
|
|
|
|
// Clear existing content
|
|
const isMac: boolean = process.platform === "darwin";
|
|
await page.keyboard.press(isMac ? "Meta+A" : "Control+A");
|
|
await page.keyboard.press("Backspace");
|
|
};
|
|
});
|