From 4c9dea09134625105bef70ae35d832c99e19ca7a Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 21:50:07 +0530 Subject: [PATCH] Add Playwright E2E tests for Indexing Policy (#2358) * Initial plan * Add Playwright test for Indexing Policy Co-authored-by: sakshigupta12feb <206070758+sakshigupta12feb@users.noreply.github.com> * Refactor Indexing Policy test to use Editor helper class Co-authored-by: sakshigupta12feb <206070758+sakshigupta12feb@users.noreply.github.com> * Address code review feedback - add helper function and improve editor handling Co-authored-by: sakshigupta12feb <206070758+sakshigupta12feb@users.noreply.github.com> * Further simplify code by using helper function consistently Co-authored-by: sakshigupta12feb <206070758+sakshigupta12feb@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: sakshigupta12feb <206070758+sakshigupta12feb@users.noreply.github.com> --- .../scaleAndSettings/indexingPolicy.spec.ts | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 test/sql/scaleAndSettings/indexingPolicy.spec.ts diff --git a/test/sql/scaleAndSettings/indexingPolicy.spec.ts b/test/sql/scaleAndSettings/indexingPolicy.spec.ts new file mode 100644 index 000000000..deb9fb35a --- /dev/null +++ b/test/sql/scaleAndSettings/indexingPolicy.spec.ts @@ -0,0 +1,157 @@ +import { expect, test } from "@playwright/test"; +import { CommandBarButton, DataExplorer, Editor, ONE_MINUTE_MS, TestAccount } from "../../fx"; +import { createTestSQLContainer, TestContainerContext } from "../../testData"; + +test.describe("Indexing Policy under Scale & Settings", () => { + let context: TestContainerContext = null!; + let explorer: DataExplorer = null!; + + // Helper function to get the indexing policy editor + const getIndexingPolicyEditor = (): Editor => { + const editorContainer = explorer.frame.locator(".settingsV2Editor"); + return new Editor(explorer.frame, editorContainer); + }; + + test.beforeAll("Create Test Database & Open Indexing Policy tab", async ({ browser }) => { + context = await createTestSQLContainer(); + const page = await browser.newPage(); + explorer = await DataExplorer.open(page, TestAccount.SQL); + + // Click Scale & Settings and open Indexing Policy tab + await explorer.openScaleAndSettings(context); + const indexingPolicyTab = explorer.frame.getByTestId("settings-tab-header/IndexingPolicyTab"); + await indexingPolicyTab.click(); + }); + + test.afterAll("Delete Test Database", async () => { + await context?.dispose(); + }); + + test("Verify Indexing Policy tab is visible", async () => { + const indexingPolicyTab = explorer.frame.getByTestId("settings-tab-header/IndexingPolicyTab"); + await expect(indexingPolicyTab).toBeVisible(); + }); + + test("Verify Indexing Policy editor is present", async () => { + // The Monaco editor is rendered in a div with class settingsV2Editor + const editorContainer = explorer.frame.locator(".settingsV2Editor"); + await expect(editorContainer).toBeVisible(); + + // Verify the editor has content (default indexing policy) using Editor helper + const editor = getIndexingPolicyEditor(); + const editorContent = await editor.text(); + expect(editorContent).toBeTruthy(); + }); + + test("Update Indexing Policy - Change automatic to false", async () => { + // Use helper function to get editor instance + const editor = getIndexingPolicyEditor(); + + // Verify the Monaco editor is visible + const editorElement = explorer.frame.locator(".settingsV2Editor").locator(".monaco-editor"); + await expect(editorElement).toBeVisible(); + + // Get current indexing policy content + const currentContent = await editor.text(); + expect(currentContent).toBeTruthy(); + const indexingPolicy = JSON.parse(currentContent as string); + + // Verify default policy structure + expect(indexingPolicy).toHaveProperty("automatic"); + expect(indexingPolicy).toHaveProperty("indexingMode"); + + // Modify the indexing policy - change automatic to false + indexingPolicy.automatic = false; + const updatedContent = JSON.stringify(indexingPolicy, null, 4); + + // Set the new content in the editor + await editor.setText(updatedContent); + + // Verify the warning message appears for unsaved changes + const warningMessage = explorer.frame.locator(".ms-MessageBar--warning"); + await expect(warningMessage).toBeVisible({ timeout: 5000 }); + + // Save the changes + await explorer.commandBarButton(CommandBarButton.Save).click(); + + // Verify success message + await expect(explorer.getConsoleHeaderStatus()).toContainText( + `Successfully updated container ${context.container.id}`, + { + timeout: 2 * ONE_MINUTE_MS, + }, + ); + + // Verify warning message is no longer visible after save + await expect(warningMessage).not.toBeVisible({ timeout: 5000 }); + }); + + test("Update Indexing Policy - Change indexingMode to lazy", async () => { + // Use helper function to get editor instance + const editor = getIndexingPolicyEditor(); + + // Verify the Monaco editor is visible + const editorElement = explorer.frame.locator(".settingsV2Editor").locator(".monaco-editor"); + await expect(editorElement).toBeVisible(); + + // Get current indexing policy content + const currentContent = await editor.text(); + expect(currentContent).toBeTruthy(); + const indexingPolicy = JSON.parse(currentContent as string); + + // Modify the indexing policy - change indexingMode to lazy + indexingPolicy.indexingMode = "lazy"; + const updatedContent = JSON.stringify(indexingPolicy, null, 4); + + // Set the new content in the editor + await editor.setText(updatedContent); + + // Verify the warning message appears + const warningMessage = explorer.frame.locator(".ms-MessageBar--warning"); + await expect(warningMessage).toBeVisible({ timeout: 5000 }); + + // Save the changes + await explorer.commandBarButton(CommandBarButton.Save).click(); + + // Verify success message + await expect(explorer.getConsoleHeaderStatus()).toContainText( + `Successfully updated container ${context.container.id}`, + { + timeout: 2 * ONE_MINUTE_MS, + }, + ); + }); + + test("Update Indexing Policy - Revert automatic to true", async () => { + // Use helper function to get editor instance + const editor = getIndexingPolicyEditor(); + + // Verify the Monaco editor is visible + const editorElement = explorer.frame.locator(".settingsV2Editor").locator(".monaco-editor"); + await expect(editorElement).toBeVisible(); + + // Get current indexing policy content + const currentContent = await editor.text(); + expect(currentContent).toBeTruthy(); + const indexingPolicy = JSON.parse(currentContent as string); + + // Revert the changes - set automatic back to true and indexingMode to consistent + indexingPolicy.automatic = true; + indexingPolicy.indexingMode = "consistent"; + const updatedContent = JSON.stringify(indexingPolicy, null, 4); + + // Set the new content in the editor + await editor.setText(updatedContent); + + // Save the changes + await explorer.commandBarButton(CommandBarButton.Save).click(); + + // Verify success message + await expect(explorer.getConsoleHeaderStatus()).toContainText( + `Successfully updated container ${context.container.id}`, + { + timeout: 2 * ONE_MINUTE_MS, + }, + ); + }); +});