46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
import pytest
|
|
|
|
from modelforge_api.domain.enums import (
|
|
MigrationStatus,
|
|
ModelLifecycle,
|
|
UpgradeClass,
|
|
VerificationStatus,
|
|
)
|
|
from modelforge_api.domain.lifecycle import (
|
|
InvalidTransition,
|
|
assert_model_transition,
|
|
assert_promotion_allowed,
|
|
)
|
|
|
|
|
|
def test_model_lifecycle_allows_only_declared_transition() -> None:
|
|
assert_model_transition(ModelLifecycle.DISCOVERED, ModelLifecycle.CANDIDATE)
|
|
with pytest.raises(InvalidTransition):
|
|
assert_model_transition(ModelLifecycle.DISCOVERED, ModelLifecycle.ACTIVE)
|
|
|
|
|
|
def test_stable_promotion_requires_complete_evidence() -> None:
|
|
with pytest.raises(InvalidTransition, match="benchmark"):
|
|
assert_promotion_allowed(
|
|
upgrade_class=UpgradeClass.BEHAVIORAL,
|
|
verification_status=VerificationStatus.VERIFIED,
|
|
local_benchmark_ids=[],
|
|
project_benchmark_ids=[],
|
|
operator_approval_id="approval",
|
|
rollback_deployment_id="old",
|
|
)
|
|
|
|
|
|
def test_reindex_promotion_requires_ready_migration() -> None:
|
|
kwargs = {
|
|
"upgrade_class": UpgradeClass.REQUIRES_REINDEX,
|
|
"verification_status": VerificationStatus.VERIFIED,
|
|
"local_benchmark_ids": ["local"],
|
|
"project_benchmark_ids": ["project"],
|
|
"operator_approval_id": "approval",
|
|
"rollback_deployment_id": "old",
|
|
}
|
|
with pytest.raises(InvalidTransition, match="migration"):
|
|
assert_promotion_allowed(**kwargs, migration_status=MigrationStatus.BACKFILLING)
|
|
assert_promotion_allowed(**kwargs, migration_status=MigrationStatus.READY)
|