style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 28s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 16s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m25s
AI Code Review / AI Code Review (pull_request) Successful in 1m25s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m32s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m52s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m48s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m15s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m5s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 6m35s
CI/CD Pipeline / CI Gate (pull_request) Successful in 3s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m52s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 12s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 19s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 241h43m41s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 241h43m44s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 241h43m44s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 241h43m45s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 241h49m4s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 241h49m6s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 241h49m26s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 241h49m33s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 241h49m35s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 241h49m42s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 241h49m45s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 241h49m59s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 241h50m15s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 241h50m26s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 242h18m18s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 242h23m41s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 242h24m10s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 242h24m19s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 242h24m51s

This commit is contained in:
CI Bot
2026-09-06 05:33:55 +00:00
parent fec656941d
commit e1aff5609d
2 changed files with 29 additions and 21 deletions
+27 -19
View File
@@ -25,16 +25,21 @@ def test_beat_cleanup_calls_core_and_revokes():
"""beat 任务串联三个核心步骤,返回汇总计数。"""
fake_session = MagicMock()
with patch("worker_app.db.SessionLocal", return_value=fake_session) as m_db, patch(
"packages.application.ingest_orphan_cleanup.cleanup_stale_ingest_jobs",
return_value=([("job-1", "cel-1"), ("job-2", "")], ["a-1"]),
) as m_jobs, patch(
"packages.application.ingest_orphan_cleanup.cleanup_orphan_processing_assets",
return_value=["a-2"],
) as m_assets, patch(
"packages.shared.celery_orphan_guard.revoke_and_purge",
return_value=1,
) as m_revoke:
with (
patch("worker_app.db.SessionLocal", return_value=fake_session) as m_db,
patch(
"packages.application.ingest_orphan_cleanup.cleanup_stale_ingest_jobs",
return_value=([("job-1", "cel-1"), ("job-2", "")], ["a-1"]),
) as m_jobs,
patch(
"packages.application.ingest_orphan_cleanup.cleanup_orphan_processing_assets",
return_value=["a-2"],
) as m_assets,
patch(
"packages.shared.celery_orphan_guard.revoke_and_purge",
return_value=1,
) as m_revoke,
):
result = cleanup.scheduled_cleanup_stale_ingest_jobs()
m_db.assert_called_once()
@@ -52,15 +57,18 @@ def test_beat_cleanup_no_op_when_nothing_stale():
"""无孤儿时不调 revoke,返回全 0。"""
fake_session = MagicMock()
with patch("worker_app.db.SessionLocal", return_value=fake_session), patch(
"packages.application.ingest_orphan_cleanup.cleanup_stale_ingest_jobs",
return_value=([], []),
), patch(
"packages.application.ingest_orphan_cleanup.cleanup_orphan_processing_assets",
return_value=[],
), patch(
"packages.shared.celery_orphan_guard.revoke_and_purge"
) as m_revoke:
with (
patch("worker_app.db.SessionLocal", return_value=fake_session),
patch(
"packages.application.ingest_orphan_cleanup.cleanup_stale_ingest_jobs",
return_value=([], []),
),
patch(
"packages.application.ingest_orphan_cleanup.cleanup_orphan_processing_assets",
return_value=[],
),
patch("packages.shared.celery_orphan_guard.revoke_and_purge") as m_revoke,
):
result = cleanup.scheduled_cleanup_stale_ingest_jobs()
m_revoke.assert_not_called()
@@ -184,10 +184,10 @@ class TestCleanupOrphanProcessingAssets:
class TestRecoverStuckIngestJobsOnStartup:
def test_stuck_processing_job_requeued(self, session):
"""processing 超 10 分钟 → 重置 pending 并重新 send_task,回写新 celery id。"""
from packages.application.ingest_orphan_cleanup import recover_stuck_ingest_jobs_on_startup
from types import SimpleNamespace
from packages.application.ingest_orphan_cleanup import recover_stuck_ingest_jobs_on_startup
job = _mk_job(session, status="processing", celery_task_id="old-cel-1", asset_id="a-1", minutes_ago=30)
sent = []