Skip to content

Commit

Permalink
Patch library instead of own code in Minecraft Server config flow tes…
Browse files Browse the repository at this point in the history
…ts (#102018)

* Patch library instead of own code in config flow tests

* Fix patch location
  • Loading branch information
elmurato authored Oct 16, 2023
1 parent 23b379b commit 4130980
Showing 1 changed file with 51 additions and 45 deletions.
96 changes: 51 additions & 45 deletions tests/components/minecraft_server/test_config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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.JavaServer.lookup",
return_value=JavaServer(host=TEST_HOST, port=TEST_PORT),
), patch(
"homeassistant.components.minecraft_server.api.MinecraftServer.async_is_online",
return_value=True,
"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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 4130980

Please sign in to comment.