"""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 )