"""Testing for ScreenLogic diagnostics."""
from unittest.mock import DEFAULT, patch

from screenlogicpy import ScreenLogicGateway
from syrupy.assertion import SnapshotAssertion

from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr

from . import (
    DATA_FULL_CHEM,
    GATEWAY_DISCOVERY_IMPORT_PATH,
    MOCK_ADAPTER_MAC,
    stub_async_connect,
)

from tests.common import MockConfigEntry
from tests.components.diagnostics import get_diagnostics_for_config_entry
from tests.typing import ClientSessionGenerator


async def test_diagnostics(
    hass: HomeAssistant,
    hass_client: ClientSessionGenerator,
    mock_config_entry: MockConfigEntry,
    snapshot: SnapshotAssertion,
) -> None:
    """Test diagnostics."""
    mock_config_entry.add_to_hass(hass)

    device_registry = dr.async_get(hass)

    device_registry.async_get_or_create(
        config_entry_id=mock_config_entry.entry_id,
        connections={(dr.CONNECTION_NETWORK_MAC, MOCK_ADAPTER_MAC)},
    )
    with patch(
        GATEWAY_DISCOVERY_IMPORT_PATH,
        return_value={},
    ), patch.multiple(
        ScreenLogicGateway,
        async_connect=lambda *args, **kwargs: stub_async_connect(
            DATA_FULL_CHEM, *args, **kwargs
        ),
        is_connected=True,
        _async_connected_request=DEFAULT,
        get_debug=lambda self: {},
    ):
        assert await hass.config_entries.async_setup(mock_config_entry.entry_id)
        await hass.async_block_till_done()

        diag = await get_diagnostics_for_config_entry(
            hass, hass_client, mock_config_entry
        )

    assert diag == snapshot