fin-hub/tests/test_attribution.py

30 lines
980 B
Python
Raw Normal View History

2026-08-10 20:32:09 +02:00
import pytest
2026-08-11 14:39:48 +02:00
from fin_hub.attribution import (
ClientAttribution,
optional_attribution,
parse_client_attribution_key,
)
2026-08-10 20:32:09 +02:00
def test_client_attribution_key_is_stable():
attribution = ClientAttribution(" acme ", "portal", "prod-01")
assert attribution.key == "client:acme|app:portal|instance:prod-01"
2026-08-11 14:39:48 +02:00
assert parse_client_attribution_key(attribution.key) == attribution
2026-08-10 20:32:09 +02:00
def test_empty_attribution_is_explicitly_unattributed():
assert optional_attribution(None, None, None) is None
assert optional_attribution("", "", "") is None
@pytest.mark.parametrize("invalid", ["has space", "has/slash", "", "x" * 129])
def test_client_attribution_rejects_unsafe_parts(invalid: str):
with pytest.raises(ValueError):
ClientAttribution(invalid, "portal", "prod-01")
2026-08-11 14:39:48 +02:00
def test_client_attribution_parser_rejects_other_namespaces():
with pytest.raises(ValueError, match="invalid"):
parse_client_attribution_key("platform:shared-cluster")