"""Test area_registry API.""" import pytest from homeassistant.components.config import area_registry from tests.common import mock_area_registry @pytest.fixture def client(hass, hass_ws_client): """Fixture that can interact with the config manager API.""" hass.loop.run_until_complete(area_registry.async_setup(hass)) yield hass.loop.run_until_complete(hass_ws_client(hass)) @pytest.fixture def registry(hass): """Return an empty, loaded, registry.""" return mock_area_registry(hass) async def test_list_areas(hass, client, registry): """Test list entries.""" registry.async_create("mock 1") registry.async_create("mock 2") await client.send_json({"id": 1, "type": "config/area_registry/list"}) msg = await client.receive_json() assert len(msg["result"]) == len(registry.areas) async def test_create_area(hass, client, registry): """Test create entry.""" await client.send_json( {"id": 1, "name": "mock", "type": "config/area_registry/create"} ) msg = await client.receive_json() assert "mock" in msg["result"]["name"] assert len(registry.areas) == 1 async def test_create_area_with_name_already_in_use(hass, client, registry): """Test create entry that should fail.""" registry.async_create("mock") await client.send_json( {"id": 1, "name": "mock", "type": "config/area_registry/create"} ) msg = await client.receive_json() assert not msg["success"] assert msg["error"]["code"] == "invalid_info" assert msg["error"]["message"] == "Name is already in use" assert len(registry.areas) == 1 async def test_delete_area(hass, client, registry): """Test delete entry.""" area = registry.async_create("mock") await client.send_json( {"id": 1, "area_id": area.id, "type": "config/area_registry/delete"} ) msg = await client.receive_json() assert msg["success"] assert not registry.areas async def test_delete_non_existing_area(hass, client, registry): """Test delete entry that should fail.""" registry.async_create("mock") await client.send_json( {"id": 1, "area_id": "", "type": "config/area_registry/delete"} ) msg = await client.receive_json() assert not msg["success"] assert msg["error"]["code"] == "invalid_info" assert msg["error"]["message"] == "Area ID doesn't exist" assert len(registry.areas) == 1 async def test_update_area(hass, client, registry): """Test update entry.""" area = registry.async_create("mock 1") await client.send_json( { "id": 1, "area_id": area.id, "name": "mock 2", "type": "config/area_registry/update", } ) msg = await client.receive_json() assert msg["result"]["area_id"] == area.id assert msg["result"]["name"] == "mock 2" assert len(registry.areas) == 1 async def test_update_area_with_same_name(hass, client, registry): """Test update entry.""" area = registry.async_create("mock 1") await client.send_json( { "id": 1, "area_id": area.id, "name": "mock 1", "type": "config/area_registry/update", } ) msg = await client.receive_json() assert msg["result"]["area_id"] == area.id assert msg["result"]["name"] == "mock 1" assert len(registry.areas) == 1 async def test_update_area_with_name_already_in_use(hass, client, registry): """Test update entry.""" area = registry.async_create("mock 1") registry.async_create("mock 2") await client.send_json( { "id": 1, "area_id": area.id, "name": "mock 2", "type": "config/area_registry/update", } ) msg = await client.receive_json() assert not msg["success"] assert msg["error"]["code"] == "invalid_info" assert msg["error"]["message"] == "Name is already in use" assert len(registry.areas) == 2