fix: 自由创作分类入库区分视频与图片展示

This commit is contained in:
hh
2026-07-07 18:39:01 +08:00
parent 45ff7838d8
commit ff723b4281
7 changed files with 228 additions and 22 deletions
+78
View File
@@ -220,6 +220,84 @@ class AssetBatchesTests(TestCase):
self.assertEqual(self.client.get("/api/assets/summary/").json()["tryon"], 2)
class FreeCreateSplitTabTests(TestCase):
"""Free create assets share category=free_create; tabs split by asset_type."""
def setUp(self):
self.user, self.team = _mk_team("ufc", "TeamFC")
self.client = APIClient()
self.client.force_authenticate(self.user)
self.image1 = Asset.objects.create(
team=self.team,
name="free image 1",
asset_type=Asset.Type.IMAGE,
source=Asset.Source.AI_GENERATED,
category=Asset.Category.FREE_CREATE,
metadata={"batch_id": "IMG-B1"},
)
self.image2 = Asset.objects.create(
team=self.team,
name="free image 2",
asset_type=Asset.Type.IMAGE,
source=Asset.Source.AI_GENERATED,
category=Asset.Category.FREE_CREATE,
metadata={"batch_id": "IMG-B1"},
)
self.video = Asset.objects.create(
team=self.team,
name="free video",
asset_type=Asset.Type.VIDEO,
source=Asset.Source.AI_GENERATED,
category=Asset.Category.FREE_CREATE,
metadata={"feature": "free_video"},
)
def test_image_creations_batches_exclude_videos(self):
data = self.client.get("/api/assets/batches/?tab=image_creations&page_size=10").json()
self.assertEqual(data["count"], 1)
self.assertEqual(data["results"][0]["count"], 2)
self.assertEqual({a["asset_type"] for a in data["results"][0]["items"]}, {"image"})
def test_video_creations_list_excludes_images(self):
data = self.client.get("/api/assets/?tab=video_creations&page_size=10").json()
self.assertEqual(data["count"], 1)
self.assertEqual(data["results"][0]["id"], str(self.video.id))
self.assertEqual(data["results"][0]["asset_type"], "video")
def test_summary_exposes_split_counts_and_keeps_legacy_creations(self):
data = self.client.get("/api/assets/summary/").json()
self.assertEqual(data["image_creations"], 1)
self.assertEqual(data["video_creations"], 1)
self.assertEqual(data["creations"], 2)
def test_delete_and_restore_video_returns_to_video_creations_tab(self):
res = self.client.delete(f"/api/assets/{self.video.id}/")
self.assertEqual(res.status_code, 204)
self.video.refresh_from_db()
self.assertTrue(self.video.is_deleted)
video_tab = self.client.get("/api/assets/?tab=video_creations&page_size=10").json()
self.assertEqual(video_tab["count"], 0)
summary = self.client.get("/api/assets/summary/").json()
self.assertEqual(summary["video_creations"], 0)
self.assertEqual(summary["image_creations"], 1)
trash_ids = {a["id"] for a in self.client.get("/api/assets/trash/").json()["results"]}
self.assertIn(str(self.video.id), trash_ids)
restore = self.client.post(f"/api/assets/{self.video.id}/restore/")
self.assertEqual(restore.status_code, 200)
self.video.refresh_from_db()
self.assertFalse(self.video.is_deleted)
self.assertEqual(self.video.category, Asset.Category.FREE_CREATE)
self.assertEqual(self.video.asset_type, Asset.Type.VIDEO)
video_tab = self.client.get("/api/assets/?tab=video_creations&page_size=10").json()
self.assertEqual(video_tab["count"], 1)
self.assertEqual(video_tab["results"][0]["id"], str(self.video.id))
image_batches = self.client.get("/api/assets/batches/?tab=image_creations&page_size=10").json()
self.assertEqual({a["asset_type"] for a in image_batches["results"][0]["items"]}, {"image"})
class FacetsProductsTests(TestCase):
"""facets 返回本 tab 下真实关联的商品(?product= 三路之一:metadata.product_id 等),
并按 tab 隔离、team 隔离、只回 id/title。"""