Verify deletion actually removed the file before reporting success
MeTube's /delete only unlinks the file when it's configured with
DELETE_FILE_ON_TRASHCAN=true; otherwise it just drops the entry from its
own "done" list and returns {"status": "ok"} regardless -- we were trusting
that response and marking the job "deleted" (offering a re-download) while
the file was still sitting on mediaVM's disk the whole time.
Now HEAD-check the media_url right after the delete call. If the file is
still reachable, leave the job's status untouched (still "completed", still
playable) and surface a clear 409 explaining MeTube's own config is why,
rather than lying about local state.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
8ddea8762d
commit
441a3ef9df
4 changed files with 65 additions and 1 deletions
|
|
@ -184,6 +184,7 @@ def test_delete_download_success(client, db_session, monkeypatch):
|
|||
"app.services.metube_client.MeTubeClient.delete_download",
|
||||
lambda self, metube_job_id: calls.setdefault("id", metube_job_id) or {"status": "ok"},
|
||||
)
|
||||
monkeypatch.setattr("app.services.metube_client.MeTubeClient.check_media", lambda self, url: False)
|
||||
|
||||
resp = client.delete(f"/api/videos/{video.youtube_video_id}/download")
|
||||
|
||||
|
|
@ -195,3 +196,32 @@ def test_delete_download_success(client, db_session, monkeypatch):
|
|||
db_session.refresh(job)
|
||||
assert job.status == "deleted"
|
||||
assert job.media_url is None
|
||||
|
||||
|
||||
def test_delete_download_file_still_present_returns_409(client, db_session, monkeypatch):
|
||||
"""MeTube can accept /delete and still leave the file on disk if its own
|
||||
DELETE_FILE_ON_TRASHCAN config is off -- we must not lie about that."""
|
||||
from app.models.download_job import DownloadJob
|
||||
|
||||
video = _seed_single_video(db_session)
|
||||
job = DownloadJob(
|
||||
video_id=video.id,
|
||||
status="completed",
|
||||
metube_job_id="vid1.vid1",
|
||||
media_url="http://metube.local/download/f.mp4",
|
||||
)
|
||||
db_session.add(job)
|
||||
db_session.commit()
|
||||
|
||||
monkeypatch.setattr(
|
||||
"app.services.metube_client.MeTubeClient.delete_download", lambda self, metube_job_id: {"status": "ok"}
|
||||
)
|
||||
monkeypatch.setattr("app.services.metube_client.MeTubeClient.check_media", lambda self, url: True)
|
||||
|
||||
resp = client.delete(f"/api/videos/{video.youtube_video_id}/download")
|
||||
|
||||
assert resp.status_code == 409
|
||||
|
||||
db_session.refresh(job)
|
||||
assert job.status == "completed"
|
||||
assert job.media_url == "http://metube.local/download/f.mp4"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue