vatsrahul1001 commented on code in PR #59754:
URL: https://github.com/apache/airflow/pull/59754#discussion_r2664173551
##########
airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts:
##########
@@ -84,3 +84,142 @@ test.describe("Dag Details Tab", () => {
await dagsPage.verifyDagDetails(testDagId);
});
});
+
+/*
+ * Dag Runs Tab E2E Tests
+ */
+test.describe("Dag Runs Tab", () => {
+ let dagsPage: DagsPage;
+
+ const testDagId = testConfig.testDag.id;
+
+ test.beforeEach(async ({ page }) => {
+ dagsPage = new DagsPage(page);
+ await dagsPage.triggerDag(testDagId);
+ });
+
+ test("should navigate to Runs tab and display correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ // Verify runs table is displayed
+ await dagsPage.verifyRunsTabDisplayed();
+
+ // Verify we can see run details
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+ });
+
+ test("should verify run details are displayed correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ // Verify first run has required fields
+ const [firstRun] = runs;
+
+ expect(firstRun.runId).toBeTruthy();
+ expect(firstRun.state).toBeTruthy();
+ });
+
+ test("should click run and navigate to details page", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ const [firstRun] = runs;
+
+ await dagsPage.clickRun(firstRun.runId);
+
+ // Verify we're on the run details page
+ await dagsPage.verifyRunDetailsPage(firstRun.runId);
+ });
+
+ test("should filter runs by state", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ const [firstRun] = runs;
+
+ if (firstRun === undefined) {
+ throw new Error("No runs found");
+ }
+
+ const targetState = firstRun.state;
+
+ await dagsPage.filterByState(targetState);
+
+ const filteredRuns = await dagsPage.getRunDetails();
+
+ expect(filteredRuns.length).toBeGreaterThan(0);
+ expect(filteredRuns.every((run) => run.state ===
targetState)).toBeTruthy();
+ });
+
+ test("should search runs", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ const [firstRun] = runs;
+
+ if (firstRun === undefined) {
+ throw new Error("No runs found");
+ }
+
+ const targetRunId = firstRun.runId;
+
+ await dagsPage.searchRun(targetRunId);
+
+ const searchedRuns = await dagsPage.getRunDetails();
+
+ expect(searchedRuns.length).toBeGreaterThan(0);
+ const [firstSearchedRun] = searchedRuns;
+
+ if (firstSearchedRun === undefined) {
+ throw new Error("No searched runs found");
+ }
+
+ expect(firstSearchedRun.runId).toContain(targetRunId);
+ });
+
+ test("should verify pagination works on the Runs tab", async () => {
Review Comment:
rename test to `verify pagination`
##########
airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts:
##########
@@ -84,3 +84,142 @@ test.describe("Dag Details Tab", () => {
await dagsPage.verifyDagDetails(testDagId);
});
});
+
+/*
+ * Dag Runs Tab E2E Tests
+ */
+test.describe("Dag Runs Tab", () => {
+ let dagsPage: DagsPage;
+
+ const testDagId = testConfig.testDag.id;
+
+ test.beforeEach(async ({ page }) => {
+ dagsPage = new DagsPage(page);
+ await dagsPage.triggerDag(testDagId);
+ });
+
+ test("should navigate to Runs tab and display correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ // Verify runs table is displayed
+ await dagsPage.verifyRunsTabDisplayed();
+
+ // Verify we can see run details
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+ });
+
+ test("should verify run details are displayed correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ // Verify first run has required fields
+ const [firstRun] = runs;
+
+ expect(firstRun.runId).toBeTruthy();
+ expect(firstRun.state).toBeTruthy();
+ });
+
+ test("should click run and navigate to details page", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ const [firstRun] = runs;
+
+ await dagsPage.clickRun(firstRun.runId);
+
+ // Verify we're on the run details page
+ await dagsPage.verifyRunDetailsPage(firstRun.runId);
+ });
+
+ test("should filter runs by state", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ const [firstRun] = runs;
+
+ if (firstRun === undefined) {
+ throw new Error("No runs found");
+ }
+
+ const targetState = firstRun.state;
+
+ await dagsPage.filterByState(targetState);
+
+ const filteredRuns = await dagsPage.getRunDetails();
+
+ expect(filteredRuns.length).toBeGreaterThan(0);
+ expect(filteredRuns.every((run) => run.state ===
targetState)).toBeTruthy();
+ });
+
+ test("should search runs", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ const [firstRun] = runs;
+
+ if (firstRun === undefined) {
+ throw new Error("No runs found");
+ }
+
+ const targetRunId = firstRun.runId;
+
+ await dagsPage.searchRun(targetRunId);
+
+ const searchedRuns = await dagsPage.getRunDetails();
+
+ expect(searchedRuns.length).toBeGreaterThan(0);
+ const [firstSearchedRun] = searchedRuns;
+
+ if (firstSearchedRun === undefined) {
+ throw new Error("No searched runs found");
+ }
+
+ expect(firstSearchedRun.runId).toContain(targetRunId);
+ });
+
+ test("should verify pagination works on the Runs tab", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ await expect(dagsPage.paginationNextButton).toBeVisible();
+ await expect(dagsPage.paginationPrevButton).toBeVisible();
+
+ const initialRuns = await dagsPage.getRunDetails();
+
+ expect(initialRuns.length).toBeGreaterThan(0);
+
+ // Check if next button is enabled (has more than one page)
+ const isNextEnabled = await dagsPage.paginationNextButton.isEnabled();
+
+ if (!isNextEnabled) {
Review Comment:
No need to skip, you can use approach which I have mentioned here
https://github.com/apache/airflow/pull/59754#issuecomment-3713690469
##########
airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts:
##########
@@ -84,3 +84,142 @@ test.describe("Dag Details Tab", () => {
await dagsPage.verifyDagDetails(testDagId);
});
});
+
+/*
+ * Dag Runs Tab E2E Tests
+ */
+test.describe("Dag Runs Tab", () => {
+ let dagsPage: DagsPage;
+
+ const testDagId = testConfig.testDag.id;
+
+ test.beforeEach(async ({ page }) => {
+ dagsPage = new DagsPage(page);
+ await dagsPage.triggerDag(testDagId);
+ });
+
+ test("should navigate to Runs tab and display correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ // Verify runs table is displayed
+ await dagsPage.verifyRunsTabDisplayed();
+
+ // Verify we can see run details
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+ });
+
+ test("should verify run details are displayed correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ // Verify first run has required fields
+ const [firstRun] = runs;
+
+ expect(firstRun.runId).toBeTruthy();
+ expect(firstRun.state).toBeTruthy();
+ });
+
+ test("should click run and navigate to details page", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ const [firstRun] = runs;
+
+ await dagsPage.clickRun(firstRun.runId);
+
+ // Verify we're on the run details page
+ await dagsPage.verifyRunDetailsPage(firstRun.runId);
+ });
+
+ test("should filter runs by state", async () => {
Review Comment:
Also ensure to validate filtering works and count changes
##########
airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts:
##########
@@ -84,3 +84,142 @@ test.describe("Dag Details Tab", () => {
await dagsPage.verifyDagDetails(testDagId);
});
});
+
+/*
+ * Dag Runs Tab E2E Tests
+ */
+test.describe("Dag Runs Tab", () => {
+ let dagsPage: DagsPage;
+
+ const testDagId = testConfig.testDag.id;
+
+ test.beforeEach(async ({ page }) => {
+ dagsPage = new DagsPage(page);
+ await dagsPage.triggerDag(testDagId);
+ });
+
+ test("should navigate to Runs tab and display correctly", async () => {
Review Comment:
Rename test to `verify runs table displays with valid data`
##########
airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts:
##########
@@ -84,3 +84,142 @@ test.describe("Dag Details Tab", () => {
await dagsPage.verifyDagDetails(testDagId);
});
});
+
+/*
+ * Dag Runs Tab E2E Tests
+ */
+test.describe("Dag Runs Tab", () => {
+ let dagsPage: DagsPage;
+
+ const testDagId = testConfig.testDag.id;
+
+ test.beforeEach(async ({ page }) => {
Review Comment:
Let's replace it with beforeALL as mentioned in
https://github.com/apache/airflow/pull/59754#issuecomment-3713727824
##########
airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts:
##########
@@ -84,3 +84,142 @@ test.describe("Dag Details Tab", () => {
await dagsPage.verifyDagDetails(testDagId);
});
});
+
+/*
+ * Dag Runs Tab E2E Tests
+ */
+test.describe("Dag Runs Tab", () => {
+ let dagsPage: DagsPage;
+
+ const testDagId = testConfig.testDag.id;
+
+ test.beforeEach(async ({ page }) => {
+ dagsPage = new DagsPage(page);
+ await dagsPage.triggerDag(testDagId);
+ });
+
+ test("should navigate to Runs tab and display correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ // Verify runs table is displayed
+ await dagsPage.verifyRunsTabDisplayed();
+
+ // Verify we can see run details
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+ });
+
+ test("should verify run details are displayed correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ // Verify first run has required fields
+ const [firstRun] = runs;
+
+ expect(firstRun.runId).toBeTruthy();
+ expect(firstRun.state).toBeTruthy();
+ });
+
+ test("should click run and navigate to details page", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ const [firstRun] = runs;
+
+ await dagsPage.clickRun(firstRun.runId);
+
+ // Verify we're on the run details page
+ await dagsPage.verifyRunDetailsPage(firstRun.runId);
+ });
+
+ test("should filter runs by state", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ const [firstRun] = runs;
+
+ if (firstRun === undefined) {
+ throw new Error("No runs found");
+ }
+
+ const targetState = firstRun.state;
+
+ await dagsPage.filterByState(targetState);
+
+ const filteredRuns = await dagsPage.getRunDetails();
+
+ expect(filteredRuns.length).toBeGreaterThan(0);
+ expect(filteredRuns.every((run) => run.state ===
targetState)).toBeTruthy();
+ });
+
+ test("should search runs", async () => {
Review Comment:
I think we do not need this test, this can be covered in filtering test.
when we apply filter with run_id it does same thing
##########
airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts:
##########
@@ -84,3 +84,142 @@ test.describe("Dag Details Tab", () => {
await dagsPage.verifyDagDetails(testDagId);
});
});
+
+/*
+ * Dag Runs Tab E2E Tests
+ */
+test.describe("Dag Runs Tab", () => {
+ let dagsPage: DagsPage;
+
+ const testDagId = testConfig.testDag.id;
+
+ test.beforeEach(async ({ page }) => {
+ dagsPage = new DagsPage(page);
+ await dagsPage.triggerDag(testDagId);
+ });
+
+ test("should navigate to Runs tab and display correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ // Verify runs table is displayed
+ await dagsPage.verifyRunsTabDisplayed();
+
+ // Verify we can see run details
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+ });
+
+ test("should verify run details are displayed correctly", async () => {
Review Comment:
This test looks redundant to me
##########
airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts:
##########
@@ -84,3 +84,142 @@ test.describe("Dag Details Tab", () => {
await dagsPage.verifyDagDetails(testDagId);
});
});
+
+/*
+ * Dag Runs Tab E2E Tests
+ */
+test.describe("Dag Runs Tab", () => {
+ let dagsPage: DagsPage;
+
+ const testDagId = testConfig.testDag.id;
+
+ test.beforeEach(async ({ page }) => {
+ dagsPage = new DagsPage(page);
+ await dagsPage.triggerDag(testDagId);
+ });
+
+ test("should navigate to Runs tab and display correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ // Verify runs table is displayed
+ await dagsPage.verifyRunsTabDisplayed();
+
+ // Verify we can see run details
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+ });
+
+ test("should verify run details are displayed correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ // Verify first run has required fields
+ const [firstRun] = runs;
+
+ expect(firstRun.runId).toBeTruthy();
+ expect(firstRun.state).toBeTruthy();
+ });
+
+ test("should click run and navigate to details page", async () => {
Review Comment:
Rename test to `verify run details page navigation`
##########
airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts:
##########
@@ -84,3 +84,142 @@ test.describe("Dag Details Tab", () => {
await dagsPage.verifyDagDetails(testDagId);
});
});
Review Comment:
Do not add these test to dags-list.spec.ts add these to dag-runs.spec.ts
##########
airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts:
##########
@@ -84,3 +84,142 @@ test.describe("Dag Details Tab", () => {
await dagsPage.verifyDagDetails(testDagId);
});
});
+
+/*
+ * Dag Runs Tab E2E Tests
+ */
+test.describe("Dag Runs Tab", () => {
+ let dagsPage: DagsPage;
+
+ const testDagId = testConfig.testDag.id;
+
+ test.beforeEach(async ({ page }) => {
+ dagsPage = new DagsPage(page);
+ await dagsPage.triggerDag(testDagId);
+ });
+
+ test("should navigate to Runs tab and display correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ // Verify runs table is displayed
+ await dagsPage.verifyRunsTabDisplayed();
+
+ // Verify we can see run details
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+ });
+
+ test("should verify run details are displayed correctly", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ // Verify first run has required fields
+ const [firstRun] = runs;
+
+ expect(firstRun.runId).toBeTruthy();
+ expect(firstRun.state).toBeTruthy();
+ });
+
+ test("should click run and navigate to details page", async () => {
+ await dagsPage.navigateToRunsTab(testDagId);
+
+ const runs = await dagsPage.getRunDetails();
+
+ expect(runs.length).toBeGreaterThan(0);
+
+ const [firstRun] = runs;
+
+ await dagsPage.clickRun(firstRun.runId);
+
+ // Verify we're on the run details page
+ await dagsPage.verifyRunDetailsPage(firstRun.runId);
+ });
+
+ test("should filter runs by state", async () => {
Review Comment:
Rename test to `verify filtering`. Also, we should filter with different
type like state, run_id, run_type.
--
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]