Skip to content

Commit

Permalink
Add binary sensor tests to Minecraft Server (home-assistant#102457)
Browse files Browse the repository at this point in the history
  • Loading branch information
elmurato committed Oct 21, 2023
1 parent 9f3a733 commit faa149b
Show file tree
Hide file tree
Showing 3 changed files with 185 additions and 1 deletion.
1 change: 0 additions & 1 deletion .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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 changes: 128 additions & 0 deletions tests/components/minecraft_server/test_binary_sensor.py
Original file line number Diff line number Diff line change
@@ -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
)

0 comments on commit faa149b

Please sign in to comment.