Files
xiaoxia-saas/tests/unit/test_worker_settings.py
T
CI Bot 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(P3-1): 第57波 worker层小工具+配置单测(+60)
- test_render_subtitles.py: 35个(ASS颜色/对齐/样式构建/转义/时间格式化)
- test_thumbnail_generator.py: 11个(时间格式化)
- test_worker_settings.py: 14个(默认值/属性别名/类型)

3个模块的纯逻辑部分
2026-07-24 21:00:01 +08:00

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