fix(tests): 修复oss_helpers测试 — 改用patch oss_settings替代patch os.environ + black格式化
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 19s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 48s
AI Code Review / AI Code Review (pull_request) Successful in 59s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m2s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m43s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 3m15s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m27s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 4m5s

This commit is contained in:
CI Bot
2026-07-17 15:33:18 +08:00
parent 3b96e0c6f6
commit cefd97966a
3 changed files with 51 additions and 130 deletions
@@ -295,7 +295,9 @@ class RenderAdapter:
except Exception:
logger.exception("进度回调失败")
def _download_assets(self, clips: list[EditPlanClip], work_dir: Path) -> tuple[dict[str, Path], list[str], list[str]]:
def _download_assets(
self, clips: list[EditPlanClip], work_dir: Path
) -> tuple[dict[str, Path], list[str], list[str]]:
"""下载片段素材到本地。
先通过 asset_id 批量查询 assets 表获取 file_urlOSS存储路径),
+17 -43
View File
@@ -9,7 +9,6 @@
from __future__ import annotations
import os
import tempfile
import time
from pathlib import Path
@@ -27,14 +26,9 @@ class TestOSSBucketConnectTimeout:
mock_bucket_instance = MagicMock()
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket_instance) as mock_bucket_cls,
@@ -53,7 +47,7 @@ class TestOSSBucketConnectTimeout:
"""OSS 配置缺失时返回 None."""
from video_processing.oss_helpers import oss_bucket
with patch.dict(os.environ, {}, clear=True):
with patch("video_processing.oss_helpers.oss_settings", return_value=None):
bucket = oss_bucket()
assert bucket is None
@@ -80,14 +74,9 @@ class TestUploadToOSSMultipart:
mock_bucket = MagicMock()
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket),
@@ -113,14 +102,9 @@ class TestUploadToOSSMultipart:
mock_bucket = MagicMock()
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket),
@@ -167,14 +151,9 @@ class TestUploadToOSSTimeout:
try:
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket),
@@ -200,14 +179,9 @@ class TestUploadToOSSTimeout:
try:
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket),
@@ -227,7 +201,7 @@ class TestUploadToOSSTimeout:
file_path = Path(small_file.name)
try:
with patch.dict(os.environ, {}, clear=True):
with patch("video_processing.oss_helpers.oss_settings", return_value=None):
url = upload_to_oss(file_path, "test/noconfig.mp4")
assert url is None
finally:
+31 -86
View File
@@ -8,7 +8,7 @@
from __future__ import annotations
import os
from pathlib import Path
from unittest.mock import MagicMock, patch
# ── oss_bucket endpoint scheme 修复 ──────────────────────────────────────────
@@ -23,20 +23,13 @@ class TestOSSBucketEndpointScheme:
mock_bucket_instance = MagicMock()
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket_instance) as mock_bucket_cls,
):
# 清除缓存,确保重新创建
bucket = oss_bucket()
assert bucket is mock_bucket_instance
@@ -52,19 +45,13 @@ class TestOSSBucketEndpointScheme:
mock_bucket_instance = MagicMock()
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "https://oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "https://oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket_instance) as mock_bucket_cls,
):
oss_bucket()
call_args = mock_bucket_cls.call_args
@@ -79,19 +66,13 @@ class TestOSSBucketEndpointScheme:
mock_bucket_instance = MagicMock()
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "http://oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "http://oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket_instance) as mock_bucket_cls,
):
oss_bucket()
call_args = mock_bucket_cls.call_args
@@ -102,17 +83,7 @@ class TestOSSBucketEndpointScheme:
"""凭证缺失时返回 None."""
from video_processing.oss_helpers import oss_bucket
with patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "",
"OSS_ACCESS_KEY_SECRET": "",
"OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
clear=True,
):
with patch("video_processing.oss_helpers.oss_settings", return_value=None):
bucket = oss_bucket()
assert bucket is None
@@ -128,17 +99,15 @@ class TestGetSignedDownloadUrl:
from video_processing.oss_helpers import get_signed_download_url
mock_bucket = MagicMock()
mock_bucket.sign_url.return_value = "https://test-bucket.oss-cn-hangzhou.aliyuncs.com/generated/test.mp4?OSSAccessKeyId=xxx&Expires=xxx&Signature=xxx"
mock_bucket.sign_url.return_value = (
"https://test-bucket.oss-cn-hangzhou.aliyuncs.com/generated/test.mp4"
"?OSSAccessKeyId=xxx&Expires=xxx&Signature=xxx"
)
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket),
@@ -159,14 +128,9 @@ class TestGetSignedDownloadUrl:
)
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket),
@@ -183,7 +147,7 @@ class TestGetSignedDownloadUrl:
"""bucket 为 None 时返回 None(不抛异常)."""
from video_processing.oss_helpers import get_signed_download_url
with patch.dict(os.environ, {}, clear=True):
with patch("video_processing.oss_helpers.oss_settings", return_value=None):
result = get_signed_download_url("generated/test.mp4")
assert result is None
@@ -195,14 +159,9 @@ class TestGetSignedDownloadUrl:
mock_bucket.sign_url.side_effect = Exception("sign failed")
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket),
@@ -224,17 +183,10 @@ class TestUploadToOSSReturnsHTTPS:
mock_bucket = MagicMock()
mock_bucket.put_object_from_file = MagicMock()
from pathlib import Path
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket),
@@ -252,17 +204,10 @@ class TestUploadToOSSReturnsHTTPS:
mock_bucket = MagicMock()
mock_bucket.put_object_from_file = MagicMock()
from pathlib import Path
with (
patch.dict(
os.environ,
{
"OSS_ACCESS_KEY_ID": "test-key",
"OSS_ACCESS_KEY_SECRET": "test-secret",
"OSS_ENDPOINT": "https://oss-cn-hangzhou.aliyuncs.com",
"OSS_BUCKET_NAME": "test-bucket",
},
patch(
"video_processing.oss_helpers.oss_settings",
return_value=("test-key", "test-secret", "https://oss-cn-hangzhou.aliyuncs.com", "test-bucket"),
),
patch("video_processing.oss_helpers.oss2.Auth"),
patch("video_processing.oss_helpers.oss2.Bucket", return_value=mock_bucket),