core/tests/components/minecraft_server/test_diagnostics.py

70 lines
2.2 KiB
Python

"""Tests for Minecraft Server diagnostics."""
from unittest.mock import patch
from mcstatus import BedrockServer, JavaServer
from mcstatus.status_response import BedrockStatusResponse, JavaStatusResponse
import pytest
from syrupy import SnapshotAssertion
from homeassistant.core import HomeAssistant
from .const import (
TEST_BEDROCK_STATUS_RESPONSE,
TEST_HOST,
TEST_JAVA_STATUS_RESPONSE,
TEST_PORT,
)
from tests.common import MockConfigEntry
from tests.components.diagnostics import get_diagnostics_for_config_entry
from tests.typing import ClientSessionGenerator
@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_config_entry_diagnostics(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
mock_config_entry: MockConfigEntry,
server: JavaServer | BedrockServer,
status_response: JavaStatusResponse | BedrockStatusResponse,
request: pytest.FixtureRequest,
snapshot: SnapshotAssertion,
) -> None:
"""Test fetching of the config entry diagnostics."""
# Use 'request' fixture to access 'mock_config_entry' fixture, as it cannot be used directly in 'parametrize'.
mock_config_entry = request.getfixturevalue(mock_config_entry)
mock_config_entry.add_to_hass(hass)
if server.__name__ == "JavaServer":
lookup_function_name = "async_lookup"
else:
lookup_function_name = "lookup"
# Setup mock entry.
with (
patch(
f"mcstatus.server.{server.__name__}.{lookup_function_name}",
return_value=server(host=TEST_HOST, port=TEST_PORT),
),
patch(
f"mcstatus.server.{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()
# Test diagnostics.
assert (
await get_diagnostics_for_config_entry(hass, hass_client, mock_config_entry)
== snapshot
)