248fd5408c
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Frontend Lint (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 1m4s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 1m6s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 1m53s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 2m55s
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
AI Code Review / AI Code Review (pull_request) Successful in 51s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (push) Successful in 4m32s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 54s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m1s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m16s
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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m31s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m55s
CI/CD Pipeline / Integration Tests (push) Successful in 2m24s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m6s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m4s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 7m58s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m38s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 3m36s
CI/CD Pipeline / Unit Tests (push) Successful in 9m9s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / CI Gate (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m8s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 7m40s
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 / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 7s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 24s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 27s
CI/CD Pipeline / Build Staging API Image (push) Successful in 16m54s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Failing after 1m59s
CI/CD Pipeline / Staging API Integration Tests (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (push) Has been skipped
CI/CD Pipeline / Canary Release to Production (push) Has been skipped
131 lines
4.2 KiB
Python
131 lines
4.2 KiB
Python
"""预览数量 preview_count 校验测试。
|
||
|
||
验证 CreatePreviewGenerationTaskRequest 中 preview_count 字段:
|
||
- 默认值为 1
|
||
- 范围 1-10
|
||
- 超出范围报错
|
||
- Worker 并发配置验证
|
||
"""
|
||
|
||
import pytest
|
||
|
||
|
||
class TestPreviewCountValidation:
|
||
"""preview_count 字段校验"""
|
||
|
||
def test_default_preview_count_is_1(self):
|
||
"""默认 preview_count 为 1"""
|
||
from app.schemas.generation_task import CreatePreviewGenerationTaskRequest
|
||
|
||
req = CreatePreviewGenerationTaskRequest(
|
||
template_id="tmpl_123",
|
||
asset_ids=["asset_1"],
|
||
)
|
||
assert req.preview_count == 1
|
||
|
||
def test_preview_count_min_valid(self):
|
||
"""preview_count=1 合法"""
|
||
from app.schemas.generation_task import CreatePreviewGenerationTaskRequest
|
||
|
||
req = CreatePreviewGenerationTaskRequest(
|
||
template_id="tmpl_123",
|
||
asset_ids=["asset_1"],
|
||
preview_count=1,
|
||
)
|
||
assert req.preview_count == 1
|
||
|
||
def test_preview_count_max_valid(self):
|
||
"""preview_count=10 合法(上限)"""
|
||
from app.schemas.generation_task import CreatePreviewGenerationTaskRequest
|
||
|
||
req = CreatePreviewGenerationTaskRequest(
|
||
template_id="tmpl_123",
|
||
asset_ids=["asset_1"],
|
||
preview_count=10,
|
||
)
|
||
assert req.preview_count == 10
|
||
|
||
def test_preview_count_middle_value(self):
|
||
"""preview_count=5 合法"""
|
||
from app.schemas.generation_task import CreatePreviewGenerationTaskRequest
|
||
|
||
req = CreatePreviewGenerationTaskRequest(
|
||
template_id="tmpl_123",
|
||
asset_ids=["asset_1"],
|
||
preview_count=5,
|
||
)
|
||
assert req.preview_count == 5
|
||
|
||
def test_preview_count_zero_raises(self):
|
||
"""preview_count=0 报错(低于下限)"""
|
||
from app.schemas.generation_task import CreatePreviewGenerationTaskRequest
|
||
from pydantic import ValidationError
|
||
|
||
with pytest.raises(ValidationError):
|
||
CreatePreviewGenerationTaskRequest(
|
||
template_id="tmpl_123",
|
||
asset_ids=["asset_1"],
|
||
preview_count=0,
|
||
)
|
||
|
||
def test_preview_count_negative_raises(self):
|
||
"""preview_count=-1 报错"""
|
||
from app.schemas.generation_task import CreatePreviewGenerationTaskRequest
|
||
from pydantic import ValidationError
|
||
|
||
with pytest.raises(ValidationError):
|
||
CreatePreviewGenerationTaskRequest(
|
||
template_id="tmpl_123",
|
||
asset_ids=["asset_1"],
|
||
preview_count=-1,
|
||
)
|
||
|
||
def test_preview_count_exceeds_max_raises(self):
|
||
"""preview_count=11 报错(超过上限 10)"""
|
||
from app.schemas.generation_task import CreatePreviewGenerationTaskRequest
|
||
from pydantic import ValidationError
|
||
|
||
with pytest.raises(ValidationError):
|
||
CreatePreviewGenerationTaskRequest(
|
||
template_id="tmpl_123",
|
||
asset_ids=["asset_1"],
|
||
preview_count=11,
|
||
)
|
||
|
||
def test_preview_count_large_value_raises(self):
|
||
"""preview_count=100 报错"""
|
||
from app.schemas.generation_task import CreatePreviewGenerationTaskRequest
|
||
from pydantic import ValidationError
|
||
|
||
with pytest.raises(ValidationError):
|
||
CreatePreviewGenerationTaskRequest(
|
||
template_id="tmpl_123",
|
||
asset_ids=["asset_1"],
|
||
preview_count=100,
|
||
)
|
||
|
||
|
||
class TestWorkerConcurrencyConfig:
|
||
"""Worker 并发配置验证"""
|
||
|
||
def test_default_worker_concurrency_is_4(self):
|
||
"""Worker 默认并发为 4"""
|
||
from packages.config import WorkerSettings
|
||
|
||
settings = WorkerSettings()
|
||
assert settings.worker_concurrency == 4
|
||
|
||
def test_worker_concurrency_configurable(self):
|
||
"""Worker 并发可通过环境变量配置"""
|
||
from packages.config import WorkerSettings
|
||
|
||
settings = WorkerSettings(worker_concurrency=8)
|
||
assert settings.worker_concurrency == 8
|
||
|
||
def test_worker_concurrency_is_int(self):
|
||
"""Worker 并发为整数类型"""
|
||
from packages.config import WorkerSettings
|
||
|
||
settings = WorkerSettings()
|
||
assert isinstance(settings.worker_concurrency, int)
|