mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-01-10 13:08:20 +00:00
only open scale and settings at the beginning of each test suite
This commit is contained in:
@@ -9,34 +9,32 @@ import {
|
|||||||
} from "../../fx";
|
} from "../../fx";
|
||||||
import { createTestSQLContainer, TestContainerContext } from "../../testData";
|
import { createTestSQLContainer, TestContainerContext } from "../../testData";
|
||||||
|
|
||||||
test.describe("Autoscale and Manual throughput", () => {
|
test.describe("Autoscale throughput", () => {
|
||||||
let context: TestContainerContext = null!;
|
let context: TestContainerContext = null!;
|
||||||
let explorer: DataExplorer = null!;
|
let explorer: DataExplorer = null!;
|
||||||
|
|
||||||
test.beforeAll("Create Test Database", async () => {});
|
test.beforeAll("Create Test Database", async ({ browser }) => {
|
||||||
|
|
||||||
test.beforeEach("Open container settings", async ({ page }) => {
|
|
||||||
context = await createTestSQLContainer();
|
context = await createTestSQLContainer();
|
||||||
|
const page = await browser.newPage();
|
||||||
explorer = await DataExplorer.open(page, TestAccount.SQL);
|
explorer = await DataExplorer.open(page, TestAccount.SQL);
|
||||||
|
|
||||||
// Click Scale & Settings and open Scale tab
|
// Click Scale & Settings and open Scale tab
|
||||||
await explorer.openScaleAndSettings(context);
|
await explorer.openScaleAndSettings(context);
|
||||||
const scaleTab = explorer.frame.getByTestId("settings-tab-header/ScaleTab");
|
const scaleTab = explorer.frame.getByTestId("settings-tab-header/ScaleTab");
|
||||||
await scaleTab.click();
|
await scaleTab.click();
|
||||||
|
|
||||||
|
await switchManualToAutoscaleThroughput();
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!process.env.CI) {
|
if (!process.env.CI) {
|
||||||
test.afterEach("Delete Test Database", async () => {
|
test.afterAll("Delete Test Database", async () => {
|
||||||
await context?.dispose();
|
await context?.dispose();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
test("Update autoscale max throughput", async () => {
|
test("Update autoscale max throughput", async () => {
|
||||||
// By default the created container has manual throughput (Containers created via JS SDK v4.7.0 cannot be created with autoscale throughput)
|
|
||||||
await switchManualToAutoscaleThroughput();
|
|
||||||
|
|
||||||
// Update autoscale max throughput
|
// Update autoscale max throughput
|
||||||
await getThroughputInput("autopilot").fill(TEST_AUTOSCALE_MAX_THROUGHPUT_RU_2K.toString());
|
await getThroughputInput(explorer, "autopilot").fill(TEST_AUTOSCALE_MAX_THROUGHPUT_RU_2K.toString());
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
await explorer.commandBarButton(CommandBarButton.Save).click();
|
await explorer.commandBarButton(CommandBarButton.Save).click();
|
||||||
@@ -51,9 +49,6 @@ test.describe("Autoscale and Manual throughput", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("Update autoscale max throughput passed allowed limit", async () => {
|
test("Update autoscale max throughput passed allowed limit", async () => {
|
||||||
// By default the created container has manual throughput (Containers created via JS SDK v4.7.0 cannot be created with autoscale throughput)
|
|
||||||
await switchManualToAutoscaleThroughput();
|
|
||||||
|
|
||||||
// Get soft allowed max throughput and remove commas
|
// Get soft allowed max throughput and remove commas
|
||||||
const softAllowedMaxThroughputString = await explorer.frame
|
const softAllowedMaxThroughputString = await explorer.frame
|
||||||
.getByTestId("soft-allowed-maximum-throughput")
|
.getByTestId("soft-allowed-maximum-throughput")
|
||||||
@@ -61,27 +56,63 @@ test.describe("Autoscale and Manual throughput", () => {
|
|||||||
const softAllowedMaxThroughput = Number(softAllowedMaxThroughputString.replace(/,/g, ""));
|
const softAllowedMaxThroughput = Number(softAllowedMaxThroughputString.replace(/,/g, ""));
|
||||||
|
|
||||||
// Try to set autoscale max throughput above allowed limit
|
// Try to set autoscale max throughput above allowed limit
|
||||||
await getThroughputInput("autopilot").fill((softAllowedMaxThroughput * 10).toString());
|
await getThroughputInput(explorer, "autopilot").fill((softAllowedMaxThroughput * 10).toString());
|
||||||
await expect(explorer.commandBarButton(CommandBarButton.Save)).toBeDisabled();
|
await expect(explorer.commandBarButton(CommandBarButton.Save)).toBeDisabled();
|
||||||
await expect(getThroughputInputErrorMessage("autopilot")).toContainText(
|
await expect(getThroughputInputErrorMessage(explorer, "autopilot")).toContainText(
|
||||||
"This update isn't possible because it would increase the total throughput",
|
"This update isn't possible because it would increase the total throughput",
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Update autoscale max throughput with invalid increment", async () => {
|
test("Update autoscale max throughput with invalid increment", async () => {
|
||||||
// By default the created container has manual throughput (Containers created via JS SDK v4.7.0 cannot be created with autoscale throughput)
|
|
||||||
await switchManualToAutoscaleThroughput();
|
|
||||||
|
|
||||||
// Try to set autoscale max throughput with invalid increment
|
// Try to set autoscale max throughput with invalid increment
|
||||||
await getThroughputInput("autopilot").fill("1100");
|
await getThroughputInput(explorer, "autopilot").fill("1100");
|
||||||
await expect(explorer.commandBarButton(CommandBarButton.Save)).toBeDisabled();
|
await expect(explorer.commandBarButton(CommandBarButton.Save)).toBeDisabled();
|
||||||
await expect(getThroughputInputErrorMessage("autopilot")).toContainText(
|
await expect(getThroughputInputErrorMessage(explorer, "autopilot")).toContainText(
|
||||||
"Throughput value must be in increments of 1000",
|
"Throughput value must be in increments of 1000",
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const switchManualToAutoscaleThroughput = async (): Promise<void> => {
|
||||||
|
const autoscaleRadioButton = explorer.frame.getByText("Autoscale", { exact: true });
|
||||||
|
await autoscaleRadioButton.click();
|
||||||
|
await expect(explorer.commandBarButton(CommandBarButton.Save)).toBeEnabled();
|
||||||
|
await explorer.commandBarButton(CommandBarButton.Save).click();
|
||||||
|
await expect(explorer.getConsoleHeaderStatus()).toContainText(
|
||||||
|
`Successfully updated offer for collection ${context.container.id}`,
|
||||||
|
{
|
||||||
|
timeout: ONE_MINUTE_MS,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
test.describe("Manual throughput", () => {
|
||||||
|
let context: TestContainerContext = null!;
|
||||||
|
let explorer: DataExplorer = null!;
|
||||||
|
|
||||||
|
test.beforeAll("Create Test Database & Open container settings", async ({ browser }) => {
|
||||||
|
context = await createTestSQLContainer();
|
||||||
|
const page = await browser.newPage();
|
||||||
|
explorer = await DataExplorer.open(page, TestAccount.SQL);
|
||||||
|
|
||||||
|
// Click Scale & Settings and open Scale tab
|
||||||
|
await explorer.openScaleAndSettings(context);
|
||||||
|
const scaleTab = explorer.frame.getByTestId("settings-tab-header/ScaleTab");
|
||||||
|
await scaleTab.click();
|
||||||
|
});
|
||||||
|
|
||||||
|
// test.beforeEach("Open container settings", async ({ page }) => {
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
if (!process.env.CI) {
|
||||||
|
test.afterAll("Delete Test Database", async () => {
|
||||||
|
await context?.dispose();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
test("Update manual throughput", async () => {
|
test("Update manual throughput", async () => {
|
||||||
await getThroughputInput("manual").fill(TEST_MANUAL_THROUGHPUT_RU_2K.toString());
|
await getThroughputInput(explorer, "manual").fill(TEST_MANUAL_THROUGHPUT_RU_2K.toString());
|
||||||
await explorer.commandBarButton(CommandBarButton.Save).click();
|
await explorer.commandBarButton(CommandBarButton.Save).click();
|
||||||
await expect(explorer.getConsoleHeaderStatus()).toContainText(
|
await expect(explorer.getConsoleHeaderStatus()).toContainText(
|
||||||
`Successfully updated offer for collection ${context.container.id}`,
|
`Successfully updated offer for collection ${context.container.id}`,
|
||||||
@@ -99,32 +130,19 @@ test.describe("Autoscale and Manual throughput", () => {
|
|||||||
const softAllowedMaxThroughput = Number(softAllowedMaxThroughputString.replace(/,/g, ""));
|
const softAllowedMaxThroughput = Number(softAllowedMaxThroughputString.replace(/,/g, ""));
|
||||||
|
|
||||||
// Try to set manual throughput above allowed limit
|
// Try to set manual throughput above allowed limit
|
||||||
await getThroughputInput("manual").fill((softAllowedMaxThroughput * 10).toString());
|
await getThroughputInput(explorer, "manual").fill((softAllowedMaxThroughput * 10).toString());
|
||||||
await expect(explorer.commandBarButton(CommandBarButton.Save)).toBeDisabled();
|
await expect(explorer.commandBarButton(CommandBarButton.Save)).toBeDisabled();
|
||||||
await expect(getThroughputInputErrorMessage("manual")).toContainText(
|
await expect(getThroughputInputErrorMessage(explorer, "manual")).toContainText(
|
||||||
"This update isn't possible because it would increase the total throughput",
|
"This update isn't possible because it would increase the total throughput",
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Helper methods
|
|
||||||
const getThroughputInput = (type: "manual" | "autopilot"): Locator => {
|
|
||||||
return explorer.frame.getByTestId(`${type}-throughput-input`);
|
|
||||||
};
|
|
||||||
|
|
||||||
const getThroughputInputErrorMessage = (type: "manual" | "autopilot"): Locator => {
|
|
||||||
return explorer.frame.getByTestId(`${type}-throughput-input-error`);
|
|
||||||
};
|
|
||||||
|
|
||||||
const switchManualToAutoscaleThroughput = async (): Promise<void> => {
|
|
||||||
const autoscaleRadioButton = explorer.frame.getByText("Autoscale", { exact: true });
|
|
||||||
await autoscaleRadioButton.click();
|
|
||||||
await expect(explorer.commandBarButton(CommandBarButton.Save)).toBeEnabled();
|
|
||||||
await explorer.commandBarButton(CommandBarButton.Save).click();
|
|
||||||
await expect(explorer.getConsoleHeaderStatus()).toContainText(
|
|
||||||
`Successfully updated offer for collection ${context.container.id}`,
|
|
||||||
{
|
|
||||||
timeout: ONE_MINUTE_MS,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
};
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Helper methods
|
||||||
|
const getThroughputInput = (explorer: DataExplorer, type: "manual" | "autopilot"): Locator => {
|
||||||
|
return explorer.frame.getByTestId(`${type}-throughput-input`);
|
||||||
|
};
|
||||||
|
|
||||||
|
const getThroughputInputErrorMessage = (explorer: DataExplorer, type: "manual" | "autopilot"): Locator => {
|
||||||
|
return explorer.frame.getByTestId(`${type}-throughput-input-error`);
|
||||||
|
};
|
||||||
|
|||||||
@@ -2,15 +2,13 @@ import { expect, test } from "@playwright/test";
|
|||||||
import { CommandBarButton, DataExplorer, ONE_MINUTE_MS, TestAccount } from "../../fx";
|
import { CommandBarButton, DataExplorer, ONE_MINUTE_MS, TestAccount } from "../../fx";
|
||||||
import { createTestSQLContainer, TestContainerContext } from "../../testData";
|
import { createTestSQLContainer, TestContainerContext } from "../../testData";
|
||||||
|
|
||||||
test.describe("Settings under Scale & Settings", () => {
|
test.describe.serial("Settings under Scale & Settings", () => {
|
||||||
let context: TestContainerContext = null!;
|
let context: TestContainerContext = null!;
|
||||||
let explorer: DataExplorer = null!;
|
let explorer: DataExplorer = null!;
|
||||||
|
|
||||||
// test.beforeAll("Create Test Database", async () => {
|
test.beforeAll("Create Test Database", async ({ browser }) => {
|
||||||
// });
|
|
||||||
|
|
||||||
test.beforeEach("Open container settings", async ({ page }) => {
|
|
||||||
context = await createTestSQLContainer();
|
context = await createTestSQLContainer();
|
||||||
|
const page = await browser.newPage();
|
||||||
explorer = await DataExplorer.open(page, TestAccount.SQL);
|
explorer = await DataExplorer.open(page, TestAccount.SQL);
|
||||||
|
|
||||||
// Click Scale & Settings and open Scale tab
|
// Click Scale & Settings and open Scale tab
|
||||||
@@ -19,11 +17,20 @@ test.describe("Settings under Scale & Settings", () => {
|
|||||||
await settingsTab.click();
|
await settingsTab.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// test.beforeEach("Open container settings", async ({ page }) => {
|
||||||
|
// explorer = await DataExplorer.open(page, TestAccount.SQL);
|
||||||
|
|
||||||
|
// // Click Scale & Settings and open Scale tab
|
||||||
|
// await explorer.openScaleAndSettings(context);
|
||||||
|
// const settingsTab = explorer.frame.getByTestId("settings-tab-header/SubSettingsTab");
|
||||||
|
// await settingsTab.click();
|
||||||
|
// });
|
||||||
|
|
||||||
// test.afterEach("Delete Test Database", async () => {
|
// test.afterEach("Delete Test Database", async () => {
|
||||||
// await context?.dispose();
|
// await context?.dispose();
|
||||||
// });
|
// });
|
||||||
if (!process.env.CI) {
|
if (!process.env.CI) {
|
||||||
test.afterEach("Delete Test Database", async () => {
|
test.afterAll("Delete Test Database", async () => {
|
||||||
await context?.dispose();
|
await context?.dispose();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -57,29 +64,4 @@ test.describe("Settings under Scale & Settings", () => {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Update TTL to Off", async () => {
|
|
||||||
// By default TTL is set to off so we need to first set it to On
|
|
||||||
const ttlOnNoDefaultRadioButton = explorer.frame.getByRole("radio", { name: "ttl-on-no-default-option" });
|
|
||||||
await ttlOnNoDefaultRadioButton.click();
|
|
||||||
await explorer.commandBarButton(CommandBarButton.Save).click();
|
|
||||||
await expect(explorer.getConsoleHeaderStatus()).toContainText(
|
|
||||||
`Successfully updated container ${context.container.id}`,
|
|
||||||
{
|
|
||||||
timeout: ONE_MINUTE_MS,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
// Set it to Off
|
|
||||||
const ttlOffRadioButton = explorer.frame.getByRole("radio", { name: "ttl-off-option" });
|
|
||||||
await ttlOffRadioButton.click();
|
|
||||||
|
|
||||||
await explorer.commandBarButton(CommandBarButton.Save).click();
|
|
||||||
await expect(explorer.getConsoleHeaderStatus()).toContainText(
|
|
||||||
`Successfully updated container ${context.container.id}`,
|
|
||||||
{
|
|
||||||
timeout: ONE_MINUTE_MS,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user