Correct logic for picking bluetooth local name (#102823)
* Correct logic for picking bluetooth local name * make test more robust --------- Co-authored-by: J. Nick Koston <nick@koston.org>pull/102820/head^2
parent
69a0c0d435
commit
64f0ea60d1
|
@ -330,7 +330,7 @@ class BaseHaRemoteScanner(BaseHaScanner):
|
|||
prev_manufacturer_data = prev_advertisement.manufacturer_data
|
||||
prev_name = prev_device.name
|
||||
|
||||
if local_name and prev_name and len(prev_name) > len(local_name):
|
||||
if prev_name and (not local_name or len(prev_name) > len(local_name)):
|
||||
local_name = prev_name
|
||||
|
||||
if service_uuids and service_uuids != prev_service_uuids:
|
||||
|
|
|
@ -42,7 +42,10 @@ from . import (
|
|||
from tests.common import async_fire_time_changed, load_fixture
|
||||
|
||||
|
||||
async def test_remote_scanner(hass: HomeAssistant, enable_bluetooth: None) -> None:
|
||||
@pytest.mark.parametrize("name_2", [None, "w"])
|
||||
async def test_remote_scanner(
|
||||
hass: HomeAssistant, enable_bluetooth: None, name_2: str | None
|
||||
) -> None:
|
||||
"""Test the remote scanner base class merges advertisement_data."""
|
||||
manager = _get_manager()
|
||||
|
||||
|
@ -61,12 +64,25 @@ async def test_remote_scanner(hass: HomeAssistant, enable_bluetooth: None) -> No
|
|||
)
|
||||
switchbot_device_2 = generate_ble_device(
|
||||
"44:44:33:11:23:45",
|
||||
"w",
|
||||
name_2,
|
||||
{},
|
||||
rssi=-100,
|
||||
)
|
||||
switchbot_device_adv_2 = generate_advertisement_data(
|
||||
local_name="wohand",
|
||||
local_name=name_2,
|
||||
service_uuids=["00000001-0000-1000-8000-00805f9b34fb"],
|
||||
service_data={"00000001-0000-1000-8000-00805f9b34fb": b"\n\xff"},
|
||||
manufacturer_data={1: b"\x01", 2: b"\x02"},
|
||||
rssi=-100,
|
||||
)
|
||||
switchbot_device_3 = generate_ble_device(
|
||||
"44:44:33:11:23:45",
|
||||
"wohandlonger",
|
||||
{},
|
||||
rssi=-100,
|
||||
)
|
||||
switchbot_device_adv_3 = generate_advertisement_data(
|
||||
local_name="wohandlonger",
|
||||
service_uuids=["00000001-0000-1000-8000-00805f9b34fb"],
|
||||
service_data={"00000001-0000-1000-8000-00805f9b34fb": b"\n\xff"},
|
||||
manufacturer_data={1: b"\x01", 2: b"\x02"},
|
||||
|
@ -125,6 +141,15 @@ async def test_remote_scanner(hass: HomeAssistant, enable_bluetooth: None) -> No
|
|||
"00000001-0000-1000-8000-00805f9b34fb",
|
||||
}
|
||||
|
||||
# The longer name should be used
|
||||
scanner.inject_advertisement(switchbot_device_3, switchbot_device_adv_3)
|
||||
assert discovered_device.name == switchbot_device_3.name
|
||||
|
||||
# Inject the shorter name / None again to make
|
||||
# sure we always keep the longer name
|
||||
scanner.inject_advertisement(switchbot_device_2, switchbot_device_adv_2)
|
||||
assert discovered_device.name == switchbot_device_3.name
|
||||
|
||||
cancel()
|
||||
unsetup()
|
||||
|
||||
|
|
Loading…
Reference in New Issue