mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-01-23 11:44:03 +00:00
186 lines
8.2 KiB
TypeScript
186 lines
8.2 KiB
TypeScript
// /* eslint-disable @typescript-eslint/no-explicit-any */
|
|
// import { expect, Frame, Locator, Page, test } from "@playwright/test";
|
|
// import {
|
|
// ContainerCopy,
|
|
// getAccountName,
|
|
// getDropdownItemByNameOrPosition,
|
|
// TestAccount,
|
|
// waitForApiResponse,
|
|
// } from "../../fx";
|
|
// import { createMultipleTestContainers } from "../../testData";
|
|
|
|
// test.describe("Container Copy - Online Migration", () => {
|
|
// let page: Page;
|
|
// let wrapper: Locator;
|
|
// let panel: Locator;
|
|
// let frame: Frame;
|
|
// let targetAccountName: string;
|
|
|
|
// test.beforeEach("Setup for online migration test", async ({ browser }) => {
|
|
// await createMultipleTestContainers({ accountType: TestAccount.SQLContainerCopyOnly, containerCount: 2 });
|
|
|
|
// page = await browser.newPage();
|
|
// ({ wrapper, frame } = await ContainerCopy.open(page, TestAccount.SQLContainerCopyOnly));
|
|
// targetAccountName = getAccountName(TestAccount.SQLContainerCopyOnly);
|
|
// });
|
|
|
|
// test.afterEach("Cleanup after online migration test", async () => {
|
|
// await page.unroute(/.*/, (route) => route.continue());
|
|
// await page.close();
|
|
// });
|
|
|
|
// test("Successfully create and manage online migration copy job", async () => {
|
|
// expect(wrapper).not.toBeNull();
|
|
// await wrapper.locator(".commandBarContainer").waitFor({ state: "visible" });
|
|
|
|
// // Open Create Copy Job panel
|
|
// const createCopyJobButton = wrapper.getByTestId("CommandBar/Button:Create Copy Job");
|
|
// await expect(createCopyJobButton).toBeVisible();
|
|
// await createCopyJobButton.click();
|
|
// panel = frame.getByTestId("Panel:Create copy job");
|
|
// await expect(panel).toBeVisible();
|
|
|
|
// // Reduced wait time for better performance
|
|
// await page.waitForTimeout(1000);
|
|
|
|
// // Enable online migration mode
|
|
// const migrationTypeContainer = panel.getByTestId("migration-type");
|
|
// const onlineCopyRadioButton = migrationTypeContainer.getByRole("radio", { name: /Online mode/i });
|
|
// await onlineCopyRadioButton.click({ force: true });
|
|
|
|
// await expect(migrationTypeContainer.getByTestId("migration-type-description-online")).toBeVisible();
|
|
|
|
// await panel.getByRole("button", { name: "Next" }).click();
|
|
|
|
// // Verify permissions screen is shown for online migration
|
|
// const permissionScreen = panel.getByTestId("Panel:AssignPermissionsContainer");
|
|
// await expect(permissionScreen).toBeVisible();
|
|
// await expect(permissionScreen.getByText("Online container copy", { exact: true })).toBeVisible();
|
|
|
|
// // Skip permissions setup and proceed to container selection
|
|
// await panel.getByRole("button", { name: "Next" }).click();
|
|
|
|
// // Configure source and target containers for online migration
|
|
// const sourceDatabaseDropdown = panel.getByTestId("source-databaseDropdown");
|
|
// await sourceDatabaseDropdown.click();
|
|
// const sourceDbDropdownItem = await getDropdownItemByNameOrPosition(
|
|
// frame,
|
|
// { position: 0 },
|
|
// { ariaLabel: "Database" },
|
|
// );
|
|
// await sourceDbDropdownItem.click();
|
|
|
|
// const sourceContainerDropdown = panel.getByTestId("source-containerDropdown");
|
|
// await sourceContainerDropdown.click();
|
|
// const sourceContainerDropdownItem = await getDropdownItemByNameOrPosition(
|
|
// frame,
|
|
// { position: 0 },
|
|
// { ariaLabel: "Container" },
|
|
// );
|
|
// await sourceContainerDropdownItem.click();
|
|
|
|
// const targetDatabaseDropdown = panel.getByTestId("target-databaseDropdown");
|
|
// await targetDatabaseDropdown.click();
|
|
// const targetDbDropdownItem = await getDropdownItemByNameOrPosition(
|
|
// frame,
|
|
// { position: 0 },
|
|
// { ariaLabel: "Database" },
|
|
// );
|
|
// await targetDbDropdownItem.click();
|
|
|
|
// const targetContainerDropdown = panel.getByTestId("target-containerDropdown");
|
|
// await targetContainerDropdown.click();
|
|
// const targetContainerDropdownItem = await getDropdownItemByNameOrPosition(
|
|
// frame,
|
|
// { position: 1 },
|
|
// { ariaLabel: "Container" },
|
|
// );
|
|
// await targetContainerDropdownItem.click();
|
|
|
|
// await panel.getByRole("button", { name: "Next" }).click();
|
|
|
|
// // Verify job preview and create the online migration job
|
|
// const previewContainer = panel.getByTestId("Panel:PreviewCopyJob");
|
|
// await expect(previewContainer.getByTestId("source-account-name")).toHaveText(targetAccountName);
|
|
|
|
// const jobNameInput = previewContainer.getByTestId("job-name-textfield");
|
|
// const onlineMigrationJobName = await jobNameInput.inputValue();
|
|
|
|
// const copyButton = panel.getByRole("button", { name: "Copy", exact: true });
|
|
|
|
// const copyJobCreationPromise = waitForApiResponse(
|
|
// page,
|
|
// `${targetAccountName}/dataTransferJobs/${onlineMigrationJobName}`,
|
|
// "PUT",
|
|
// );
|
|
// await copyButton.click();
|
|
// await page.waitForTimeout(1000); // Reduced wait time
|
|
|
|
// const response = await copyJobCreationPromise;
|
|
// expect(response.ok()).toBe(true);
|
|
|
|
// // Verify panel closes and job appears in the list
|
|
// await expect(panel).not.toBeVisible({ timeout: 5000 });
|
|
|
|
// const jobsListContainer = wrapper.locator(".CopyJobListContainer .ms-DetailsList-contentWrapper .ms-List-page");
|
|
// await jobsListContainer.waitFor({ state: "visible", timeout: 5000 });
|
|
|
|
// let jobRow, statusCell, actionMenuButton;
|
|
// jobRow = jobsListContainer.locator(".ms-DetailsRow", { hasText: onlineMigrationJobName });
|
|
// statusCell = jobRow.locator("[data-automationid='DetailsRowCell'][data-automation-key='CopyJobStatus']");
|
|
// await jobRow.waitFor({ state: "visible", timeout: 5000 });
|
|
|
|
// // Verify job status changes to queued state
|
|
// await expect(statusCell).toContainText(/running|queued|pending/i, { timeout: 5000 });
|
|
|
|
// // Test job lifecycle management through action menu
|
|
// actionMenuButton = wrapper.getByTestId(`CopyJobActionMenu/Button:${onlineMigrationJobName}`);
|
|
// await actionMenuButton.click();
|
|
|
|
// // Test pause functionality
|
|
// const pauseAction = frame.locator(".ms-ContextualMenu-list button:has-text('Pause')");
|
|
// await pauseAction.click();
|
|
|
|
// const pauseResponse = await waitForApiResponse(
|
|
// page,
|
|
// `${targetAccountName}/dataTransferJobs/${onlineMigrationJobName}/pause`,
|
|
// "POST",
|
|
// );
|
|
// expect(pauseResponse.ok()).toBe(true);
|
|
|
|
// // Verify job status changes to paused
|
|
// jobRow = jobsListContainer.locator(".ms-DetailsRow", { hasText: onlineMigrationJobName });
|
|
// await jobRow.waitFor({ state: "visible", timeout: 5000 });
|
|
// statusCell = jobRow.locator("[data-automationid='DetailsRowCell'][data-automation-key='CopyJobStatus']");
|
|
// await expect(statusCell).toContainText(/paused/i, { timeout: 5000 });
|
|
// await page.waitForTimeout(1000);
|
|
|
|
// // Test cancel job functionality
|
|
// actionMenuButton = wrapper.getByTestId(`CopyJobActionMenu/Button:${onlineMigrationJobName}`);
|
|
// await actionMenuButton.click();
|
|
// await frame.locator(".ms-ContextualMenu-list button:has-text('Cancel')").click();
|
|
|
|
// // Verify cancellation confirmation dialog
|
|
// await expect(frame.locator(".ms-Dialog-main")).toBeVisible({ timeout: 2000 });
|
|
// await expect(frame.locator(".ms-Dialog-main")).toContainText(onlineMigrationJobName);
|
|
|
|
// const cancelDialogButton = frame.locator(".ms-Dialog-main").getByTestId("DialogButton:Cancel");
|
|
// await expect(cancelDialogButton).toBeVisible();
|
|
// await cancelDialogButton.click();
|
|
// await expect(frame.locator(".ms-Dialog-main")).not.toBeVisible();
|
|
|
|
// actionMenuButton = wrapper.getByTestId(`CopyJobActionMenu/Button:${onlineMigrationJobName}`);
|
|
// await actionMenuButton.click();
|
|
// await frame.locator(".ms-ContextualMenu-list button:has-text('Cancel')").click();
|
|
|
|
// const confirmDialogButton = frame.locator(".ms-Dialog-main").getByTestId("DialogButton:Confirm");
|
|
// await expect(confirmDialogButton).toBeVisible();
|
|
// await confirmDialogButton.click();
|
|
|
|
// // Verify final job status is cancelled
|
|
// jobRow = jobsListContainer.locator(".ms-DetailsRow", { hasText: onlineMigrationJobName });
|
|
// statusCell = jobRow.locator("[data-automationid='DetailsRowCell'][data-automation-key='CopyJobStatus']");
|
|
// await expect(statusCell).toContainText(/cancelled/i, { timeout: 5000 });
|
|
// });
|
|
// });
|