Flow delete offers to delete its runs, history included

DELETE /runs?flow= removes every Run row of the flow but left its flow_run
rows, so a deleted flow kept appearing in the history. history=true now
drops those too, and the flow delete dialogs (editor and bulk) send it when
"Also delete its runs" is ticked.
This commit is contained in:
2026-10-15 10:52:33 +02:00
parent 7ea53ccf17
commit 6fa44bacf3
11 changed files with 124 additions and 18 deletions
+28 -1
View File
@@ -33,7 +33,7 @@ from fluksio.flow.runs import (
)
from fluksio.flow.schemas import FlowDef, FlowInput, NodeDef
from fluksio.flow.store import FlowStore
from fluksio.models import Run, RunArtifact, RunMetric, RunNode
from fluksio.models import FlowRun, Run, RunArtifact, RunMetric, RunNode
def test_a_run_cache_finds_what_an_earlier_run_recorded(tmp_path):
@@ -1041,6 +1041,33 @@ def test_deleting_a_flows_runs_clears_that_flow_only(client, superuser_token_hea
session.commit()
def test_history_also_clears_a_flows_cascades(client, superuser_token_headers):
"""What deleting a flow together with its runs asks for."""
made = datetime.now(UTC)
url = f"{settings.API_V1_STR}/runs"
with Session(db_engine) as session:
session.add(Run(id="hist-1", flow="gone", status="ok", created_at=made))
session.add(FlowRun(id="hist-1", flow="gone", source="run", started_at=made))
session.add(FlowRun(id="hist-2", flow="gone", started_at=made))
session.add(FlowRun(id="hist-3", flow="other", started_at=made))
session.commit()
plain = client.delete(url, params={"flow": "gone"}, headers=superuser_token_headers)
assert plain.status_code == 200
with Session(db_engine) as session:
assert session.get(FlowRun, "hist-2") is not None
answer = client.delete(
url, params={"flow": "gone", "history": True}, headers=superuser_token_headers
)
assert answer.status_code == 200
with Session(db_engine) as session:
left = session.exec(select(FlowRun).where(col(FlowRun.flow) == "gone")).all()
assert left == []
session.delete(session.get(FlowRun, "hist-3"))
session.commit()
# -----------------------------------------------------------------------------
# A cached node's curve
#