diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 1d480ea9db..83713e076a 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -209,6 +209,7 @@ jobs: "pipelines.spec.js", "pipeline-dynamic.spec.js", "pipeline-core.spec.js", + "scheduled-pipeline-query-builder.spec.js", # "remotepipeline.spec.js" ] - testfolder: "Functions" diff --git a/tests/ui-testing/pages/pipelinesPages/pipelinesPage.js b/tests/ui-testing/pages/pipelinesPages/pipelinesPage.js index 480c236b0b..916251bf14 100644 --- a/tests/ui-testing/pages/pipelinesPages/pipelinesPage.js +++ b/tests/ui-testing/pages/pipelinesPages/pipelinesPage.js @@ -2165,4 +2165,51 @@ export class PipelinesPage { await toggle.click(); testLogger.info(`Toggled pipeline: ${pipelineName}`); } + + // ============================================================================ + // SCHEDULED PIPELINE TAB METHODS - POM Compliance Fix + // These methods replace raw selectors in spec files for PromQL/SQL tab switching + // ============================================================================ + + /** + * Click PromQL tab in scheduled pipeline dialog + * Note: AppTabs renders tabs as
elements with data-test="tab-{value}", not buttons + */ + async clickPromqlTab() { + const promqlTab = this.scheduledPipelineTabs.locator('[data-test="tab-promql"]'); + await promqlTab.waitFor({ state: 'visible', timeout: 5000 }); + await promqlTab.click(); + testLogger.info('Clicked PromQL tab'); + } + + /** + * Click SQL tab in scheduled pipeline dialog + * Note: AppTabs renders tabs as
elements with data-test="tab-{value}", not buttons + */ + async clickSqlTab() { + const sqlTab = this.scheduledPipelineTabs.locator('[data-test="tab-sql"]'); + await sqlTab.waitFor({ state: 'visible', timeout: 5000 }); + await sqlTab.click(); + testLogger.info('Clicked SQL tab'); + } + + /** + * Verify PromQL tab is active/selected + * Note: AppTabs uses 'active' CSS class for the selected tab + */ + async expectPromqlTabActive() { + const promqlTab = this.scheduledPipelineTabs.locator('[data-test="tab-promql"]'); + await expect(promqlTab).toHaveClass(/active/); + testLogger.info('Verified PromQL tab is active'); + } + + /** + * Verify SQL tab is active/selected + * Note: AppTabs uses 'active' CSS class for the selected tab + */ + async expectSqlTabActive() { + const sqlTab = this.scheduledPipelineTabs.locator('[data-test="tab-sql"]'); + await expect(sqlTab).toHaveClass(/active/); + testLogger.info('Verified SQL tab is active'); + } } \ No newline at end of file diff --git a/tests/ui-testing/playwright-tests/Pipelines/scheduled-pipeline-stream-auto-update.spec.js b/tests/ui-testing/playwright-tests/Pipelines/scheduled-pipeline-query-builder.spec.js similarity index 88% rename from tests/ui-testing/playwright-tests/Pipelines/scheduled-pipeline-stream-auto-update.spec.js rename to tests/ui-testing/playwright-tests/Pipelines/scheduled-pipeline-query-builder.spec.js index 26d25a410d..2d7e8c4264 100644 --- a/tests/ui-testing/playwright-tests/Pipelines/scheduled-pipeline-stream-auto-update.spec.js +++ b/tests/ui-testing/playwright-tests/Pipelines/scheduled-pipeline-query-builder.spec.js @@ -13,7 +13,7 @@ test.use({ } }); -test.describe("Scheduled Pipeline Stream Auto-Update", { tag: ['@all', '@scheduledPipeline'] }, () => { +test.describe("Scheduled Pipeline Query Builder", { tag: ['@all', '@scheduledPipeline'] }, () => { let pageManager; let loginPage; @@ -142,11 +142,16 @@ test.describe("Scheduled Pipeline Stream Auto-Update", { tag: ['@all', '@schedul testLogger.info('✅ Test passed: Default query generated correctly'); }); - test.skip("should not update PromQL tab when stream changes", { + test("should not update PromQL tab when stream changes", { tag: ['@functional', '@P1'] }, async ({ page }) => { testLogger.info('Testing PromQL tab is unaffected by SQL watcher'); + // Ingest metrics data to ensure metrics streams exist for PromQL testing + testLogger.info('Ingesting metrics data for PromQL test'); + await pageManager.pipelinesPage.ingestMetricsData('e2e_test_metrics', 10); + await page.waitForTimeout(2000); // Wait for metrics to be indexed + await pageManager.pipelinesPage.openPipelineMenu(); await page.waitForTimeout(1000); await pageManager.pipelinesPage.addPipeline(); @@ -167,13 +172,9 @@ test.describe("Scheduled Pipeline Stream Auto-Update", { tag: ['@all', '@schedul await pageManager.pipelinesPage.selectStreamType('metrics'); await page.waitForTimeout(1000); - // Select a metrics stream in SQL tab - testLogger.info('Selecting metrics stream'); - await pageManager.pipelinesPage.streamNameLabel.click(); - await page.waitForTimeout(500); - // Note: We'll use any available metrics stream - const streamOptions = page.getByRole("option").filter({ hasText: /^[a-z0-9_]+$/ }).first(); - await streamOptions.click(); + // Select the metrics stream we just ingested + testLogger.info('Selecting metrics stream: e2e_test_metrics'); + await pageManager.pipelinesPage.selectStreamName('e2e_test_metrics'); await page.waitForTimeout(2000); // Get SQL query text @@ -181,18 +182,16 @@ test.describe("Scheduled Pipeline Stream Auto-Update", { tag: ['@all', '@schedul // Switch to PromQL tab (now enabled because we selected metrics) testLogger.info('Switching to PromQL tab'); - const promqlTab = pageManager.pipelinesPage.scheduledPipelineTabs.getByRole('button', { name: /PromQL/i }); - await promqlTab.waitFor({ state: 'visible', timeout: 5000 }); - await promqlTab.click(); + await pageManager.pipelinesPage.clickPromqlTab(); await page.waitForTimeout(1000); // Verify we're on PromQL tab testLogger.info('Verifying PromQL tab active'); + await pageManager.pipelinesPage.expectPromqlTabActive(); // Switch back to SQL tab testLogger.info('Switching back to SQL tab'); - const sqlTab = pageManager.pipelinesPage.scheduledPipelineTabs.getByRole('button', { name: /SQL/i }); - await sqlTab.click(); + await pageManager.pipelinesPage.clickSqlTab(); await page.waitForTimeout(1000); // Verify SQL query still exists (tab switching doesn't affect SQL query) diff --git a/tests/ui-testing/playwright-tests/cleanup.spec.js b/tests/ui-testing/playwright-tests/cleanup.spec.js index edc441da61..fb983c4d32 100644 --- a/tests/ui-testing/playwright-tests/cleanup.spec.js +++ b/tests/ui-testing/playwright-tests/cleanup.spec.js @@ -263,7 +263,7 @@ test.describe("Pre-Test Cleanup", () => { /^e2e_test_traces$/ // Pipeline regression test traces stream (Issue #9901) ], // Protected streams to never delete - ['default', 'sensitive', 'important', 'critical', 'production', 'staging', 'automation', 'e2e_automate'] + ['default', 'sensitive', 'important', 'critical', 'production', 'staging', 'automation', 'e2e_automate', 'k8s_json'] ); // Note: Pipeline regression test streams (e2e_test_cpu_usage for metrics, e2e_test_traces for traces) @@ -301,7 +301,7 @@ test.describe("Pre-Test Cleanup", () => { /^temp_metrics_/ // temp_metrics_* (Temporary test streams) ], // Protected metrics streams - never delete - ['default'] // 'default' is the primary metrics stream used by tests + ['default', 'e2e_test_metrics'] // 'default' is the primary metrics stream, 'e2e_test_metrics' used by scheduled-pipeline-query-builder.spec.js ); // Note: Stream deletion waiting is no longer needed here because: