fix: reconcile and expose failed product cleanup

This commit is contained in:
2026-09-12 15:24:41 +08:00
parent bd78eef161
commit 21ad6fbf8d
6 changed files with 176 additions and 6 deletions
+29
View File
@@ -356,6 +356,35 @@ def test_archive_version_rejects_failed_cleanup_product_and_status_is_visible(
assert restored["status"] == "active"
def test_delete_rejects_failed_cleanup_product_until_restore(product_archive_client):
product = create_product(product_archive_client)
deleted = product_archive_client.delete(
f"/api/products/{product['product_id']}", headers=orders_auth_header()
).json()
store = product_archive_client.product_store
purge_after = datetime.fromisoformat(deleted["purge_after"])
store.claim_product_purge(deleted["product_id"], purge_after)
store.fail_product_purge(deleted["product_id"], now=purge_after)
rejected = product_archive_client.delete(
f"/api/products/{deleted['product_id']}", headers=orders_auth_header()
)
assert rejected.status_code == 409
assert store.get_product(deleted["product_id"]).status == "failed_cleanup"
restored = product_archive_client.post(
f"/api/products/{deleted['product_id']}/restore", headers=orders_auth_header()
)
assert restored.status_code == 200
assert restored.json()["status"] == "active"
soft_deleted = product_archive_client.delete(
f"/api/products/{deleted['product_id']}", headers=orders_auth_header()
)
assert soft_deleted.status_code == 200
assert soft_deleted.json()["status"] == "pending_cleanup"
def test_archive_failure_during_final_move_removes_staging_files(product_archive_client, prepared_wordcloud_job, monkeypatch):
product = create_product(product_archive_client)
service = service_app._product_archive_service()