Files

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)