7c541910b3
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 1m5s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m30s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (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 / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m9s
69 lines
2.7 KiB
Python
Executable File
69 lines
2.7 KiB
Python
Executable File
"""ClassificationStatus 枚举兼容性测试。
|
|
|
|
验证历史脏数据(如 'done')不会导致枚举转换失败。
|
|
"""
|
|
|
|
import pytest
|
|
|
|
from packages.domain.entities import ClassificationStatus
|
|
|
|
|
|
class TestClassificationStatusNormalValues:
|
|
"""正常值应该正确映射。"""
|
|
|
|
def test_pending(self):
|
|
assert ClassificationStatus("pending") == ClassificationStatus.PENDING
|
|
|
|
def test_processing(self):
|
|
assert ClassificationStatus("processing") == ClassificationStatus.PROCESSING
|
|
|
|
def test_completed(self):
|
|
assert ClassificationStatus("completed") == ClassificationStatus.COMPLETED
|
|
|
|
def test_failed(self):
|
|
assert ClassificationStatus("failed") == ClassificationStatus.FAILED
|
|
|
|
|
|
class TestClassificationStatusHistoricalValues:
|
|
"""历史脏数据应该正确映射到对应状态,不抛异常。"""
|
|
|
|
@pytest.mark.parametrize("value", ["done", "Done", "DONE", " done "])
|
|
def test_done_maps_to_completed(self, value):
|
|
"""生产环境发现的 'done' 历史值应映射为 COMPLETED。"""
|
|
assert ClassificationStatus(value) == ClassificationStatus.COMPLETED
|
|
|
|
@pytest.mark.parametrize("value", ["success", "finished", "complete"])
|
|
def test_other_done_like_values_map_to_completed(self, value):
|
|
assert ClassificationStatus(value) == ClassificationStatus.COMPLETED
|
|
|
|
@pytest.mark.parametrize("value", ["fail", "error", "err"])
|
|
def test_error_like_values_map_to_failed(self, value):
|
|
assert ClassificationStatus(value) == ClassificationStatus.FAILED
|
|
|
|
@pytest.mark.parametrize("value", ["process", "running", "run"])
|
|
def test_processing_like_values_map_to_processing(self, value):
|
|
assert ClassificationStatus(value) == ClassificationStatus.PROCESSING
|
|
|
|
|
|
class TestClassificationStatusFallback:
|
|
"""完全未知的值兜底为 PENDING,不抛500。"""
|
|
|
|
@pytest.mark.parametrize("value", ["unknown", "foo_bar", ""])
|
|
def test_unknown_value_falls_back_to_pending(self, value):
|
|
assert ClassificationStatus(value) == ClassificationStatus.PENDING
|
|
|
|
def test_none_value_falls_back_to_pending(self):
|
|
assert ClassificationStatus(None) == ClassificationStatus.PENDING # type: ignore[arg-type]
|
|
|
|
def test_int_value_falls_back_to_pending(self):
|
|
assert ClassificationStatus(123) == ClassificationStatus.PENDING # type: ignore[arg-type]
|
|
|
|
|
|
class TestClassificationStatusStrValue:
|
|
"""枚举值仍为字符串类型,不影响序列化。"""
|
|
|
|
def test_value_unchanged(self):
|
|
assert ClassificationStatus.COMPLETED.value == "completed"
|
|
assert ClassificationStatus.PENDING.value == "pending"
|
|
assert isinstance(ClassificationStatus.COMPLETED, str)
|