"""Test the Raspberry Pi integration.""" from unittest.mock import patch import pytest from homeassistant.components.raspberry_pi.const import DOMAIN from homeassistant.config_entries import ConfigEntryState from homeassistant.core import HomeAssistant from tests.common import MockConfigEntry, MockModule, mock_integration @pytest.fixture(autouse=True) def mock_rpi_power(): """Mock the rpi_power integration.""" with patch( "homeassistant.components.rpi_power.async_setup_entry", return_value=True, ): yield async def test_setup_entry(hass: HomeAssistant) -> None: """Test setup of a config entry.""" mock_integration(hass, MockModule("hassio")) # Setup the config entry config_entry = MockConfigEntry( data={}, domain=DOMAIN, options={}, title="Raspberry Pi", ) config_entry.add_to_hass(hass) assert not hass.config_entries.async_entries("rpi_power") with patch( "homeassistant.components.raspberry_pi.get_os_info", return_value={"board": "rpi"}, ) as mock_get_os_info, patch( "homeassistant.components.rpi_power.config_flow.new_under_voltage" ): assert await hass.config_entries.async_setup(config_entry.entry_id) await hass.async_block_till_done() assert len(mock_get_os_info.mock_calls) == 1 assert len(hass.config_entries.async_entries("rpi_power")) == 1 async def test_setup_entry_wrong_board(hass: HomeAssistant) -> None: """Test setup of a config entry with wrong board type.""" mock_integration(hass, MockModule("hassio")) # Setup the config entry config_entry = MockConfigEntry( data={}, domain=DOMAIN, options={}, title="Raspberry Pi", ) config_entry.add_to_hass(hass) with patch( "homeassistant.components.raspberry_pi.get_os_info", return_value={"board": "generic-x86-64"}, ) as mock_get_os_info: assert not await hass.config_entries.async_setup(config_entry.entry_id) await hass.async_block_till_done() assert len(mock_get_os_info.mock_calls) == 1 async def test_setup_entry_wait_hassio(hass: HomeAssistant) -> None: """Test setup of a config entry when hassio has not fetched os_info.""" mock_integration(hass, MockModule("hassio")) # Setup the config entry config_entry = MockConfigEntry( data={}, domain=DOMAIN, options={}, title="Raspberry Pi", ) config_entry.add_to_hass(hass) with patch( "homeassistant.components.raspberry_pi.get_os_info", return_value=None, ) as mock_get_os_info: assert not await hass.config_entries.async_setup(config_entry.entry_id) await hass.async_block_till_done() assert len(mock_get_os_info.mock_calls) == 1 assert config_entry.state == ConfigEntryState.SETUP_RETRY