Skip to content

Commit

Permalink
Add tests for sensors in SwitchBot Cloud (home-assistant#137319)
Browse files Browse the repository at this point in the history
  • Loading branch information
mckbrmn authored Feb 5, 2025
1 parent 0236f24 commit eded99a
Show file tree
Hide file tree
Showing 8 changed files with 393 additions and 31 deletions.
4 changes: 3 additions & 1 deletion tests/components/switchbot_cloud/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from tests.common import MockConfigEntry


def configure_integration(hass: HomeAssistant) -> MockConfigEntry:
async def configure_integration(hass: HomeAssistant) -> MockConfigEntry:
"""Configure the integration."""
config = {
CONF_API_TOKEN: "test-token",
Expand All @@ -17,5 +17,7 @@ def configure_integration(hass: HomeAssistant) -> MockConfigEntry:
domain=DOMAIN, data=config, entry_id="123456", unique_id="123456"
)
entry.add_to_hass(hass)
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()

return entry
9 changes: 9 additions & 0 deletions tests/components/switchbot_cloud/fixtures/meter_status.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "V3.3",
"temperature": 21.8,
"battery": 100,
"humidity": 32,
"deviceId": "meter-id-1",
"deviceType": "Meter",
"hubDeviceId": "test-hub-id"
}
307 changes: 307 additions & 0 deletions tests/components/switchbot_cloud/snapshots/test_sensor.ambr
Original file line number Diff line number Diff line change
@@ -0,0 +1,307 @@
# serializer version: 1
# name: test_meter[sensor.meter_1_battery-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.meter_1_battery',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.BATTERY: 'battery'>,
'original_icon': None,
'original_name': 'Battery',
'platform': 'switchbot_cloud',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'meter-id-1_battery',
'unit_of_measurement': '%',
})
# ---
# name: test_meter[sensor.meter_1_battery-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'battery',
'friendly_name': 'meter-1 Battery',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.meter_1_battery',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '100',
})
# ---
# name: test_meter[sensor.meter_1_humidity-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.meter_1_humidity',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.HUMIDITY: 'humidity'>,
'original_icon': None,
'original_name': 'Humidity',
'platform': 'switchbot_cloud',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'meter-id-1_humidity',
'unit_of_measurement': '%',
})
# ---
# name: test_meter[sensor.meter_1_humidity-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'humidity',
'friendly_name': 'meter-1 Humidity',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.meter_1_humidity',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '32',
})
# ---
# name: test_meter[sensor.meter_1_temperature-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.meter_1_temperature',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
'original_icon': None,
'original_name': 'Temperature',
'platform': 'switchbot_cloud',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'meter-id-1_temperature',
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
})
# ---
# name: test_meter[sensor.meter_1_temperature-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'temperature',
'friendly_name': 'meter-1 Temperature',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}),
'context': <ANY>,
'entity_id': 'sensor.meter_1_temperature',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '21.8',
})
# ---
# name: test_meter_no_coordinator_data[sensor.meter_1_battery-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.meter_1_battery',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.BATTERY: 'battery'>,
'original_icon': None,
'original_name': 'Battery',
'platform': 'switchbot_cloud',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'meter-id-1_battery',
'unit_of_measurement': '%',
})
# ---
# name: test_meter_no_coordinator_data[sensor.meter_1_battery-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'battery',
'friendly_name': 'meter-1 Battery',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.meter_1_battery',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_meter_no_coordinator_data[sensor.meter_1_humidity-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.meter_1_humidity',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.HUMIDITY: 'humidity'>,
'original_icon': None,
'original_name': 'Humidity',
'platform': 'switchbot_cloud',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'meter-id-1_humidity',
'unit_of_measurement': '%',
})
# ---
# name: test_meter_no_coordinator_data[sensor.meter_1_humidity-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'humidity',
'friendly_name': 'meter-1 Humidity',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.meter_1_humidity',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_meter_no_coordinator_data[sensor.meter_1_temperature-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.meter_1_temperature',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
'original_icon': None,
'original_name': 'Temperature',
'platform': 'switchbot_cloud',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'meter-id-1_temperature',
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
})
# ---
# name: test_meter_no_coordinator_data[sensor.meter_1_temperature-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'temperature',
'friendly_name': 'meter-1 Temperature',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}),
'context': <ANY>,
'entity_id': 'sensor.meter_1_temperature',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
10 changes: 2 additions & 8 deletions tests/components/switchbot_cloud/test_button.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,7 @@ async def test_pressmode_bot(

mock_get_status.return_value = {"deviceMode": "pressMode"}

entry = configure_integration(hass)
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()

entry = await configure_integration(hass)
assert entry.state is ConfigEntryState.LOADED

entity_id = "button.bot_1"
Expand Down Expand Up @@ -63,9 +60,6 @@ async def test_switchmode_bot_no_button_entity(

mock_get_status.return_value = {"deviceMode": "switchMode"}

entry = configure_integration(hass)
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()

entry = await configure_integration(hass)
assert entry.state is ConfigEntryState.LOADED
assert not hass.states.async_entity_ids(BUTTON_DOMAIN)
10 changes: 3 additions & 7 deletions tests/components/switchbot_cloud/test_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,7 @@ async def test_setup_entry_success(
),
]
mock_get_status.return_value = {"power": PowerState.ON.value}
entry = configure_integration(hass)
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
entry = await configure_integration(hass)
assert entry.state is ConfigEntryState.LOADED

hass.bus.async_fire(EVENT_HOMEASSISTANT_START)
Expand All @@ -91,8 +89,7 @@ async def test_setup_entry_fails_when_listing_devices(
) -> None:
"""Test error handling when list_devices in setup of entry."""
mock_list_devices.side_effect = error
entry = configure_integration(hass)
await hass.config_entries.async_setup(entry.entry_id)
entry = await configure_integration(hass)
assert entry.state == state

hass.bus.async_fire(EVENT_HOMEASSISTANT_START)
Expand All @@ -114,8 +111,7 @@ async def test_setup_entry_fails_when_refreshing(
)
]
mock_get_status.side_effect = CannotConnect
entry = configure_integration(hass)
await hass.config_entries.async_setup(entry.entry_id)
entry = await configure_integration(hass)
assert entry.state is ConfigEntryState.SETUP_RETRY

hass.bus.async_fire(EVENT_HOMEASSISTANT_START)
Expand Down
4 changes: 1 addition & 3 deletions tests/components/switchbot_cloud/test_lock.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,7 @@ async def test_lock(hass: HomeAssistant, mock_list_devices, mock_get_status) ->

mock_get_status.return_value = {"lockState": "locked"}

entry = configure_integration(hass)
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
entry = await configure_integration(hass)

assert entry.state is ConfigEntryState.LOADED

Expand Down
Loading

0 comments on commit eded99a

Please sign in to comment.