import pytest from app.crud.crm.contract import ( CONTRACT_EDITABLE_STATUSES, CONTRACT_NON_EDITABLE_STATUSES, assert_contract_editable_for_update, ) def test_editable_statuses(): assert CONTRACT_NON_EDITABLE_STATUSES == frozenset({"finished"}) assert CONTRACT_EDITABLE_STATUSES == frozenset( {"draft", "approving", "approved", "executing", "invalid"} ) assert "finished" not in CONTRACT_EDITABLE_STATUSES def test_assert_allows_editable(): for s in ("draft", "approving", "approved", "executing", "invalid", None, ""): assert_contract_editable_for_update(s) def test_assert_rejects_non_editable(): with pytest.raises(ValueError, match="已完成的合同不能修改"): assert_contract_editable_for_update("finished")