be0b4f4dac
CI/CD Pipeline / Check if frontend-only change (push) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (push) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (push) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (push) Has been cancelled
CI/CD Pipeline / PR Build API Image (push) Has been cancelled
CI/CD Pipeline / PR Build Web Image (push) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (push) Has been cancelled
CI/CD Pipeline / Build Staging API Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Build Production API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
82 lines
3.3 KiB
Python
Executable File
82 lines
3.3 KiB
Python
Executable File
"""GenerationTaskStatus 枚举兼容性测试。
|
|
|
|
验证历史脏数据(如 'success'/'done')不会导致枚举转换失败。
|
|
关联 Issue: #809 [Staging] E2E测试失败 - 模板生成接口返回500
|
|
"""
|
|
|
|
import pytest
|
|
|
|
from packages.domain.generation_task import GenerationTaskStatus
|
|
|
|
|
|
class TestGenerationTaskStatusNormalValues:
|
|
"""正常值应该正确映射。"""
|
|
|
|
def test_pending(self):
|
|
assert GenerationTaskStatus("pending") == GenerationTaskStatus.PENDING
|
|
|
|
def test_running(self):
|
|
assert GenerationTaskStatus("running") == GenerationTaskStatus.RUNNING
|
|
|
|
def test_completed(self):
|
|
assert GenerationTaskStatus("completed") == GenerationTaskStatus.COMPLETED
|
|
|
|
def test_failed(self):
|
|
assert GenerationTaskStatus("failed") == GenerationTaskStatus.FAILED
|
|
|
|
def test_cancelled(self):
|
|
assert GenerationTaskStatus("cancelled") == GenerationTaskStatus.CANCELLED
|
|
|
|
|
|
class TestGenerationTaskStatusHistoricalValues:
|
|
"""历史脏数据应该正确映射到对应状态,不抛异常。"""
|
|
|
|
@pytest.mark.parametrize("value", ["done", "success", "finished", "complete", "completed"])
|
|
def test_completed_like_values_map_to_completed(self, value):
|
|
assert GenerationTaskStatus(value) == GenerationTaskStatus.COMPLETED
|
|
|
|
@pytest.mark.parametrize("value", ["fail", "failed", "error", "err"])
|
|
def test_failed_like_values_map_to_failed(self, value):
|
|
assert GenerationTaskStatus(value) == GenerationTaskStatus.FAILED
|
|
|
|
@pytest.mark.parametrize("value", ["process", "processing", "run", "running", "in_progress"])
|
|
def test_running_like_values_map_to_running(self, value):
|
|
assert GenerationTaskStatus(value) == GenerationTaskStatus.RUNNING
|
|
|
|
@pytest.mark.parametrize("value", ["cancel", "cancelled", "canceled"])
|
|
def test_cancelled_like_values_map_to_cancelled(self, value):
|
|
assert GenerationTaskStatus(value) == GenerationTaskStatus.CANCELLED
|
|
|
|
@pytest.mark.parametrize("value", [" Done ", "SUCCESS", " failed "])
|
|
def test_whitespace_and_case_insensitive(self, value):
|
|
"""带空格和大小写不影响匹配。"""
|
|
# 只要能找到对应状态且不抛异常即可
|
|
result = GenerationTaskStatus(value)
|
|
assert result in (
|
|
GenerationTaskStatus.COMPLETED,
|
|
GenerationTaskStatus.FAILED,
|
|
)
|
|
|
|
|
|
class TestGenerationTaskStatusFallback:
|
|
"""完全未知的值兜底为 PENDING,不抛500。"""
|
|
|
|
@pytest.mark.parametrize("value", ["unknown", "foo_bar", "deleted", ""])
|
|
def test_unknown_value_falls_back_to_pending(self, value):
|
|
assert GenerationTaskStatus(value) == GenerationTaskStatus.PENDING
|
|
|
|
def test_none_value_falls_back_to_pending(self):
|
|
assert GenerationTaskStatus(None) == GenerationTaskStatus.PENDING # type: ignore[arg-type]
|
|
|
|
def test_int_value_falls_back_to_pending(self):
|
|
assert GenerationTaskStatus(123) == GenerationTaskStatus.PENDING # type: ignore[arg-type]
|
|
|
|
|
|
class TestGenerationTaskStatusStrValue:
|
|
"""枚举值仍为字符串类型,不影响序列化。"""
|
|
|
|
def test_value_unchanged(self):
|
|
assert GenerationTaskStatus.PENDING.value == "pending"
|
|
assert GenerationTaskStatus.COMPLETED.value == "completed"
|
|
assert isinstance(GenerationTaskStatus.PENDING, str)
|