test_utils.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. """Tests for utils.py functionality."""
  2. from __future__ import annotations
  3. import pytest
  4. from switchbot.utils import extract_request_id, format_mac_upper
  5. @pytest.mark.parametrize(
  6. ("headers", "expected"),
  7. [
  8. pytest.param({"X-Request-ID": "request-id"}, "request-id", id="request-id"),
  9. pytest.param(
  10. {"X-Amzn-RequestId": "amazon-request-id"},
  11. "amazon-request-id",
  12. id="amazon-request-id",
  13. ),
  14. pytest.param({"CF-Ray": "cloudflare-id"}, "cloudflare-id", id="cf-ray"),
  15. pytest.param({"other": "value"}, None, id="no-request-id"),
  16. pytest.param({}, None, id="no-headers"),
  17. ],
  18. )
  19. def test_extract_request_id(headers: dict[str, str], expected: str | None) -> None:
  20. """Test provider request IDs are extracted case-insensitively."""
  21. assert extract_request_id(headers) == expected
  22. def test_format_mac_upper() -> None:
  23. """Test the format_mac_upper utility function."""
  24. # Test already formatted with colons (lowercase)
  25. assert format_mac_upper("aa:bb:cc:dd:ee:ff") == "AA:BB:CC:DD:EE:FF"
  26. # Test already formatted with colons (uppercase)
  27. assert format_mac_upper("AA:BB:CC:DD:EE:FF") == "AA:BB:CC:DD:EE:FF"
  28. # Test with dashes
  29. assert format_mac_upper("aa-bb-cc-dd-ee-ff") == "AA:BB:CC:DD:EE:FF"
  30. assert format_mac_upper("AA-BB-CC-DD-EE-FF") == "AA:BB:CC:DD:EE:FF"
  31. # Test with dots (Cisco format)
  32. assert format_mac_upper("aabb.ccdd.eeff") == "AA:BB:CC:DD:EE:FF"
  33. assert format_mac_upper("AABB.CCDD.EEFF") == "AA:BB:CC:DD:EE:FF"
  34. # Test without separators
  35. assert format_mac_upper("aabbccddeeff") == "AA:BB:CC:DD:EE:FF"
  36. assert format_mac_upper("AABBCCDDEEFF") == "AA:BB:CC:DD:EE:FF"
  37. # Test mixed case without separators
  38. assert format_mac_upper("AaBbCcDdEeFf") == "AA:BB:CC:DD:EE:FF"
  39. # Test invalid formats (should return original in uppercase)
  40. assert format_mac_upper("invalid") == "INVALID"
  41. assert format_mac_upper("aa:bb:cc") == "AA:BB:CC" # Too short
  42. assert (
  43. format_mac_upper("aa:bb:cc:dd:ee:ff:gg") == "AA:BB:CC:DD:EE:FF:GG"
  44. ) # Too long
  45. # Test edge cases
  46. assert format_mac_upper("") == ""
  47. assert format_mac_upper("123456789ABC") == "12:34:56:78:9A:BC"
  48. assert format_mac_upper("12:34:56:78:9a:bc") == "12:34:56:78:9A:BC"