vatsrahul1001 commented on code in PR #59943: URL: https://github.com/apache/airflow/pull/59943#discussion_r2664387991
########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; + +test.describe("Dag Tasks Tab", () => { Review Comment: ```suggestion test.describe("Dag Tasks Tab", () => { const testDagId = testConfig.testDag.id; test.beforeAll(async ({ browser }) => { test.setTimeout(5 * 60 * 1000); const context = await browser.newContext({ storageState: AUTH_FILE }); const page = await context.newPage(); const dagPage = new DagsPage(page); await dagPage.triggerDag(testDagId); await dagPage.verifyDagRunStatus(testDagId, "success"); await context.close(); }); ``` ########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; + +test.describe("Dag Tasks Tab", () => { + test("should navigate to tasks tab and show list", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await expect(dagPage.tasksTab).toHaveAttribute("class", "active"); + await expect(dagPage.taskCards.first()).toBeVisible(); + }); + + test("should search tasks by name", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.searchBox.fill("runme_0"); + + // Wait for filter to apply + await expect(dagPage.taskCards).toHaveCount(1); + await expect(dagPage.taskCards).toContainText("runme_0"); + }); + + test("should filter tasks by operator", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.filterByOperator("BashOperator"); + + await expect(dagPage.taskCards.first()).toBeVisible(); + await expect(dagPage.taskCards.first()).toContainText("BashOperator"); + }); + + test("should filter tasks by trigger rule", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.filterByTriggerRule("all_success"); + + await expect(dagPage.taskCards.first()).toBeVisible(); + await expect(dagPage.taskCards.first()).toContainText("all_success"); + }); + + test("should filter tasks by retries", async ({ page }) => { Review Comment: Rename test to `verify filter by retries` ########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; + +test.describe("Dag Tasks Tab", () => { + test("should navigate to tasks tab and show list", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await expect(dagPage.tasksTab).toHaveAttribute("class", "active"); + await expect(dagPage.taskCards.first()).toBeVisible(); + }); + + test("should search tasks by name", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.searchBox.fill("runme_0"); + + // Wait for filter to apply + await expect(dagPage.taskCards).toHaveCount(1); + await expect(dagPage.taskCards).toContainText("runme_0"); + }); + + test("should filter tasks by operator", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.filterByOperator("BashOperator"); + + await expect(dagPage.taskCards.first()).toBeVisible(); + await expect(dagPage.taskCards.first()).toContainText("BashOperator"); + }); + + test("should filter tasks by trigger rule", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.filterByTriggerRule("all_success"); + + await expect(dagPage.taskCards.first()).toBeVisible(); + await expect(dagPage.taskCards.first()).toContainText("all_success"); + }); + + test("should filter tasks by retries", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.retriesFilter.click(); + const option = page.locator('div[role="option"]').first(); + + if (await option.isVisible()) { + await option.click(); + await page.keyboard.press("Escape"); + await expect(dagPage.taskCards.first()).toBeVisible(); + } else { + await dagPage.retriesFilter.click(); + } + }); + + test("should filter tasks by mapped status", async ({ page }) => { + const dagPage = new DagsPage(page); Review Comment: All filter tests follow the same pattern. Consider combining into one comprehensive filter test: ########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; Review Comment: We do not need to hardcode dag_id we can get from config ``` import { testConfig } from "playwright.config"; const testDagId = testConfig.testDag.id; ``` ########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; + +test.describe("Dag Tasks Tab", () => { + test("should navigate to tasks tab and show list", async ({ page }) => { Review Comment: Rename test to `verify tasks tab displays task list` ########## airflow-core/src/airflow/ui/tests/e2e/pages/DagsPage.ts: ########## @@ -100,6 +143,10 @@ export class DagsPage extends BasePage { await this.navigateTo(DagsPage.getDagDetailUrl(dagName)); } + public async navigateToDagTasks(dagId: string = "example_bash_operator") { Review Comment: We do not need default here. We should also wait task to load ```suggestion public async navigateToDagTasks(dagId: string): Promise<void> { await this.page.goto(`/dags/${dagId}/tasks`); await this.taskCards.first().waitFor({ state: "visible", timeout: 10_000 }); } ``` ########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; + +test.describe("Dag Tasks Tab", () => { + test("should navigate to tasks tab and show list", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await expect(dagPage.tasksTab).toHaveAttribute("class", "active"); + await expect(dagPage.taskCards.first()).toBeVisible(); + }); + + test("should search tasks by name", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.searchBox.fill("runme_0"); + + // Wait for filter to apply + await expect(dagPage.taskCards).toHaveCount(1); + await expect(dagPage.taskCards).toContainText("runme_0"); + }); + + test("should filter tasks by operator", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.filterByOperator("BashOperator"); + + await expect(dagPage.taskCards.first()).toBeVisible(); + await expect(dagPage.taskCards.first()).toContainText("BashOperator"); + }); + + test("should filter tasks by trigger rule", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.filterByTriggerRule("all_success"); + + await expect(dagPage.taskCards.first()).toBeVisible(); + await expect(dagPage.taskCards.first()).toContainText("all_success"); + }); + + test("should filter tasks by retries", async ({ page }) => { Review Comment: Test passes whether filtering works or not. This is a no-op test. Also you are not retring and task, there would always be 0 retries, how do you plan to handle this? ########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; + +test.describe("Dag Tasks Tab", () => { + test("should navigate to tasks tab and show list", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await expect(dagPage.tasksTab).toHaveAttribute("class", "active"); + await expect(dagPage.taskCards.first()).toBeVisible(); + }); + + test("should search tasks by name", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.searchBox.fill("runme_0"); + + // Wait for filter to apply + await expect(dagPage.taskCards).toHaveCount(1); + await expect(dagPage.taskCards).toContainText("runme_0"); + }); + + test("should filter tasks by operator", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.filterByOperator("BashOperator"); + + await expect(dagPage.taskCards.first()).toBeVisible(); + await expect(dagPage.taskCards.first()).toContainText("BashOperator"); + }); + + test("should filter tasks by trigger rule", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.filterByTriggerRule("all_success"); + + await expect(dagPage.taskCards.first()).toBeVisible(); + await expect(dagPage.taskCards.first()).toContainText("all_success"); + }); + + test("should filter tasks by retries", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.retriesFilter.click(); + const option = page.locator('div[role="option"]').first(); + + if (await option.isVisible()) { + await option.click(); + await page.keyboard.press("Escape"); + await expect(dagPage.taskCards.first()).toBeVisible(); + } else { + await dagPage.retriesFilter.click(); + } + }); + + test("should filter tasks by mapped status", async ({ page }) => { Review Comment: There is no mapped task in example dag you are using how do you plan to test mapped filter ########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; + +test.describe("Dag Tasks Tab", () => { + test("should navigate to tasks tab and show list", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await expect(dagPage.tasksTab).toHaveAttribute("class", "active"); + await expect(dagPage.taskCards.first()).toBeVisible(); + }); + + test("should search tasks by name", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.searchBox.fill("runme_0"); + + // Wait for filter to apply + await expect(dagPage.taskCards).toHaveCount(1); + await expect(dagPage.taskCards).toContainText("runme_0"); + }); + + test("should filter tasks by operator", async ({ page }) => { Review Comment: rename test to `verify filter tasks by operator` ########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; + +test.describe("Dag Tasks Tab", () => { + test("should navigate to tasks tab and show list", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await expect(dagPage.tasksTab).toHaveAttribute("class", "active"); Review Comment: Will fail if class is "active some-other-class". We can use `await expect(page).toHaveURL(/\/tasks$/);` ########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; + +test.describe("Dag Tasks Tab", () => { Review Comment: To test Tasks tab shows a "Last Instance" column with status badges we need to trigger a dag run lets trigger dag run in beforeAll ########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; + +test.describe("Dag Tasks Tab", () => { + test("should navigate to tasks tab and show list", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await expect(dagPage.tasksTab).toHaveAttribute("class", "active"); + await expect(dagPage.taskCards.first()).toBeVisible(); + }); + + test("should search tasks by name", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.searchBox.fill("runme_0"); + + // Wait for filter to apply + await expect(dagPage.taskCards).toHaveCount(1); + await expect(dagPage.taskCards).toContainText("runme_0"); + }); + + test("should filter tasks by operator", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.filterByOperator("BashOperator"); + + await expect(dagPage.taskCards.first()).toBeVisible(); + await expect(dagPage.taskCards.first()).toContainText("BashOperator"); + }); + + test("should filter tasks by trigger rule", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.filterByTriggerRule("all_success"); + + await expect(dagPage.taskCards.first()).toBeVisible(); + await expect(dagPage.taskCards.first()).toContainText("all_success"); + }); + + test("should filter tasks by retries", async ({ page }) => { Review Comment: ```suggestion test("verify filter by retries", async ({ page }) => { const dagPage = new DagsPage(page); await dagPage.navigateToDagTasks(testDagId); await dagPage.retriesFilter.click(); const option = page.locator('div[role="option"]').first(); // Skip if no retry options available for this DAG const hasOptions = await option.isVisible(); if (!hasOptions) { test.skip(true, "No retry options available for test DAG"); return; } await option.click(); await expect(dagPage.taskCards.first()).toBeVisible(); }); ``` ########## airflow-core/src/airflow/ui/tests/e2e/specs/dag-tasks.spec.ts: ########## @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { test, expect } from "@playwright/test"; +import { DagsPage } from "tests/e2e/pages/DagsPage"; + +const DAG_ID = "example_bash_operator"; + +test.describe("Dag Tasks Tab", () => { + test("should navigate to tasks tab and show list", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await expect(dagPage.tasksTab).toHaveAttribute("class", "active"); + await expect(dagPage.taskCards.first()).toBeVisible(); + }); + + test("should search tasks by name", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.searchBox.fill("runme_0"); + + // Wait for filter to apply + await expect(dagPage.taskCards).toHaveCount(1); + await expect(dagPage.taskCards).toContainText("runme_0"); + }); + + test("should filter tasks by operator", async ({ page }) => { + const dagPage = new DagsPage(page); + + await dagPage.navigateToDagTasks(DAG_ID); + + await dagPage.filterByOperator("BashOperator"); + + await expect(dagPage.taskCards.first()).toBeVisible(); + await expect(dagPage.taskCards.first()).toContainText("BashOperator"); + }); + + test("should filter tasks by trigger rule", async ({ page }) => { Review Comment: In the DAG you are using there is only all_success rule. If what are we testing here if we only have one value? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
