Mock MQTT setup in hassio tests (#77245)

* Mock MQTT setup in hassio tests

* Tweak
This commit is contained in:
Erik Montnemery 2022-08-24 10:48:23 +02:00 committed by GitHub
parent c26d6879ae
commit 853fab0a68
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,14 +1,38 @@
"""Test config flow.""" """Test config flow."""
from http import HTTPStatus from http import HTTPStatus
from unittest.mock import Mock, patch from unittest.mock import AsyncMock, Mock, patch
import pytest
from homeassistant import config_entries
from homeassistant.components.hassio import HassioServiceInfo from homeassistant.components.hassio import HassioServiceInfo
from homeassistant.components.hassio.handler import HassioAPIError from homeassistant.components.hassio.handler import HassioAPIError
from homeassistant.components.mqtt import DOMAIN as MQTT_DOMAIN
from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STARTED from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STARTED
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import MockModule, mock_entity_platform, mock_integration
async def test_hassio_discovery_startup(hass, aioclient_mock, hassio_client):
@pytest.fixture
async def mock_mqtt(hass):
"""Mock the MQTT integration's config flow."""
mock_integration(hass, MockModule(MQTT_DOMAIN))
mock_entity_platform(hass, f"config_flow.{MQTT_DOMAIN}", None)
with patch.dict(config_entries.HANDLERS):
class MqttFlow(config_entries.ConfigFlow, domain=MQTT_DOMAIN):
"""Test flow."""
VERSION = 1
async_step_hassio = AsyncMock(return_value={"type": "abort"})
yield MqttFlow
async def test_hassio_discovery_startup(hass, aioclient_mock, hassio_client, mock_mqtt):
"""Test startup and discovery after event.""" """Test startup and discovery after event."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/discovery", "http://127.0.0.1/discovery",
@ -39,17 +63,13 @@ async def test_hassio_discovery_startup(hass, aioclient_mock, hassio_client):
assert aioclient_mock.call_count == 0 assert aioclient_mock.call_count == 0
with patch(
"homeassistant.components.mqtt.config_flow.FlowHandler.async_step_hassio",
return_value={"type": "abort"},
) as mock_mqtt:
hass.bus.async_fire(EVENT_HOMEASSISTANT_START) hass.bus.async_fire(EVENT_HOMEASSISTANT_START)
await hass.async_block_till_done() await hass.async_block_till_done()
hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED) hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED)
await hass.async_block_till_done() await hass.async_block_till_done()
assert aioclient_mock.call_count == 2 assert aioclient_mock.call_count == 2
assert mock_mqtt.called assert mock_mqtt.async_step_hassio.called
mock_mqtt.assert_called_with( mock_mqtt.async_step_hassio.assert_called_with(
HassioServiceInfo( HassioServiceInfo(
config={ config={
"broker": "mock-broker", "broker": "mock-broker",
@ -63,7 +83,9 @@ async def test_hassio_discovery_startup(hass, aioclient_mock, hassio_client):
) )
async def test_hassio_discovery_startup_done(hass, aioclient_mock, hassio_client): async def test_hassio_discovery_startup_done(
hass, aioclient_mock, hassio_client, mock_mqtt
):
"""Test startup and discovery with hass discovery.""" """Test startup and discovery with hass discovery."""
aioclient_mock.post( aioclient_mock.post(
"http://127.0.0.1/supervisor/options", "http://127.0.0.1/supervisor/options",
@ -102,17 +124,14 @@ async def test_hassio_discovery_startup_done(hass, aioclient_mock, hassio_client
), patch( ), patch(
"homeassistant.components.hassio.HassIO.get_info", "homeassistant.components.hassio.HassIO.get_info",
Mock(side_effect=HassioAPIError()), Mock(side_effect=HassioAPIError()),
), patch( ):
"homeassistant.components.mqtt.config_flow.FlowHandler.async_step_hassio",
return_value={"type": "abort"},
) as mock_mqtt:
await hass.async_start() await hass.async_start()
await async_setup_component(hass, "hassio", {}) await async_setup_component(hass, "hassio", {})
await hass.async_block_till_done() await hass.async_block_till_done()
assert aioclient_mock.call_count == 2 assert aioclient_mock.call_count == 2
assert mock_mqtt.called assert mock_mqtt.async_step_hassio.called
mock_mqtt.assert_called_with( mock_mqtt.async_step_hassio.assert_called_with(
HassioServiceInfo( HassioServiceInfo(
config={ config={
"broker": "mock-broker", "broker": "mock-broker",
@ -126,7 +145,7 @@ async def test_hassio_discovery_startup_done(hass, aioclient_mock, hassio_client
) )
async def test_hassio_discovery_webhook(hass, aioclient_mock, hassio_client): async def test_hassio_discovery_webhook(hass, aioclient_mock, hassio_client, mock_mqtt):
"""Test discovery webhook.""" """Test discovery webhook."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/discovery/testuuid", "http://127.0.0.1/discovery/testuuid",
@ -151,10 +170,6 @@ async def test_hassio_discovery_webhook(hass, aioclient_mock, hassio_client):
json={"result": "ok", "data": {"name": "Mosquitto Test"}}, json={"result": "ok", "data": {"name": "Mosquitto Test"}},
) )
with patch(
"homeassistant.components.mqtt.config_flow.FlowHandler.async_step_hassio",
return_value={"type": "abort"},
) as mock_mqtt:
resp = await hassio_client.post( resp = await hassio_client.post(
"/api/hassio_push/discovery/testuuid", "/api/hassio_push/discovery/testuuid",
json={"addon": "mosquitto", "service": "mqtt", "uuid": "testuuid"}, json={"addon": "mosquitto", "service": "mqtt", "uuid": "testuuid"},
@ -165,8 +180,8 @@ async def test_hassio_discovery_webhook(hass, aioclient_mock, hassio_client):
assert resp.status == HTTPStatus.OK assert resp.status == HTTPStatus.OK
assert aioclient_mock.call_count == 2 assert aioclient_mock.call_count == 2
assert mock_mqtt.called assert mock_mqtt.async_step_hassio.called
mock_mqtt.assert_called_with( mock_mqtt.async_step_hassio.assert_called_with(
HassioServiceInfo( HassioServiceInfo(
config={ config={
"broker": "mock-broker", "broker": "mock-broker",