fix: 修复图片创作删除与垃圾桶预览
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user