Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from airflow.api_fastapi.common.db.common import SessionDep
from airflow.api_fastapi.common.types import UtcDateTime
from airflow.api_fastapi.compat import HTTP_422_UNPROCESSABLE_CONTENT
from airflow.api_fastapi.core_api.services.public.common import resolve_run_on_latest_version
from airflow.api_fastapi.execution_api.datamodels.dagrun import DagRunStateResponse, TriggerDAGRunPayload
from airflow.api_fastapi.execution_api.datamodels.taskinstance import DagRun
from airflow.api_fastapi.execution_api.datamodels.token import TIToken
Expand Down Expand Up @@ -197,7 +198,8 @@ def clear_dag_run(
)
dag = get_dag_for_run(dag_bag, dag_run=dag_run, session=session)

dag.clear(run_id=run_id)
resolved_run_on_latest = resolve_run_on_latest_version(None, dag_id, session)
dag.clear(run_id=run_id, run_on_latest_version=resolved_run_on_latest)


@router.get(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

from __future__ import annotations

from unittest import mock

import pytest
import time_machine
from fastapi import Request
Expand Down Expand Up @@ -322,6 +324,27 @@ def test_dag_run_not_found(self, client):

assert response.status_code == 404

def test_dag_run_clear_invokes_resolver(self, client, session, dag_maker):
"""Clearing invokes resolve_run_on_latest_version with no explicit override."""
dag_id = "test_clear_invokes_resolver"
run_id = "test_run_id"

with dag_maker(dag_id=dag_id, session=session, serialized=True):
EmptyOperator(task_id="test_task")
dag_maker.create_dagrun(run_id=run_id, state=DagRunState.SUCCESS)
session.commit()

with mock.patch(
"airflow.api_fastapi.execution_api.routes.dag_runs.resolve_run_on_latest_version",
return_value=False,
) as mock_resolver:
response = client.post(f"/execution/dag-runs/{dag_id}/{run_id}/clear")

assert response.status_code == 204
mock_resolver.assert_called_once()
# First positional arg is the explicit override; operator does not pass one.
assert mock_resolver.call_args.args[0] is None


class TestDagRunDetail:
def setup_method(self):
Expand Down
Loading