diff --git a/tests/components/minecraft_server/test_config_flow.py b/tests/components/minecraft_server/test_config_flow.py index cca6d5d21ac..785905492c1 100644 --- a/tests/components/minecraft_server/test_config_flow.py +++ b/tests/components/minecraft_server/test_config_flow.py @@ -2,17 +2,22 @@ from unittest.mock import patch -from homeassistant.components.minecraft_server.api import ( - MinecraftServerAddressError, - MinecraftServerType, -) +from mcstatus import BedrockServer, JavaServer + +from homeassistant.components.minecraft_server.api import MinecraftServerType from homeassistant.components.minecraft_server.const import DEFAULT_NAME, DOMAIN from homeassistant.config_entries import SOURCE_USER from homeassistant.const import CONF_ADDRESS, CONF_NAME, CONF_TYPE from homeassistant.core import HomeAssistant from homeassistant.data_entry_flow import FlowResultType -from .const import TEST_ADDRESS +from .const import ( + TEST_ADDRESS, + TEST_BEDROCK_STATUS_RESPONSE, + TEST_HOST, + TEST_JAVA_STATUS_RESPONSE, + TEST_PORT, +) USER_INPUT = { CONF_NAME: DEFAULT_NAME, @@ -30,12 +35,14 @@ async def test_show_config_form(hass: HomeAssistant) -> None: assert result["step_id"] == "user" -async def test_address_validation_failed(hass: HomeAssistant) -> None: +async def test_address_validation_failure(hass: HomeAssistant) -> None: """Test error in case of a failed connection.""" with patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.__init__", - side_effect=[MinecraftServerAddressError, MinecraftServerAddressError], - return_value=None, + "homeassistant.components.minecraft_server.api.BedrockServer.lookup", + side_effect=ValueError, + ), patch( + "homeassistant.components.minecraft_server.api.JavaServer.lookup", + side_effect=ValueError, ): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT @@ -45,15 +52,17 @@ async def test_address_validation_failed(hass: HomeAssistant) -> None: assert result["errors"] == {"base": "cannot_connect"} -async def test_java_connection_failed(hass: HomeAssistant) -> None: +async def test_java_connection_failure(hass: HomeAssistant) -> None: """Test error in case of a failed connection to a Java Edition server.""" with patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.__init__", - side_effect=[MinecraftServerAddressError, None], - return_value=None, + "homeassistant.components.minecraft_server.api.BedrockServer.lookup", + side_effect=ValueError, ), patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.async_is_online", - return_value=False, + "homeassistant.components.minecraft_server.api.JavaServer.lookup", + return_value=JavaServer(host=TEST_HOST, port=TEST_PORT), + ), patch( + "homeassistant.components.minecraft_server.api.JavaServer.async_status", + side_effect=OSError, ): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT @@ -63,15 +72,14 @@ async def test_java_connection_failed(hass: HomeAssistant) -> None: assert result["errors"] == {"base": "cannot_connect"} -async def test_bedrock_connection_failed(hass: HomeAssistant) -> None: +async def test_bedrock_connection_failure(hass: HomeAssistant) -> None: """Test error in case of a failed connection to a Bedrock Edition server.""" with patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.__init__", - side_effect=[None, MinecraftServerAddressError], - return_value=None, + "homeassistant.components.minecraft_server.api.BedrockServer.lookup", + return_value=BedrockServer(host=TEST_HOST, port=TEST_PORT), ), patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.async_is_online", - return_value=False, + "homeassistant.components.minecraft_server.api.BedrockServer.async_status", + side_effect=OSError, ): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT @@ -81,19 +89,17 @@ async def test_bedrock_connection_failed(hass: HomeAssistant) -> None: assert result["errors"] == {"base": "cannot_connect"} -async def test_java_connection_succeeded(hass: HomeAssistant) -> None: +async def test_java_connection(hass: HomeAssistant) -> None: """Test config entry in case of a successful connection to a Java Edition server.""" with patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.__init__", - side_effect=[ - MinecraftServerAddressError, # async_step_user (Bedrock Edition) - None, # async_step_user (Java Edition) - None, # async_setup_entry - ], - return_value=None, + "homeassistant.components.minecraft_server.api.BedrockServer.lookup", + side_effect=ValueError, ), patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.async_is_online", - return_value=True, + "homeassistant.components.minecraft_server.api.JavaServer.lookup", + return_value=JavaServer(host=TEST_HOST, port=TEST_PORT), + ), patch( + "homeassistant.components.minecraft_server.api.JavaServer.async_status", + return_value=TEST_JAVA_STATUS_RESPONSE, ): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT @@ -106,15 +112,14 @@ async def test_java_connection_succeeded(hass: HomeAssistant) -> None: assert result["data"][CONF_TYPE] == MinecraftServerType.JAVA_EDITION -async def test_bedrock_connection_succeeded(hass: HomeAssistant) -> None: +async def test_bedrock_connection(hass: HomeAssistant) -> None: """Test config entry in case of a successful connection to a Bedrock Edition server.""" with patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.__init__", - side_effect=None, - return_value=None, + "homeassistant.components.minecraft_server.api.BedrockServer.lookup", + return_value=BedrockServer(host=TEST_HOST, port=TEST_PORT), ), patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.async_is_online", - return_value=True, + "homeassistant.components.minecraft_server.api.BedrockServer.async_status", + return_value=TEST_BEDROCK_STATUS_RESPONSE, ): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT @@ -130,9 +135,11 @@ async def test_bedrock_connection_succeeded(hass: HomeAssistant) -> None: async def test_recovery(hass: HomeAssistant) -> None: """Test config flow recovery (successful connection after a failed connection).""" with patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.__init__", - side_effect=[MinecraftServerAddressError, MinecraftServerAddressError], - return_value=None, + "homeassistant.components.minecraft_server.api.BedrockServer.lookup", + side_effect=ValueError, + ), patch( + "homeassistant.components.minecraft_server.api.JavaServer.lookup", + side_effect=ValueError, ): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT @@ -141,12 +148,11 @@ async def test_recovery(hass: HomeAssistant) -> None: assert result["errors"] == {"base": "cannot_connect"} with patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.__init__", - side_effect=None, - return_value=None, + "homeassistant.components.minecraft_server.api.BedrockServer.lookup", + return_value=BedrockServer(host=TEST_HOST, port=TEST_PORT), ), patch( - "homeassistant.components.minecraft_server.api.MinecraftServer.async_is_online", - return_value=True, + "homeassistant.components.minecraft_server.api.BedrockServer.async_status", + return_value=TEST_BEDROCK_STATUS_RESPONSE, ): result2 = await hass.config_entries.flow.async_configure( flow_id=result["flow_id"], user_input=USER_INPUT