7a72cfd709
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 2m9s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 2m19s
CI/CD Pipeline / Validate - Code Quality (push) Failing after 3m10s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 3m7s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 3m7s
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 1m17s
CI/CD Pipeline / Frontend Lint (push) Successful in 3m37s
CI/CD Pipeline / Integration Tests (push) Successful in 2m18s
CI/CD Pipeline / Unit Tests (push) Failing after 4m59s
CI/CD Pipeline / Build Staging API Image (push) Successful in 8m39s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 3m25s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 42s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 27m2s
CI/CD Pipeline / Staging API Integration Tests (push) Failing after 30m15s
154 lines
5.0 KiB
Python
Executable File
154 lines
5.0 KiB
Python
Executable File
"""渲染适配器纯逻辑测试 — _parse_resolution 等纯函数."""
|
||
|
||
from __future__ import annotations
|
||
|
||
from pathlib import Path
|
||
|
||
import pytest
|
||
from video_processing.render_adapter import (
|
||
DEFAULT_OUTPUT_HEIGHT,
|
||
DEFAULT_OUTPUT_WIDTH,
|
||
RenderAdapterResult,
|
||
_parse_resolution,
|
||
)
|
||
|
||
|
||
class TestParseResolution:
|
||
"""_parse_resolution 分辨率字符串解析测试."""
|
||
|
||
def test_standard_format(self):
|
||
"""标准 宽x高 格式."""
|
||
w, h = _parse_resolution("1920x1080")
|
||
assert w == 1920
|
||
assert h == 1080
|
||
|
||
def test_portrait_format(self):
|
||
"""竖屏格式."""
|
||
w, h = _parse_resolution("1080x1920")
|
||
assert w == 1080
|
||
assert h == 1920
|
||
|
||
def test_lowercase_x(self):
|
||
"""小写x."""
|
||
w, h = _parse_resolution("1280x720")
|
||
assert w == 1280
|
||
assert h == 720
|
||
|
||
def test_uppercase_x_returns_default(self):
|
||
"""大写X不匹配小写x → 返回默认值(只支持小写x)."""
|
||
w, h = _parse_resolution("1280X720")
|
||
assert w == DEFAULT_OUTPUT_WIDTH
|
||
assert h == DEFAULT_OUTPUT_HEIGHT
|
||
|
||
def test_none_returns_default(self):
|
||
"""None返回默认值."""
|
||
w, h = _parse_resolution(None)
|
||
assert w == DEFAULT_OUTPUT_WIDTH
|
||
assert h == DEFAULT_OUTPUT_HEIGHT
|
||
|
||
def test_empty_string_returns_default(self):
|
||
"""空字符串返回默认值."""
|
||
w, h = _parse_resolution("")
|
||
assert w == DEFAULT_OUTPUT_WIDTH
|
||
assert h == DEFAULT_OUTPUT_HEIGHT
|
||
|
||
def test_no_x_returns_default(self):
|
||
"""没有x的字符串返回默认值."""
|
||
w, h = _parse_resolution("1080p")
|
||
assert w == DEFAULT_OUTPUT_WIDTH
|
||
assert h == DEFAULT_OUTPUT_HEIGHT
|
||
|
||
def test_invalid_width_returns_default(self):
|
||
"""宽度无效返回默认值."""
|
||
w, h = _parse_resolution("abcx1080")
|
||
assert w == DEFAULT_OUTPUT_WIDTH
|
||
assert h == DEFAULT_OUTPUT_HEIGHT
|
||
|
||
def test_invalid_height_returns_default(self):
|
||
"""高度无效返回默认值."""
|
||
w, h = _parse_resolution("1920xabc")
|
||
assert w == DEFAULT_OUTPUT_WIDTH
|
||
assert h == DEFAULT_OUTPUT_HEIGHT
|
||
|
||
def test_zero_width_returns_default(self):
|
||
"""宽度为0返回默认值."""
|
||
w, h = _parse_resolution("0x1080")
|
||
assert w == DEFAULT_OUTPUT_WIDTH
|
||
assert h == DEFAULT_OUTPUT_HEIGHT
|
||
|
||
def test_zero_height_returns_default(self):
|
||
"""高度为0返回默认值."""
|
||
w, h = _parse_resolution("1920x0")
|
||
assert w == DEFAULT_OUTPUT_WIDTH
|
||
assert h == DEFAULT_OUTPUT_HEIGHT
|
||
|
||
def test_negative_width_returns_default(self):
|
||
"""负宽度返回默认值."""
|
||
w, h = _parse_resolution("-100x1080")
|
||
assert w == DEFAULT_OUTPUT_WIDTH
|
||
assert h == DEFAULT_OUTPUT_HEIGHT
|
||
|
||
def test_with_spaces(self):
|
||
"""带空格的能正确strip."""
|
||
w, h = _parse_resolution(" 1920 x 1080 ")
|
||
assert w == 1920
|
||
assert h == 1080
|
||
|
||
def test_multiple_x_returns_default(self):
|
||
"""多个x的字符串解析失败 → 返回默认值."""
|
||
w, h = _parse_resolution("100x200x300")
|
||
# split("x", 1)后h部分是"200x300",int失败返回默认
|
||
assert w == DEFAULT_OUTPUT_WIDTH
|
||
assert h == DEFAULT_OUTPUT_HEIGHT
|
||
|
||
def test_square_resolution(self):
|
||
"""正方形分辨率."""
|
||
w, h = _parse_resolution("512x512")
|
||
assert w == 512
|
||
assert h == 512
|
||
|
||
def test_default_values_are_reasonable(self):
|
||
"""默认值合理(竖屏短视频)."""
|
||
assert DEFAULT_OUTPUT_WIDTH > 0
|
||
assert DEFAULT_OUTPUT_HEIGHT > 0
|
||
# 默认是竖屏 1080x1920
|
||
assert DEFAULT_OUTPUT_WIDTH == 1080
|
||
assert DEFAULT_OUTPUT_HEIGHT == 1920
|
||
|
||
|
||
class TestRenderAdapterResult:
|
||
"""RenderAdapterResult 数据结构测试."""
|
||
|
||
def test_failure_defaults(self):
|
||
"""失败结果默认值."""
|
||
result = RenderAdapterResult(success=False)
|
||
assert result.success is False
|
||
assert result.output_url == ""
|
||
assert result.output_path is None
|
||
assert result.thumbnail_url == ""
|
||
assert result.duration == 0.0
|
||
assert result.file_size == 0
|
||
assert result.width == 0
|
||
assert result.height == 0
|
||
|
||
def test_success_with_values(self):
|
||
"""成功结果带完整值."""
|
||
result = RenderAdapterResult(
|
||
success=True,
|
||
output_url="https://example.com/output.mp4",
|
||
output_path=Path("/tmp/output.mp4"),
|
||
thumbnail_url="https://example.com/thumb.jpg",
|
||
duration=30.5,
|
||
file_size=1024000,
|
||
width=1080,
|
||
height=1920,
|
||
)
|
||
assert result.success is True
|
||
assert result.output_url == "https://example.com/output.mp4"
|
||
assert result.output_path == Path("/tmp/output.mp4")
|
||
assert result.thumbnail_url == "https://example.com/thumb.jpg"
|
||
assert result.duration == pytest.approx(30.5)
|
||
assert result.file_size == 1024000
|
||
assert result.width == 1080
|
||
assert result.height == 1920
|