"""Tests for Minecraft Server diagnostics.""" from unittest.mock import patch from mcstatus import BedrockServer, JavaServer from mcstatus.responses import BedrockStatusResponse, JavaStatusResponse import pytest from syrupy.assertion 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 )