fix: 自由创作分类入库区分视频与图片展示
This commit is contained in:
@@ -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。"""
|
||||
|
||||
Reference in New Issue
Block a user