fix: 完善商品—模特库-视频项目-自由创作等删除先进垃圾桶及可恢复等流程
This commit is contained in:
@@ -5,7 +5,7 @@ from rest_framework.test import APIClient
|
||||
|
||||
from apps.accounts.models import Team, TeamMember, User
|
||||
from apps.ai.models import AITask, ModelConfig, ModelProvider
|
||||
from apps.assets.models import Asset
|
||||
from apps.assets.models import Asset, AssetFile
|
||||
from apps.billing.models import CreditAccount, CreditLedger
|
||||
from apps.products.models import Product
|
||||
from apps.projects.models import (
|
||||
@@ -88,6 +88,66 @@ class ProjectApiTests(TestCase):
|
||||
)
|
||||
self.assertTrue(VideoSegment.objects.filter(project=project).exists())
|
||||
|
||||
def test_delete_restore_and_purge_project_trash(self):
|
||||
project = Project.objects.create(team=self.team, created_by=self.user, product=self.product, name="Trash Project")
|
||||
segment = VideoSegment.objects.create(project=project, sort_order=0, target_duration_seconds=15)
|
||||
asset = Asset.objects.create(
|
||||
team=self.team,
|
||||
created_by=self.user,
|
||||
name="项目视频片段",
|
||||
asset_type=Asset.Type.VIDEO,
|
||||
source=Asset.Source.AI_GENERATED,
|
||||
category=Asset.Category.VIDEO_CLIP,
|
||||
)
|
||||
asset_file = AssetFile.objects.create(
|
||||
asset=asset,
|
||||
object_key="projects/clip.mp4",
|
||||
bucket="test",
|
||||
content_type="video/mp4",
|
||||
is_primary=True,
|
||||
)
|
||||
version = VideoSegmentVersion.objects.create(video_segment=segment, asset=asset, is_adopted=True)
|
||||
segment.adopted_version = version
|
||||
segment.save(update_fields=["adopted_version"])
|
||||
|
||||
delete = self.client.delete(f"/api/projects/{project.id}/")
|
||||
self.assertEqual(delete.status_code, 204)
|
||||
project.refresh_from_db()
|
||||
self.assertTrue(project.is_deleted)
|
||||
self.assertIsNone(project.purged_at)
|
||||
list_ids = [p["id"] for p in self.client.get("/api/projects/").json()["results"]]
|
||||
self.assertNotIn(str(project.id), list_ids)
|
||||
trash_ids = [p["id"] for p in self.client.get("/api/projects/trash/").json()["results"]]
|
||||
self.assertIn(str(project.id), trash_ids)
|
||||
asset.refresh_from_db()
|
||||
self.assertFalse(asset.is_deleted)
|
||||
self.assertIsNone(asset.purged_at)
|
||||
|
||||
restore = self.client.post(f"/api/projects/{project.id}/restore/")
|
||||
self.assertEqual(restore.status_code, 200)
|
||||
project.refresh_from_db()
|
||||
self.assertFalse(project.is_deleted)
|
||||
self.assertIsNone(project.purged_at)
|
||||
list_ids = [p["id"] for p in self.client.get("/api/projects/").json()["results"]]
|
||||
self.assertIn(str(project.id), list_ids)
|
||||
self.assertTrue(VideoSegmentVersion.objects.filter(id=version.id).exists())
|
||||
|
||||
self.client.delete(f"/api/projects/{project.id}/")
|
||||
purge = self.client.delete(f"/api/projects/{project.id}/purge/")
|
||||
self.assertEqual(purge.status_code, 204)
|
||||
project.refresh_from_db()
|
||||
self.assertTrue(project.is_deleted)
|
||||
self.assertIsNotNone(project.purged_at)
|
||||
self.assertTrue(Project.objects.filter(id=project.id).exists())
|
||||
self.assertTrue(VideoSegment.objects.filter(project=project).exists())
|
||||
self.assertTrue(VideoSegmentVersion.objects.filter(id=version.id).exists())
|
||||
asset.refresh_from_db()
|
||||
self.assertFalse(asset.is_deleted)
|
||||
self.assertIsNone(asset.purged_at)
|
||||
self.assertTrue(AssetFile.objects.filter(id=asset_file.id).exists())
|
||||
trash_ids = [p["id"] for p in self.client.get("/api/projects/trash/").json()["results"]]
|
||||
self.assertNotIn(str(project.id), trash_ids)
|
||||
|
||||
@patch("apps.ai.services.VolcanoArkProvider")
|
||||
def test_rerun_script_segment_via_agent_rewrites_one_and_charges_once(self, provider_cls):
|
||||
"""单镜重跑改走 agent:读结构化全脚本,只重写目标镜、保留其余镜,落新版本,计费一次。"""
|
||||
|
||||
Reference in New Issue
Block a user