19 lines
679 B
Python
19 lines
679 B
Python
import pytest
|
|
|
|
from fin_hub.attribution import ClientAttribution, optional_attribution
|
|
|
|
|
|
def test_client_attribution_key_is_stable():
|
|
attribution = ClientAttribution(" acme ", "portal", "prod-01")
|
|
assert attribution.key == "client:acme|app:portal|instance:prod-01"
|
|
|
|
|
|
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")
|