mirror of https://github.com/home-assistant/core
143 lines
4.3 KiB
Python
143 lines
4.3 KiB
Python
"""Define tests for AirVisual init."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
from homeassistant.components.airvisual import (
|
|
CONF_CITY,
|
|
CONF_GEOGRAPHIES,
|
|
CONF_INTEGRATION_TYPE,
|
|
DOMAIN,
|
|
INTEGRATION_TYPE_GEOGRAPHY_COORDS,
|
|
INTEGRATION_TYPE_GEOGRAPHY_NAME,
|
|
INTEGRATION_TYPE_NODE_PRO,
|
|
)
|
|
|
|
# pylint: disable-next=hass-component-root-import
|
|
from homeassistant.components.airvisual_pro.const import DOMAIN as AIRVISUAL_PRO_DOMAIN
|
|
from homeassistant.const import (
|
|
CONF_API_KEY,
|
|
CONF_COUNTRY,
|
|
CONF_IP_ADDRESS,
|
|
CONF_LATITUDE,
|
|
CONF_LONGITUDE,
|
|
CONF_PASSWORD,
|
|
CONF_STATE,
|
|
)
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import device_registry as dr, issue_registry as ir
|
|
|
|
from .conftest import (
|
|
COORDS_CONFIG,
|
|
COORDS_CONFIG2,
|
|
NAME_CONFIG,
|
|
TEST_API_KEY,
|
|
TEST_CITY,
|
|
TEST_COUNTRY,
|
|
TEST_LATITUDE,
|
|
TEST_LATITUDE2,
|
|
TEST_LONGITUDE,
|
|
TEST_LONGITUDE2,
|
|
TEST_STATE,
|
|
)
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
|
|
async def test_migration_1_2(hass: HomeAssistant, mock_pyairvisual) -> None:
|
|
"""Test migrating from version 1 to 2."""
|
|
entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
unique_id=TEST_API_KEY,
|
|
data={
|
|
CONF_API_KEY: TEST_API_KEY,
|
|
CONF_GEOGRAPHIES: [
|
|
{
|
|
CONF_LATITUDE: TEST_LATITUDE,
|
|
CONF_LONGITUDE: TEST_LONGITUDE,
|
|
},
|
|
{
|
|
CONF_CITY: TEST_CITY,
|
|
CONF_STATE: TEST_STATE,
|
|
CONF_COUNTRY: TEST_COUNTRY,
|
|
},
|
|
{
|
|
CONF_LATITUDE: TEST_LATITUDE2,
|
|
CONF_LONGITUDE: TEST_LONGITUDE2,
|
|
},
|
|
],
|
|
},
|
|
version=1,
|
|
)
|
|
entry.add_to_hass(hass)
|
|
|
|
assert await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
config_entries = hass.config_entries.async_entries(DOMAIN)
|
|
assert len(config_entries) == 3
|
|
|
|
# Ensure that after migration, each configuration has its own config entry:
|
|
identifier1 = f"{TEST_LATITUDE}, {TEST_LONGITUDE}"
|
|
assert config_entries[0].unique_id == identifier1
|
|
assert config_entries[0].title == f"Cloud API ({identifier1})"
|
|
assert config_entries[0].data == {
|
|
**COORDS_CONFIG,
|
|
CONF_INTEGRATION_TYPE: INTEGRATION_TYPE_GEOGRAPHY_COORDS,
|
|
}
|
|
|
|
identifier2 = f"{TEST_CITY}, {TEST_STATE}, {TEST_COUNTRY}"
|
|
assert config_entries[1].unique_id == identifier2
|
|
assert config_entries[1].title == f"Cloud API ({identifier2})"
|
|
assert config_entries[1].data == {
|
|
**NAME_CONFIG,
|
|
CONF_INTEGRATION_TYPE: INTEGRATION_TYPE_GEOGRAPHY_NAME,
|
|
}
|
|
|
|
identifier3 = f"{TEST_LATITUDE2}, {TEST_LONGITUDE2}"
|
|
assert config_entries[2].unique_id == identifier3
|
|
assert config_entries[2].title == f"Cloud API ({identifier3})"
|
|
assert config_entries[2].data == {
|
|
**COORDS_CONFIG2,
|
|
CONF_INTEGRATION_TYPE: INTEGRATION_TYPE_GEOGRAPHY_COORDS,
|
|
}
|
|
|
|
|
|
async def test_migration_2_3(
|
|
hass: HomeAssistant,
|
|
mock_pyairvisual,
|
|
device_registry: dr.DeviceRegistry,
|
|
issue_registry: ir.IssueRegistry,
|
|
) -> None:
|
|
"""Test migrating from version 2 to 3."""
|
|
entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
unique_id="192.168.1.100",
|
|
data={
|
|
CONF_IP_ADDRESS: "192.168.1.100",
|
|
CONF_PASSWORD: "abcde12345",
|
|
CONF_INTEGRATION_TYPE: INTEGRATION_TYPE_NODE_PRO,
|
|
},
|
|
version=2,
|
|
)
|
|
entry.add_to_hass(hass)
|
|
|
|
device_registry.async_get_or_create(
|
|
name="192.168.1.100",
|
|
config_entry_id=entry.entry_id,
|
|
identifiers={(DOMAIN, "SERIAL_NUMBER")},
|
|
)
|
|
|
|
with patch(
|
|
"homeassistant.components.airvisual.automation.automations_with_device",
|
|
return_value=["automation.test_automation"],
|
|
):
|
|
await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
# Ensure that after migration, the AirVisual Pro device has been moved to the
|
|
# `airvisual_pro` domain and an issue has been created:
|
|
for domain, entry_count in ((DOMAIN, 0), (AIRVISUAL_PRO_DOMAIN, 1)):
|
|
assert len(hass.config_entries.async_entries(domain)) == entry_count
|
|
|
|
assert len(issue_registry.issues) == 1
|