"""Tests for the packages component skip_update functionality.""" from pathlib import Path from typing import Any from unittest.mock import MagicMock from esphome.components.packages import do_packages_pass from esphome.const import CONF_FILES, CONF_PACKAGES, CONF_REFRESH, CONF_URL def test_packages_skip_update_true( mock_clone_or_update: MagicMock, mock_load_yaml: MagicMock ) -> None: """Test that packages don't update when skip_update=True.""" # Setup mocks with MagicMock() as mock_is_file: mock_is_file.return_value = True Path.is_file = mock_is_file config: dict[str, Any] = { CONF_PACKAGES: { "test_package": { CONF_URL: "https://github.com/test/repo", CONF_FILES: ["test.yaml"], CONF_REFRESH: "1d", } } } # Call with skip_update=True do_packages_pass(config, skip_update=True) # Verify clone_or_update was called with refresh=None mock_clone_or_update.assert_called_once() call_args = mock_clone_or_update.call_args assert call_args.kwargs["refresh"] is None def test_packages_skip_update_false( mock_clone_or_update: MagicMock, mock_load_yaml: MagicMock ) -> None: """Test that packages update when skip_update=False.""" # Setup mocks with MagicMock() as mock_is_file: mock_is_file.return_value = True Path.is_file = mock_is_file config: dict[str, Any] = { CONF_PACKAGES: { "test_package": { CONF_URL: "https://github.com/test/repo", CONF_FILES: ["test.yaml"], CONF_REFRESH: "1d", } } } # Call with skip_update=False (default) do_packages_pass(config, skip_update=False) # Verify clone_or_update was called with actual refresh value mock_clone_or_update.assert_called_once() call_args = mock_clone_or_update.call_args assert call_args.kwargs["refresh"] == "1d" def test_packages_default_no_skip( mock_clone_or_update: MagicMock, mock_load_yaml: MagicMock ) -> None: """Test that packages update by default when skip_update not specified.""" # Setup mocks with MagicMock() as mock_is_file: mock_is_file.return_value = True Path.is_file = mock_is_file config: dict[str, Any] = { CONF_PACKAGES: { "test_package": { CONF_URL: "https://github.com/test/repo", CONF_FILES: ["test.yaml"], CONF_REFRESH: "1d", } } } # Call without skip_update parameter do_packages_pass(config) # Verify clone_or_update was called with actual refresh value mock_clone_or_update.assert_called_once() call_args = mock_clone_or_update.call_args assert call_args.kwargs["refresh"] == "1d"