"""Tests for the system info helper.""" import json import os from unittest.mock import patch import pytest from homeassistant.const import __version__ as current_version from homeassistant.core import HomeAssistant from homeassistant.helpers.system_info import async_get_system_info, is_official_image async def test_is_official_image() -> None: """Test is_official_image.""" is_official_image.cache_clear() with patch("homeassistant.helpers.system_info.os.path.isfile", return_value=True): assert is_official_image() is True is_official_image.cache_clear() with patch("homeassistant.helpers.system_info.os.path.isfile", return_value=False): assert is_official_image() is False async def test_get_system_info(hass: HomeAssistant) -> None: """Test the get system info.""" info = await async_get_system_info(hass) assert isinstance(info, dict) assert info["version"] == current_version assert info["user"] is not None assert json.dumps(info) is not None async def test_get_system_info_supervisor_not_available( hass: HomeAssistant, caplog: pytest.LogCaptureFixture ) -> None: """Test the get system info when supervisor is not available.""" hass.config.components.add("hassio") with patch("platform.system", return_value="Linux"), patch( "homeassistant.helpers.system_info.is_docker_env", return_value=True ), patch( "homeassistant.helpers.system_info.is_official_image", return_value=True ), patch( "homeassistant.components.hassio.is_hassio", return_value=True ), patch( "homeassistant.components.hassio.get_info", return_value=None ), patch( "homeassistant.helpers.system_info.cached_get_user", return_value="root" ): info = await async_get_system_info(hass) assert isinstance(info, dict) assert info["version"] == current_version assert info["user"] is not None assert json.dumps(info) is not None assert info["installation_type"] == "Home Assistant Supervised" assert "No Home Assistant Supervisor info available" in caplog.text async def test_get_system_info_supervisor_not_loaded(hass: HomeAssistant) -> None: """Test the get system info when supervisor is not loaded.""" with patch("platform.system", return_value="Linux"), patch( "homeassistant.helpers.system_info.is_docker_env", return_value=True ), patch( "homeassistant.helpers.system_info.is_official_image", return_value=True ), patch( "homeassistant.components.hassio.get_info", return_value=None ), patch.dict( os.environ, {"SUPERVISOR": "127.0.0.1"} ): info = await async_get_system_info(hass) assert isinstance(info, dict) assert info["version"] == current_version assert info["user"] is not None assert json.dumps(info) is not None assert info["installation_type"] == "Unsupported Third Party Container" async def test_container_installationtype(hass: HomeAssistant) -> None: """Test container installation type.""" with patch("platform.system", return_value="Linux"), patch( "homeassistant.helpers.system_info.is_docker_env", return_value=True ), patch( "homeassistant.helpers.system_info.is_official_image", return_value=True ), patch( "homeassistant.helpers.system_info.cached_get_user", return_value="root" ): info = await async_get_system_info(hass) assert info["installation_type"] == "Home Assistant Container" with patch("platform.system", return_value="Linux"), patch( "homeassistant.helpers.system_info.is_docker_env", return_value=True ), patch( "homeassistant.helpers.system_info.is_official_image", return_value=False ), patch( "homeassistant.helpers.system_info.cached_get_user", return_value="user" ): info = await async_get_system_info(hass) assert info["installation_type"] == "Unsupported Third Party Container" async def test_getuser_keyerror(hass: HomeAssistant) -> None: """Test getuser keyerror.""" with patch( "homeassistant.helpers.system_info.cached_get_user", side_effect=KeyError ): info = await async_get_system_info(hass) assert info["user"] is None