"""Test Matter sensors.""" from unittest.mock import MagicMock from matter_server.client.models.node import MatterNode import pytest from homeassistant.core import HomeAssistant from .common import ( set_node_attribute, setup_integration_with_node_fixture, trigger_subscription_callback, ) @pytest.fixture(name="flow_sensor_node") async def flow_sensor_node_fixture( hass: HomeAssistant, matter_client: MagicMock ) -> MatterNode: """Fixture for a flow sensor node.""" return await setup_integration_with_node_fixture(hass, "flow-sensor", matter_client) @pytest.fixture(name="humidity_sensor_node") async def humidity_sensor_node_fixture( hass: HomeAssistant, matter_client: MagicMock ) -> MatterNode: """Fixture for a humidity sensor node.""" return await setup_integration_with_node_fixture( hass, "humidity-sensor", matter_client ) @pytest.fixture(name="light_sensor_node") async def light_sensor_node_fixture( hass: HomeAssistant, matter_client: MagicMock ) -> MatterNode: """Fixture for a light sensor node.""" return await setup_integration_with_node_fixture( hass, "light-sensor", matter_client ) @pytest.fixture(name="pressure_sensor_node") async def pressure_sensor_node_fixture( hass: HomeAssistant, matter_client: MagicMock ) -> MatterNode: """Fixture for a pressure sensor node.""" return await setup_integration_with_node_fixture( hass, "pressure-sensor", matter_client ) @pytest.fixture(name="temperature_sensor_node") async def temperature_sensor_node_fixture( hass: HomeAssistant, matter_client: MagicMock ) -> MatterNode: """Fixture for a temperature sensor node.""" return await setup_integration_with_node_fixture( hass, "temperature-sensor", matter_client ) # This tests needs to be adjusted to remove lingering tasks @pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_sensor_null_value( hass: HomeAssistant, matter_client: MagicMock, flow_sensor_node: MatterNode, ) -> None: """Test flow sensor.""" state = hass.states.get("sensor.mock_flow_sensor_flow") assert state assert state.state == "0.0" set_node_attribute(flow_sensor_node, 1, 1028, 0, None) await trigger_subscription_callback(hass, matter_client) state = hass.states.get("sensor.mock_flow_sensor_flow") assert state assert state.state == "unknown" # This tests needs to be adjusted to remove lingering tasks @pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_flow_sensor( hass: HomeAssistant, matter_client: MagicMock, flow_sensor_node: MatterNode, ) -> None: """Test flow sensor.""" state = hass.states.get("sensor.mock_flow_sensor_flow") assert state assert state.state == "0.0" set_node_attribute(flow_sensor_node, 1, 1028, 0, 20) await trigger_subscription_callback(hass, matter_client) state = hass.states.get("sensor.mock_flow_sensor_flow") assert state assert state.state == "2.0" # This tests needs to be adjusted to remove lingering tasks @pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_humidity_sensor( hass: HomeAssistant, matter_client: MagicMock, humidity_sensor_node: MatterNode, ) -> None: """Test humidity sensor.""" state = hass.states.get("sensor.mock_humidity_sensor_humidity") assert state assert state.state == "0.0" set_node_attribute(humidity_sensor_node, 1, 1029, 0, 4000) await trigger_subscription_callback(hass, matter_client) state = hass.states.get("sensor.mock_humidity_sensor_humidity") assert state assert state.state == "40.0" # This tests needs to be adjusted to remove lingering tasks @pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_light_sensor( hass: HomeAssistant, matter_client: MagicMock, light_sensor_node: MatterNode, ) -> None: """Test light sensor.""" state = hass.states.get("sensor.mock_light_sensor_illuminance") assert state assert state.state == "1.3" set_node_attribute(light_sensor_node, 1, 1024, 0, 3000) await trigger_subscription_callback(hass, matter_client) state = hass.states.get("sensor.mock_light_sensor_illuminance") assert state assert state.state == "2.0" # This tests needs to be adjusted to remove lingering tasks @pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_pressure_sensor( hass: HomeAssistant, matter_client: MagicMock, pressure_sensor_node: MatterNode, ) -> None: """Test pressure sensor.""" state = hass.states.get("sensor.mock_pressure_sensor_pressure") assert state assert state.state == "0.0" set_node_attribute(pressure_sensor_node, 1, 1027, 0, 1010) await trigger_subscription_callback(hass, matter_client) state = hass.states.get("sensor.mock_pressure_sensor_pressure") assert state assert state.state == "101.0" # This tests needs to be adjusted to remove lingering tasks @pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_temperature_sensor( hass: HomeAssistant, matter_client: MagicMock, temperature_sensor_node: MatterNode, ) -> None: """Test temperature sensor.""" state = hass.states.get("sensor.mock_temperature_sensor_temperature") assert state assert state.state == "21.0" set_node_attribute(temperature_sensor_node, 1, 1026, 0, 2500) await trigger_subscription_callback(hass, matter_client) state = hass.states.get("sensor.mock_temperature_sensor_temperature") assert state assert state.state == "25.0"