Files
MeshChatX/tests/backend/test_hex_identifier_utils.py

69 lines
1.8 KiB
Python

from hypothesis import given
from hypothesis import strategies as st
from meshchatx.src.backend.meshchat_utils import (
hex_identifier_to_bytes,
normalize_hex_identifier,
)
def test_normalize_hex_identifier_strips_uuid_separators():
u = "BA7F0E59-FC70-4E77-9438-FA83A090F74A"
assert normalize_hex_identifier(u) == "ba7f0e59fc704e779438fa83a090f74a"
def test_normalize_hex_identifier_strips_colons_and_spaces():
assert normalize_hex_identifier("AB: CD : EF") == "abcdef"
def test_hex_identifier_to_bytes_uuid_style():
u = "ba7f0e59-fc70-4e77-9438-fa83a090f74a"
b = hex_identifier_to_bytes(u)
assert b is not None
assert len(b) == 16
def test_hex_identifier_to_bytes_standard_hash():
h = "a" * 64
b = hex_identifier_to_bytes(h)
assert b is not None
assert len(b) == 32
def test_hex_identifier_to_bytes_invalid_returns_none():
assert hex_identifier_to_bytes("not-hex") is None
assert hex_identifier_to_bytes("") is None
assert hex_identifier_to_bytes(None) is None
assert hex_identifier_to_bytes("abc") is None
@given(s=st.text())
def test_normalize_hex_identifier_never_raises(s):
normalize_hex_identifier(s)
@given(s=st.text())
def test_hex_identifier_to_bytes_never_raises(s):
hex_identifier_to_bytes(s)
@given(h=st.from_regex(r"[0-9a-fA-F]{0,200}"))
def test_hex_identifier_length_invariant(h):
n = normalize_hex_identifier(h)
b = hex_identifier_to_bytes(h)
if not n or len(n) % 2:
assert b is None
else:
assert b is not None
assert len(b) == len(n) // 2
@given(
a=st.from_regex(r"[0-9a-fA-F]{2,64}"),
b=st.from_regex(r"[0-9a-fA-F]{2,64}"),
)
def test_normalize_concat_equals_normalize_join(a, b):
assert normalize_hex_identifier(a + b) == normalize_hex_identifier(
normalize_hex_identifier(a) + normalize_hex_identifier(b),
)