7e88b01e98
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 11s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m40s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m31s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 29s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m13s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 25s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 31s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 41s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m2s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m55s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m11s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m21s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m54s
AI Code Review / AI Code Review (pull_request) Successful in 8m1s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 12s
- test_render_subtitles.py: 35个(ASS颜色/对齐/样式构建/转义/时间格式化) - test_thumbnail_generator.py: 11个(时间格式化) - test_worker_settings.py: 14个(默认值/属性别名/类型) 3个模块的纯逻辑部分
84 lines
2.8 KiB
Python
Executable File
84 lines
2.8 KiB
Python
Executable File
"""
|
|
Worker 配置测试.
|
|
|
|
覆盖 WorkerSettings 默认值、属性别名等纯逻辑.
|
|
环境变量加载由集成测试覆盖.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from packages.config.worker_settings import WorkerSettings
|
|
|
|
|
|
class TestWorkerSettingsDefaults:
|
|
"""WorkerSettings 默认值."""
|
|
|
|
def test_worker_name_default(self):
|
|
settings = WorkerSettings()
|
|
assert settings.worker_name == "xiaoxia-saas-worker"
|
|
|
|
def test_worker_concurrency_default(self):
|
|
settings = WorkerSettings()
|
|
assert settings.worker_concurrency == 4
|
|
|
|
def test_worker_max_tasks_per_child_default(self):
|
|
settings = WorkerSettings()
|
|
assert settings.worker_max_tasks_per_child == 1000
|
|
|
|
def test_inherits_shared_settings(self):
|
|
"""继承 SharedSettings 的字段."""
|
|
settings = WorkerSettings()
|
|
# 验证至少有一些 SharedSettings 的字段存在
|
|
assert hasattr(settings, "celery_broker_url")
|
|
assert hasattr(settings, "celery_result_backend")
|
|
|
|
def test_custom_values(self):
|
|
settings = WorkerSettings(
|
|
worker_name="test-worker",
|
|
worker_concurrency=8,
|
|
worker_max_tasks_per_child=500,
|
|
)
|
|
assert settings.worker_name == "test-worker"
|
|
assert settings.worker_concurrency == 8
|
|
assert settings.worker_max_tasks_per_child == 500
|
|
|
|
|
|
class TestWorkerSettingsAliases:
|
|
"""Celery 字段名向后兼容别名."""
|
|
|
|
def test_broker_url_alias(self):
|
|
settings = WorkerSettings(celery_broker_url="redis://localhost:6379/0")
|
|
assert settings.broker_url == settings.celery_broker_url
|
|
assert settings.broker_url == "redis://localhost:6379/0"
|
|
|
|
def test_result_backend_alias(self):
|
|
settings = WorkerSettings(celery_result_backend="redis://localhost:6379/1")
|
|
assert settings.result_backend == settings.celery_result_backend
|
|
assert settings.result_backend == "redis://localhost:6379/1"
|
|
|
|
def test_broker_url_is_property(self):
|
|
"""broker_url 是 property,每次读取都返回最新值."""
|
|
settings = WorkerSettings()
|
|
# 验证是 property 描述符
|
|
assert isinstance(type(settings).broker_url, property)
|
|
assert isinstance(type(settings).result_backend, property)
|
|
|
|
|
|
class TestWorkerSettingsType:
|
|
"""类型验证."""
|
|
|
|
def test_worker_concurrency_is_int(self):
|
|
settings = WorkerSettings()
|
|
assert isinstance(settings.worker_concurrency, int)
|
|
|
|
def test_worker_max_tasks_is_int(self):
|
|
settings = WorkerSettings()
|
|
assert isinstance(settings.worker_max_tasks_per_child, int)
|
|
|
|
def test_worker_name_is_str(self):
|
|
settings = WorkerSettings()
|
|
assert isinstance(settings.worker_name, str)
|
|
assert len(settings.worker_name) > 0
|