import pytest from app.core.ids import is_valid_id, new_id, parse_id def test_new_id_prefix_and_version() -> None: value = new_id("user_") assert value.startswith("user_") parsed = parse_id(value, "user_") assert parsed.version == 7 def test_request_id_is_uuidv4() -> None: value = new_id("request_", version=4) assert parse_id(value, "request_", version=4).version == 4 def test_reject_wrong_prefix() -> None: value = new_id("user_") with pytest.raises(ValueError, match="前缀"): parse_id(value, "run_") def test_reject_wrong_version() -> None: value = new_id("user_", version=4) assert not is_valid_id(value, "user_") with pytest.raises(ValueError, match="version"): parse_id(value, "user_") def test_reject_non_canonical_text() -> None: with pytest.raises(ValueError): parse_id("user_NOT-A-UUID", "user_")