Clean up Elgato config flow tests (#133045)

pull/133055/head
Franck Nijhof 2024-12-12 14:24:38 +01:00 committed by GitHub
parent 6005b6d01c
commit bcaf1dc20b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 65 additions and 157 deletions

View File

@ -1,128 +0,0 @@
# serializer version: 1
# name: test_full_user_flow_implementation
FlowResultSnapshot({
'context': dict({
'source': 'user',
'unique_id': 'CN11A1A00001',
}),
'data': dict({
'host': '127.0.0.1',
'mac': None,
}),
'description': None,
'description_placeholders': None,
'flow_id': <ANY>,
'handler': 'elgato',
'minor_version': 1,
'options': dict({
}),
'result': ConfigEntrySnapshot({
'data': dict({
'host': '127.0.0.1',
'mac': None,
}),
'disabled_by': None,
'discovery_keys': dict({
}),
'domain': 'elgato',
'entry_id': <ANY>,
'minor_version': 1,
'options': dict({
}),
'pref_disable_new_entities': False,
'pref_disable_polling': False,
'source': 'user',
'title': 'CN11A1A00001',
'unique_id': 'CN11A1A00001',
'version': 1,
}),
'title': 'CN11A1A00001',
'type': <FlowResultType.CREATE_ENTRY: 'create_entry'>,
'version': 1,
})
# ---
# name: test_full_zeroconf_flow_implementation
FlowResultSnapshot({
'context': dict({
'confirm_only': True,
'source': 'zeroconf',
'unique_id': 'CN11A1A00001',
}),
'data': dict({
'host': '127.0.0.1',
'mac': 'AA:BB:CC:DD:EE:FF',
}),
'description': None,
'description_placeholders': None,
'flow_id': <ANY>,
'handler': 'elgato',
'minor_version': 1,
'options': dict({
}),
'result': ConfigEntrySnapshot({
'data': dict({
'host': '127.0.0.1',
'mac': 'AA:BB:CC:DD:EE:FF',
}),
'disabled_by': None,
'discovery_keys': dict({
}),
'domain': 'elgato',
'entry_id': <ANY>,
'minor_version': 1,
'options': dict({
}),
'pref_disable_new_entities': False,
'pref_disable_polling': False,
'source': 'zeroconf',
'title': 'CN11A1A00001',
'unique_id': 'CN11A1A00001',
'version': 1,
}),
'title': 'CN11A1A00001',
'type': <FlowResultType.CREATE_ENTRY: 'create_entry'>,
'version': 1,
})
# ---
# name: test_zeroconf_during_onboarding
FlowResultSnapshot({
'context': dict({
'source': 'zeroconf',
'unique_id': 'CN11A1A00001',
}),
'data': dict({
'host': '127.0.0.1',
'mac': 'AA:BB:CC:DD:EE:FF',
}),
'description': None,
'description_placeholders': None,
'flow_id': <ANY>,
'handler': 'elgato',
'minor_version': 1,
'options': dict({
}),
'result': ConfigEntrySnapshot({
'data': dict({
'host': '127.0.0.1',
'mac': 'AA:BB:CC:DD:EE:FF',
}),
'disabled_by': None,
'discovery_keys': dict({
}),
'domain': 'elgato',
'entry_id': <ANY>,
'minor_version': 1,
'options': dict({
}),
'pref_disable_new_entities': False,
'pref_disable_polling': False,
'source': 'zeroconf',
'title': 'CN11A1A00001',
'unique_id': 'CN11A1A00001',
'version': 1,
}),
'title': 'CN11A1A00001',
'type': <FlowResultType.CREATE_ENTRY: 'create_entry'>,
'version': 1,
})
# ---

View File

@ -5,12 +5,11 @@ from unittest.mock import AsyncMock, MagicMock
from elgato import ElgatoConnectionError
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components import zeroconf
from homeassistant.components.elgato.const import DOMAIN
from homeassistant.config_entries import SOURCE_USER, SOURCE_ZEROCONF
from homeassistant.const import CONF_HOST, CONF_SOURCE
from homeassistant.const import CONF_HOST, CONF_MAC, CONF_SOURCE
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResultType
@ -21,7 +20,6 @@ async def test_full_user_flow_implementation(
hass: HomeAssistant,
mock_elgato: MagicMock,
mock_setup_entry: AsyncMock,
snapshot: SnapshotAssertion,
) -> None:
"""Test the full manual user flow from start to finish."""
result = await hass.config_entries.flow.async_init(
@ -29,15 +27,22 @@ async def test_full_user_flow_implementation(
context={"source": SOURCE_USER},
)
assert result.get("type") is FlowResultType.FORM
assert result.get("step_id") == "user"
assert result["type"] is FlowResultType.FORM
assert result["step_id"] == "user"
result2 = await hass.config_entries.flow.async_configure(
result = await hass.config_entries.flow.async_configure(
result["flow_id"], user_input={CONF_HOST: "127.0.0.1"}
)
assert result2.get("type") is FlowResultType.CREATE_ENTRY
assert result2 == snapshot
assert result["type"] is FlowResultType.CREATE_ENTRY
config_entry = result["result"]
assert config_entry.unique_id == "CN11A1A00001"
assert config_entry.data == {
CONF_HOST: "127.0.0.1",
CONF_MAC: None,
}
assert not config_entry.options
assert len(mock_setup_entry.mock_calls) == 1
assert len(mock_elgato.info.mock_calls) == 1
@ -47,7 +52,6 @@ async def test_full_zeroconf_flow_implementation(
hass: HomeAssistant,
mock_elgato: MagicMock,
mock_setup_entry: AsyncMock,
snapshot: SnapshotAssertion,
) -> None:
"""Test the zeroconf flow from start to finish."""
result = await hass.config_entries.flow.async_init(
@ -64,9 +68,9 @@ async def test_full_zeroconf_flow_implementation(
),
)
assert result.get("description_placeholders") == {"serial_number": "CN11A1A00001"}
assert result.get("step_id") == "zeroconf_confirm"
assert result.get("type") is FlowResultType.FORM
assert result["description_placeholders"] == {"serial_number": "CN11A1A00001"}
assert result["step_id"] == "zeroconf_confirm"
assert result["type"] is FlowResultType.FORM
progress = hass.config_entries.flow.async_progress()
assert len(progress) == 1
@ -74,12 +78,19 @@ async def test_full_zeroconf_flow_implementation(
assert "context" in progress[0]
assert progress[0]["context"].get("confirm_only") is True
result2 = await hass.config_entries.flow.async_configure(
result = await hass.config_entries.flow.async_configure(
result["flow_id"], user_input={}
)
assert result2.get("type") is FlowResultType.CREATE_ENTRY
assert result2 == snapshot
assert result["type"] is FlowResultType.CREATE_ENTRY
config_entry = result["result"]
assert config_entry.unique_id == "CN11A1A00001"
assert config_entry.data == {
CONF_HOST: "127.0.0.1",
CONF_MAC: "AA:BB:CC:DD:EE:FF",
}
assert not config_entry.options
assert len(mock_setup_entry.mock_calls) == 1
assert len(mock_elgato.info.mock_calls) == 1
@ -97,9 +108,28 @@ async def test_connection_error(
data={CONF_HOST: "127.0.0.1"},
)
assert result.get("type") is FlowResultType.FORM
assert result.get("errors") == {"base": "cannot_connect"}
assert result.get("step_id") == "user"
assert result["type"] is FlowResultType.FORM
assert result["errors"] == {"base": "cannot_connect"}
assert result["step_id"] == "user"
# Recover from error
mock_elgato.info.side_effect = None
result = await hass.config_entries.flow.async_init(
DOMAIN,
context={"source": SOURCE_USER},
data={CONF_HOST: "127.0.0.2"},
)
assert result["type"] is FlowResultType.CREATE_ENTRY
config_entry = result["result"]
assert config_entry.unique_id == "CN11A1A00001"
assert config_entry.data == {
CONF_HOST: "127.0.0.2",
CONF_MAC: None,
}
assert not config_entry.options
async def test_zeroconf_connection_error(
@ -122,8 +152,8 @@ async def test_zeroconf_connection_error(
),
)
assert result.get("reason") == "cannot_connect"
assert result.get("type") is FlowResultType.ABORT
assert result["reason"] == "cannot_connect"
assert result["type"] is FlowResultType.ABORT
@pytest.mark.usefixtures("mock_elgato")
@ -138,8 +168,8 @@ async def test_user_device_exists_abort(
data={CONF_HOST: "127.0.0.1"},
)
assert result.get("type") is FlowResultType.ABORT
assert result.get("reason") == "already_configured"
assert result["type"] is FlowResultType.ABORT
assert result["reason"] == "already_configured"
@pytest.mark.usefixtures("mock_elgato")
@ -162,8 +192,8 @@ async def test_zeroconf_device_exists_abort(
),
)
assert result.get("type") is FlowResultType.ABORT
assert result.get("reason") == "already_configured"
assert result["type"] is FlowResultType.ABORT
assert result["reason"] == "already_configured"
entries = hass.config_entries.async_entries(DOMAIN)
assert entries[0].data[CONF_HOST] == "127.0.0.1"
@ -183,8 +213,8 @@ async def test_zeroconf_device_exists_abort(
),
)
assert result.get("type") is FlowResultType.ABORT
assert result.get("reason") == "already_configured"
assert result["type"] is FlowResultType.ABORT
assert result["reason"] == "already_configured"
entries = hass.config_entries.async_entries(DOMAIN)
assert entries[0].data[CONF_HOST] == "127.0.0.2"
@ -195,7 +225,6 @@ async def test_zeroconf_during_onboarding(
mock_elgato: MagicMock,
mock_setup_entry: AsyncMock,
mock_onboarding: MagicMock,
snapshot: SnapshotAssertion,
) -> None:
"""Test the zeroconf creates an entry during onboarding."""
result = await hass.config_entries.flow.async_init(
@ -212,8 +241,15 @@ async def test_zeroconf_during_onboarding(
),
)
assert result.get("type") is FlowResultType.CREATE_ENTRY
assert result == snapshot
assert result["type"] is FlowResultType.CREATE_ENTRY
config_entry = result["result"]
assert config_entry.unique_id == "CN11A1A00001"
assert config_entry.data == {
CONF_HOST: "127.0.0.1",
CONF_MAC: "AA:BB:CC:DD:EE:FF",
}
assert not config_entry.options
assert len(mock_setup_entry.mock_calls) == 1
assert len(mock_elgato.info.mock_calls) == 1