fix: 修复自由创作首尾帧上传人脸图不通过问题
This commit is contained in:
@@ -2,12 +2,13 @@ from io import BytesIO
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import patch
|
||||
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.test import TestCase
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from apps.accounts.models import Team, TeamMember, User
|
||||
|
||||
from .models import Asset, Model
|
||||
from .models import Asset, FreeAsset, FreeAssetGroup, Model
|
||||
|
||||
|
||||
def _mk_team(username, team_name):
|
||||
@@ -151,6 +152,73 @@ class AssetTrashApiTests(TestCase):
|
||||
self.assertEqual(self.client.post(f"/api/assets/{self.live.id}/restore/").status_code, 404)
|
||||
|
||||
|
||||
class FreeAssetQuickUploadTests(TestCase):
|
||||
"""人物素材库快捷上传:自动默认组,但底层仍走 FreeAssetGroup / FreeAsset。"""
|
||||
|
||||
def setUp(self):
|
||||
self.user, self.team = _mk_team("ufq", "TeamFQ")
|
||||
self.client = APIClient()
|
||||
self.client.force_authenticate(self.user)
|
||||
self.stored = SimpleNamespace(object_key="teams/x/free-create/library/a.png", bucket="b", content_type="image/png", size_bytes=10)
|
||||
|
||||
def _image(self, name="a.png"):
|
||||
return SimpleUploadedFile(name, b"img", content_type="image/png")
|
||||
|
||||
@patch("apps.assets.free_library.assets_client.is_enabled", return_value=True)
|
||||
@patch("apps.assets.free_library.assets_client.create_asset_group", return_value="Group-1")
|
||||
@patch("apps.assets.free_library.assets_client.create_asset", return_value="Asset-1")
|
||||
@patch("apps.assets.free_library.TosStorage")
|
||||
def test_quick_upload_creates_default_group(self, storage_cls, create_asset, create_group, _enabled):
|
||||
storage = storage_cls.return_value
|
||||
storage.upload_fileobj.return_value = self.stored
|
||||
storage.public_url.return_value = "http://tos/a.png"
|
||||
|
||||
res = self.client.post("/api/assets/free-assets/quick-upload/", {"file": self._image()}, format="multipart")
|
||||
self.assertEqual(res.status_code, 201)
|
||||
group = FreeAssetGroup.objects.get(team=self.team)
|
||||
self.assertEqual(group.name, "默认素材")
|
||||
self.assertEqual(group.remote_group_id, "Group-1")
|
||||
self.assertEqual(group.assets.count(), 1)
|
||||
asset = group.assets.get()
|
||||
self.assertEqual(asset.asset_type, FreeAsset.Type.IMAGE)
|
||||
self.assertEqual(asset.status, FreeAsset.Status.PROCESSING)
|
||||
create_group.assert_called_once()
|
||||
create_asset.assert_called_once_with("Group-1", "http://tos/a.png", name="a.png", asset_type=FreeAsset.Type.IMAGE)
|
||||
self.assertEqual(res.json()["group"]["id"], str(group.id))
|
||||
|
||||
@patch("apps.assets.free_library.assets_client.is_enabled", return_value=True)
|
||||
@patch("apps.assets.free_library.assets_client.create_asset_group", return_value="Group-1")
|
||||
@patch("apps.assets.free_library.assets_client.create_asset", side_effect=["Asset-1", "Asset-2"])
|
||||
@patch("apps.assets.free_library.TosStorage")
|
||||
def test_quick_upload_reuses_default_group(self, storage_cls, create_asset, create_group, _enabled):
|
||||
storage = storage_cls.return_value
|
||||
storage.upload_fileobj.return_value = self.stored
|
||||
storage.public_url.return_value = "http://tos/a.png"
|
||||
|
||||
first = self.client.post("/api/assets/free-assets/quick-upload/", {"file": self._image("a.png")}, format="multipart")
|
||||
second = self.client.post("/api/assets/free-assets/quick-upload/", {"file": self._image("b.png")}, format="multipart")
|
||||
self.assertEqual(first.status_code, 201)
|
||||
self.assertEqual(second.status_code, 201)
|
||||
self.assertEqual(FreeAssetGroup.objects.filter(team=self.team).count(), 1)
|
||||
self.assertEqual(FreeAsset.objects.filter(group__team=self.team).count(), 2)
|
||||
create_group.assert_called_once()
|
||||
self.assertEqual(create_asset.call_count, 2)
|
||||
|
||||
@patch("apps.assets.free_library.assets_client.is_enabled", return_value=True)
|
||||
@patch("apps.assets.free_library.assets_client.create_asset_group", return_value="Group-1")
|
||||
@patch("apps.assets.free_library.TosStorage")
|
||||
def test_quick_upload_rejects_non_image(self, storage_cls, create_group, _enabled):
|
||||
res = self.client.post(
|
||||
"/api/assets/free-assets/quick-upload/",
|
||||
{"file": SimpleUploadedFile("v.mp4", b"video", content_type="video/mp4")},
|
||||
format="multipart",
|
||||
)
|
||||
self.assertEqual(res.status_code, 400)
|
||||
self.assertIn("仅支持图片", res.json()["detail"])
|
||||
self.assertFalse(storage_cls.return_value.upload_fileobj.called)
|
||||
create_group.assert_called_once()
|
||||
|
||||
|
||||
class VideoPacksTests(TestCase):
|
||||
"""视频成品按项目素材包分组(与导出同源:取 VideoSegment.adopted_version 的真实视频资产)。"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user