test_plug_mini_it.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import pytest
  2. from switchbot import SwitchbotModel, parse_advertisement_data
  3. from .test_adv_parser import generate_advertisement_data, generate_ble_device
  4. @pytest.mark.parametrize("pairing", [0, 1])
  5. @pytest.mark.parametrize("network", [0, 0x15, 0x75])
  6. @pytest.mark.parametrize(("status", "is_on"), [(0x01, False), (0x87, True)])
  7. @pytest.mark.parametrize("encrypted", [False, True])
  8. def test_plug_mini_it_advertisement(pairing, network, status, is_on, encrypted):
  9. service = bytes(
  10. [0x80 if encrypted else 0, 0, 0, pairing, 0x12, 0x43, 0xC8, network]
  11. )
  12. manufacturer = (
  13. bytes.fromhex("010203040506")
  14. + bytes([99, status, 0, 0])
  15. + bytes.fromhex("04e600000000")
  16. )
  17. adv = parse_advertisement_data(
  18. generate_ble_device("01:02:03:04:05:06", "Plug Mini (IT)"),
  19. generate_advertisement_data(
  20. manufacturer_data={2409: manufacturer},
  21. service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": service},
  22. ),
  23. )
  24. assert adv is not None
  25. assert adv.data["modelName"] == SwitchbotModel.PLUG_MINI_IT
  26. assert adv.data["modelFriendlyName"] == "Plug Mini (IT)"
  27. assert adv.data["isEncrypted"] is encrypted
  28. assert adv.data["data"] == {
  29. "switchMode": True,
  30. "sequence_number": 99,
  31. "isOn": is_on,
  32. "power": 1254.0,
  33. }