121 lines
3.6 KiB
Python
121 lines
3.6 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,
|
||
|
)
|
||
|
from homeassistant.components.airvisual_pro 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.helpers import device_registry as dr, issue_registry as ir
|
||
|
|
||
|
from .conftest import (
|
||
|
COORDS_CONFIG,
|
||
|
NAME_CONFIG,
|
||
|
TEST_API_KEY,
|
||
|
TEST_CITY,
|
||
|
TEST_COUNTRY,
|
||
|
TEST_LATITUDE,
|
||
|
TEST_LONGITUDE,
|
||
|
TEST_STATE,
|
||
|
)
|
||
|
|
||
|
from tests.common import MockConfigEntry
|
||
|
|
||
|
|
||
|
async def test_migration_1_2(hass, mock_pyairvisual):
|
||
|
"""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,
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
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) == 2
|
||
|
|
||
|
# 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,
|
||
|
}
|
||
|
|
||
|
|
||
|
async def test_migration_2_3(hass, mock_pyairvisual):
|
||
|
"""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 = dr.async_get(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
|
||
|
|
||
|
issue_registry = ir.async_get(hass)
|
||
|
assert len(issue_registry.issues) == 1
|