import pytest
from coreason_meta_engineering.utils.topological_validation import (
verify_cryptographic_urn_boundary,
)
class TestURNValidation:
def test_valid_coreason_urn(self) -> None:
verify_cryptographic_urn_boundary("urn:coreason:actionspace:solver:clinical_extractor:v1")
def test_valid_ohdsi_urn(self) -> None:
verify_cryptographic_urn_boundary("urn:ohdsi:actionspace:oracle:vocab_lookup:v2")
def test_valid_nlm_urn(self) -> None:
verify_cryptographic_urn_boundary("urn:nlm:actionspace:oracle:rxnorm_resolver:v1")
def test_valid_all_categories(self) -> None:
for cat in ("oracle", "solver", "effector", "substrate", "sensory", "node"):
verify_cryptographic_urn_boundary(f"urn:coreason:actionspace:{cat}:test:v1")
def test_invalid_urn_missing_version(self) -> None:
with pytest.raises(ValueError, match="Invalid URN format"):
verify_cryptographic_urn_boundary("urn:coreason:actionspace:solver:test")
def test_invalid_urn_no_prefix(self) -> None:
with pytest.raises(ValueError, match="Invalid URN format"):
verify_cryptographic_urn_boundary("finance_ledger_v1")
def test_invalid_urn_wrong_category(self) -> None:
with pytest.raises(ValueError, match="Invalid URN format"):
verify_cryptographic_urn_boundary("urn:coreason:actionspace:widget:test:v1")