Add binary sensor tests to Minecraft Server (#102457)
This commit is contained in:
parent
9f3a733f73
commit
faa149b71a
3 changed files with 185 additions and 1 deletions
|
@ -745,7 +745,6 @@ omit =
|
|||
homeassistant/components/mikrotik/hub.py
|
||||
homeassistant/components/mill/climate.py
|
||||
homeassistant/components/mill/sensor.py
|
||||
homeassistant/components/minecraft_server/binary_sensor.py
|
||||
homeassistant/components/minio/minio_helper.py
|
||||
homeassistant/components/mjpeg/camera.py
|
||||
homeassistant/components/mjpeg/util.py
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
# serializer version: 1
|
||||
# name: test_binary_sensor[bedrock_mock_config_entry-BedrockServer-status_response1]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'device_class': 'connectivity',
|
||||
'friendly_name': 'Minecraft Server Status',
|
||||
'icon': 'mdi:lan',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'binary_sensor.minecraft_server_status',
|
||||
'last_changed': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'on',
|
||||
})
|
||||
# ---
|
||||
# name: test_binary_sensor[java_mock_config_entry-JavaServer-status_response0]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'device_class': 'connectivity',
|
||||
'friendly_name': 'Minecraft Server Status',
|
||||
'icon': 'mdi:lan',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'binary_sensor.minecraft_server_status',
|
||||
'last_changed': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'on',
|
||||
})
|
||||
# ---
|
||||
# name: test_binary_sensor_update[bedrock_mock_config_entry-BedrockServer-status_response1]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'device_class': 'connectivity',
|
||||
'friendly_name': 'Minecraft Server Status',
|
||||
'icon': 'mdi:lan',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'binary_sensor.minecraft_server_status',
|
||||
'last_changed': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'on',
|
||||
})
|
||||
# ---
|
||||
# name: test_binary_sensor_update[java_mock_config_entry-JavaServer-status_response0]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'device_class': 'connectivity',
|
||||
'friendly_name': 'Minecraft Server Status',
|
||||
'icon': 'mdi:lan',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'binary_sensor.minecraft_server_status',
|
||||
'last_changed': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'on',
|
||||
})
|
||||
# ---
|
128
tests/components/minecraft_server/test_binary_sensor.py
Normal file
128
tests/components/minecraft_server/test_binary_sensor.py
Normal file
|
@ -0,0 +1,128 @@
|
|||
"""Tests for Minecraft Server binary sensor."""
|
||||
from datetime import timedelta
|
||||
from unittest.mock import patch
|
||||
|
||||
from freezegun.api import FrozenDateTimeFactory
|
||||
from mcstatus import BedrockServer, JavaServer
|
||||
from mcstatus.status_response import BedrockStatusResponse, JavaStatusResponse
|
||||
import pytest
|
||||
from syrupy import SnapshotAssertion
|
||||
|
||||
from homeassistant.const import STATE_OFF
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .const import (
|
||||
TEST_BEDROCK_STATUS_RESPONSE,
|
||||
TEST_HOST,
|
||||
TEST_JAVA_STATUS_RESPONSE,
|
||||
TEST_PORT,
|
||||
)
|
||||
|
||||
from tests.common import async_fire_time_changed
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("mock_config_entry", "server", "status_response"),
|
||||
[
|
||||
("java_mock_config_entry", JavaServer, TEST_JAVA_STATUS_RESPONSE),
|
||||
("bedrock_mock_config_entry", BedrockServer, TEST_BEDROCK_STATUS_RESPONSE),
|
||||
],
|
||||
)
|
||||
async def test_binary_sensor(
|
||||
hass: HomeAssistant,
|
||||
mock_config_entry: str,
|
||||
server: JavaServer | BedrockServer,
|
||||
status_response: JavaStatusResponse | BedrockStatusResponse,
|
||||
request: pytest.FixtureRequest,
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test binary sensor."""
|
||||
mock_config_entry = request.getfixturevalue(mock_config_entry)
|
||||
mock_config_entry.add_to_hass(hass)
|
||||
|
||||
with patch(
|
||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.lookup",
|
||||
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
||||
), patch(
|
||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
||||
return_value=status_response,
|
||||
):
|
||||
assert await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("binary_sensor.minecraft_server_status") == snapshot
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("mock_config_entry", "server", "status_response"),
|
||||
[
|
||||
("java_mock_config_entry", JavaServer, TEST_JAVA_STATUS_RESPONSE),
|
||||
("bedrock_mock_config_entry", BedrockServer, TEST_BEDROCK_STATUS_RESPONSE),
|
||||
],
|
||||
)
|
||||
async def test_binary_sensor_update(
|
||||
hass: HomeAssistant,
|
||||
mock_config_entry: str,
|
||||
server: JavaServer | BedrockServer,
|
||||
status_response: JavaStatusResponse | BedrockStatusResponse,
|
||||
request: pytest.FixtureRequest,
|
||||
snapshot: SnapshotAssertion,
|
||||
freezer: FrozenDateTimeFactory,
|
||||
) -> None:
|
||||
"""Test binary sensor update."""
|
||||
mock_config_entry = request.getfixturevalue(mock_config_entry)
|
||||
mock_config_entry.add_to_hass(hass)
|
||||
|
||||
with patch(
|
||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.lookup",
|
||||
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
||||
), patch(
|
||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
||||
return_value=status_response,
|
||||
):
|
||||
assert await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
freezer.tick(timedelta(minutes=1))
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("binary_sensor.minecraft_server_status") == snapshot
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("mock_config_entry", "server", "status_response"),
|
||||
[
|
||||
("java_mock_config_entry", JavaServer, TEST_JAVA_STATUS_RESPONSE),
|
||||
("bedrock_mock_config_entry", BedrockServer, TEST_BEDROCK_STATUS_RESPONSE),
|
||||
],
|
||||
)
|
||||
async def test_binary_sensor_update_failure(
|
||||
hass: HomeAssistant,
|
||||
mock_config_entry: str,
|
||||
server: JavaServer | BedrockServer,
|
||||
status_response: JavaStatusResponse | BedrockStatusResponse,
|
||||
request: pytest.FixtureRequest,
|
||||
freezer: FrozenDateTimeFactory,
|
||||
) -> None:
|
||||
"""Test failed binary sensor update."""
|
||||
mock_config_entry = request.getfixturevalue(mock_config_entry)
|
||||
mock_config_entry.add_to_hass(hass)
|
||||
|
||||
with patch(
|
||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.lookup",
|
||||
return_value=server(host=TEST_HOST, port=TEST_PORT),
|
||||
), patch(
|
||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
||||
return_value=status_response,
|
||||
):
|
||||
assert await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
with patch(
|
||||
f"homeassistant.components.minecraft_server.api.{server.__name__}.async_status",
|
||||
side_effect=OSError,
|
||||
):
|
||||
freezer.tick(timedelta(minutes=1))
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done()
|
||||
assert (
|
||||
hass.states.get("binary_sensor.minecraft_server_status").state == STATE_OFF
|
||||
)
|
Loading…
Add table
Reference in a new issue