fix: 修复图片创作删除与垃圾桶预览

This commit is contained in:
hh
2026-07-16 23:24:44 +08:00
parent 5fc316112c
commit 81fdb02517
7 changed files with 172 additions and 9 deletions
+67
View File
@@ -1128,6 +1128,73 @@ class ImageConversationTests(TestCase):
trash_ids = {c["id"] for c in self.client.get("/api/ai/image-conversations/trash/?mode=image").json()["results"]}
self.assertNotIn(str(conv.id), trash_ids)
def test_conversation_trash_uses_latest_generated_image_as_preview(self):
conv = ImageConversation.objects.create(
team=self.team,
created_by=self.user,
title="多资产对话",
mode=ImageConversation.Mode.IMAGE,
)
provider = ModelProvider.objects.create(name="conv-cover-provider", display_name="Conv Cover Provider")
model = ModelConfig.objects.create(
provider=provider,
name="conv-cover-model",
display_name="Conv Cover Model",
capability=ModelConfig.Capability.IMAGE,
)
assets = []
for index, preview_url in enumerate(("http://x/older.png", "http://x/latest.png")):
task = AITask.objects.create(
team=self.team,
created_by=self.user,
conversation=conv,
task_type=AITask.Type.PRODUCT_IMAGE,
status=AITask.Status.SUCCEEDED,
model_config=model,
idempotency_key=f"conv-cover-task-{index}",
)
asset = Asset.objects.create(
team=self.team,
created_by=self.user,
name=f"对话生成图 {index}",
asset_type=Asset.Type.IMAGE,
source=Asset.Source.AI_GENERATED,
category=Asset.Category.FREE_CREATE,
origin_task=task,
)
AssetFile.objects.create(
asset=asset,
object_key=f"free-create/{index}.png",
bucket="test",
content_type="image/png",
preview_url=preview_url,
is_primary=True,
)
assets.append(asset)
delete = self.client.delete(f"/api/ai/image-conversations/{conv.id}/")
self.assertIn(delete.status_code, (204, 200))
rows = self.client.get("/api/ai/image-conversations/trash/?mode=image").json()["results"]
self.assertEqual(len(rows), 1)
self.assertEqual(rows[0]["cover_preview_url"], "http://x/latest.png")
self.assertEqual(Asset.objects.filter(id__in=[asset.id for asset in assets]).count(), 2)
def test_conversation_trash_without_generated_image_has_empty_preview(self):
conv = ImageConversation.objects.create(
team=self.team,
created_by=self.user,
title="无图对话",
mode=ImageConversation.Mode.IMAGE,
)
delete = self.client.delete(f"/api/ai/image-conversations/{conv.id}/")
self.assertIn(delete.status_code, (204, 200))
rows = self.client.get("/api/ai/image-conversations/trash/?mode=image").json()["results"]
self.assertEqual(len(rows), 1)
self.assertEqual(rows[0]["cover_preview_url"], "")
def test_direct_asset_delete_hides_image_but_keeps_conversation(self):
conv = ImageConversation.objects.create(
team=self.team,