Files
xiaoxia-saas/tests/unit/test_render_adapter_pure.py
T
CI Bot 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
style: auto-format with black + isort + prettier
2026-07-25 00:16:10 +00:00

154 lines
5.0 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""渲染适配器纯逻辑测试 — _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