""" T065 — DELETE /api/v1/images/{id} → 204; subsequent GET returns 404 T066 — DELETE verifies MinIO object is removed T067 — DELETE of unknown ID → 404 image_not_found """ import io import uuid import pytest from PIL import Image as PILImage def _minimal_jpeg_v2() -> bytes: # Slightly different from test_upload.py to avoid cross-test dedup return ( b"\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x01" b"\xff\xd9" ) @pytest.mark.asyncio async def test_delete_removes_record(authed_client): client, token = authed_client headers = {"Authorization": f"Bearer {token}"} data = _minimal_jpeg_v2() upload = await client.post( "/api/v1/images", files={"file": ("del-test.jpg", io.BytesIO(data), "image/jpeg")}, headers=headers, ) image_id = upload.json()["id"] delete_resp = await client.delete(f"/api/v1/images/{image_id}", headers=headers) assert delete_resp.status_code == 204 get_resp = await client.get(f"/api/v1/images/{image_id}") assert get_resp.status_code == 404 assert get_resp.json()["code"] == "image_not_found" @pytest.mark.asyncio async def test_delete_removes_storage_object(authed_client): client, token = authed_client headers = {"Authorization": f"Bearer {token}"} data = _minimal_jpeg_v2() + b"\x00" upload = await client.post( "/api/v1/images", files={"file": ("del-storage-test.jpg", io.BytesIO(data), "image/jpeg")}, headers=headers, ) assert upload.status_code in (200, 201) image_id = upload.json()["id"] delete_resp = await client.delete(f"/api/v1/images/{image_id}", headers=headers) assert delete_resp.status_code == 204 # Confirm storage redirect no longer works (404 since record is gone) file_resp = await client.get(f"/api/v1/images/{image_id}/file") assert file_resp.status_code == 404 @pytest.mark.asyncio async def test_delete_unknown_id_returns_404(authed_client): client, token = authed_client response = await client.delete( f"/api/v1/images/{uuid.uuid4()}", headers={"Authorization": f"Bearer {token}"}, ) assert response.status_code == 404 body = response.json() assert body["code"] == "image_not_found" @pytest.mark.asyncio async def test_delete_removes_thumbnail(authed_client): client, token = authed_client headers = {"Authorization": f"Bearer {token}"} buf = io.BytesIO() PILImage.new("RGB", (200, 150), color=(60, 90, 120)).save(buf, format="JPEG") data = buf.getvalue() upload = await client.post( "/api/v1/images", files={"file": ("thumb-del.jpg", io.BytesIO(data), "image/jpeg")}, headers=headers, ) assert upload.status_code == 201 image_id = upload.json()["id"] assert upload.json()["thumbnail_key"] is not None delete_resp = await client.delete(f"/api/v1/images/{image_id}", headers=headers) assert delete_resp.status_code == 204 thumb_resp = await client.get(f"/api/v1/images/{image_id}/thumbnail") assert thumb_resp.status_code == 404 assert thumb_resp.json()["code"] == "image_not_found"