mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-07-22 13:27:17 +01:00
130 lines
4.8 KiB
TypeScript
130 lines
4.8 KiB
TypeScript
// import { expect, test, type Page } from "@playwright/test";
|
|
// import { DataExplorer, TestAccount } from "../../fx";
|
|
// import { createTestSQLContainer, TestContainerContext } from "../../testData";
|
|
|
|
// /**
|
|
// * Tests for Dynamic Data Masking (DDM) feature.
|
|
// *
|
|
// * Prerequisites:
|
|
// * - Test account must have the EnableDynamicDataMasking capability enabled
|
|
// * - If the capability is not enabled, the DataMaskingTab will not be visible and tests will be skipped
|
|
// *
|
|
// * Important Notes:
|
|
// * - Tests focus on enabling DDM and modifying the masking policy configuration
|
|
// */
|
|
|
|
// let testContainer: TestContainerContext;
|
|
// let DATABASE_ID: string;
|
|
// let CONTAINER_ID: string;
|
|
|
|
// test.beforeAll(async () => {
|
|
// testContainer = await createTestSQLContainer();
|
|
// DATABASE_ID = testContainer.database.id;
|
|
// CONTAINER_ID = testContainer.container.id;
|
|
// });
|
|
|
|
// // Clean up test database after all tests
|
|
// test.afterAll(async () => {
|
|
// if (testContainer) {
|
|
// await testContainer.dispose();
|
|
// }
|
|
// });
|
|
|
|
// // Helper function to navigate to Data Masking tab
|
|
// async function navigateToDataMaskingTab(page: Page, explorer: DataExplorer): Promise<boolean> {
|
|
// // Refresh the tree to see the newly created database
|
|
// const refreshButton = explorer.frame.getByTestId("Sidebar/RefreshButton");
|
|
// await refreshButton.click();
|
|
// await page.waitForTimeout(3000);
|
|
|
|
// // Expand database and container nodes
|
|
// const databaseNode = await explorer.waitForNode(DATABASE_ID);
|
|
// await databaseNode.expand();
|
|
// await page.waitForTimeout(2000);
|
|
|
|
// const containerNode = await explorer.waitForNode(`${DATABASE_ID}/${CONTAINER_ID}`);
|
|
// await containerNode.expand();
|
|
// await page.waitForTimeout(1000);
|
|
|
|
// // Click Scale & Settings or Settings (depending on container type)
|
|
// let settingsNode = explorer.frame.getByTestId(`TreeNode:${DATABASE_ID}/${CONTAINER_ID}/Scale & Settings`);
|
|
// const isScaleAndSettings = await settingsNode.isVisible().catch(() => false);
|
|
|
|
// if (!isScaleAndSettings) {
|
|
// settingsNode = explorer.frame.getByTestId(`TreeNode:${DATABASE_ID}/${CONTAINER_ID}/Settings`);
|
|
// }
|
|
|
|
// await settingsNode.click();
|
|
// await page.waitForTimeout(2000);
|
|
|
|
// // Check if Data Masking tab is available
|
|
// const dataMaskingTab = explorer.frame.getByTestId("settings-tab-header/DataMaskingTab");
|
|
// const isTabVisible = await dataMaskingTab.isVisible().catch(() => false);
|
|
|
|
// if (!isTabVisible) {
|
|
// return false;
|
|
// }
|
|
|
|
// await dataMaskingTab.click();
|
|
// await page.waitForTimeout(1000);
|
|
// return true;
|
|
// }
|
|
|
|
// test.describe("Data Masking under Scale & Settings", () => {
|
|
// test("Data Masking tab should be visible and show JSON editor", async ({ page }) => {
|
|
// const explorer = await DataExplorer.open(page, TestAccount.SQL);
|
|
// const isTabAvailable = await navigateToDataMaskingTab(page, explorer);
|
|
|
|
// if (!isTabAvailable) {
|
|
// test.skip(
|
|
// true,
|
|
// "Data Masking tab is not available. Test account may not have EnableDynamicDataMasking capability.",
|
|
// );
|
|
// }
|
|
|
|
// // Verify the Data Masking editor is visible
|
|
// const dataMaskingEditor = explorer.frame.locator(".settingsV2Editor");
|
|
// await expect(dataMaskingEditor).toBeVisible();
|
|
// });
|
|
|
|
// test("Data Masking editor should contain default policy structure", async ({ page }) => {
|
|
// test.skip();
|
|
// const explorer = await DataExplorer.open(page, TestAccount.SQL);
|
|
// const isTabAvailable = await navigateToDataMaskingTab(page, explorer);
|
|
|
|
// if (!isTabAvailable) {
|
|
// test.skip(
|
|
// true,
|
|
// "Data Masking tab is not available. Test account may not have EnableDynamicDataMasking capability.",
|
|
// );
|
|
// }
|
|
|
|
// // Verify the editor contains the expected JSON structure fields
|
|
// const editorContent = explorer.frame.locator(".settingsV2Editor");
|
|
// await expect(editorContent).toBeVisible();
|
|
|
|
// // Check that the editor contains key policy fields (default policy has empty arrays)
|
|
// await expect(editorContent).toContainText("includedPaths");
|
|
// await expect(editorContent).toContainText("excludedPaths");
|
|
// });
|
|
|
|
// test("Data Masking editor should have correct default policy values", async ({ page }) => {
|
|
// test.skip();
|
|
// const explorer = await DataExplorer.open(page, TestAccount.SQL);
|
|
// const isTabAvailable = await navigateToDataMaskingTab(page, explorer);
|
|
|
|
// if (!isTabAvailable) {
|
|
// test.skip(
|
|
// true,
|
|
// "Data Masking tab is not available. Test account may not have EnableDynamicDataMasking capability.",
|
|
// );
|
|
// }
|
|
|
|
// const editorContent = explorer.frame.locator(".settingsV2Editor");
|
|
// await expect(editorContent).toBeVisible();
|
|
|
|
// // Default policy should have empty includedPaths and excludedPaths arrays
|
|
// await expect(editorContent).toContainText("[]");
|
|
// });
|
|
// });
|