Improve test coverage of deprecation helper (#101335)

This commit is contained in:
Erik Montnemery 2023-10-03 20:57:24 +02:00 committed by GitHub
parent cc7e35e299
commit 2627abb9ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4,68 +4,82 @@ from unittest.mock import MagicMock, Mock, patch
import pytest import pytest
from homeassistant.helpers.deprecation import ( from homeassistant.helpers.deprecation import (
deprecated_class,
deprecated_function, deprecated_function,
deprecated_substitute, deprecated_substitute,
get_deprecated, get_deprecated,
) )
class MockBaseClass: class MockBaseClassDeprecatedProperty:
"""Mock base class for deprecated testing.""" """Mock base class for deprecated testing."""
@property @property
@deprecated_substitute("old_property") @deprecated_substitute("old_property")
def new_property(self): def new_property(self):
"""Test property to fetch.""" """Test property to fetch."""
raise NotImplementedError() return "default_new"
class MockDeprecatedClass(MockBaseClass):
"""Mock deprecated class object."""
@property
def old_property(self):
"""Test property to fetch."""
return True
class MockUpdatedClass(MockBaseClass):
"""Mock updated class object."""
@property
def new_property(self):
"""Test property to fetch."""
return True
@patch("logging.getLogger") @patch("logging.getLogger")
def test_deprecated_substitute_old_class(mock_get_logger) -> None: def test_deprecated_substitute_old_class(mock_get_logger) -> None:
"""Test deprecated class object.""" """Test deprecated class object."""
class MockDeprecatedClass(MockBaseClassDeprecatedProperty):
"""Mock deprecated class object."""
@property
def old_property(self):
"""Test property to fetch."""
return "old"
mock_logger = MagicMock() mock_logger = MagicMock()
mock_get_logger.return_value = mock_logger mock_get_logger.return_value = mock_logger
mock_object = MockDeprecatedClass() mock_object = MockDeprecatedClass()
assert mock_object.new_property is True assert mock_object.new_property == "old"
assert mock_object.new_property is True
assert mock_logger.warning.called assert mock_logger.warning.called
assert len(mock_logger.warning.mock_calls) == 1 assert len(mock_logger.warning.mock_calls) == 1
@patch("logging.getLogger")
def test_deprecated_substitute_default_class(mock_get_logger) -> None:
"""Test deprecated class object."""
class MockDefaultClass(MockBaseClassDeprecatedProperty):
"""Mock updated class object."""
mock_logger = MagicMock()
mock_get_logger.return_value = mock_logger
mock_object = MockDefaultClass()
assert mock_object.new_property == "default_new"
assert not mock_logger.warning.called
@patch("logging.getLogger") @patch("logging.getLogger")
def test_deprecated_substitute_new_class(mock_get_logger) -> None: def test_deprecated_substitute_new_class(mock_get_logger) -> None:
"""Test deprecated class object.""" """Test deprecated class object."""
class MockUpdatedClass(MockBaseClassDeprecatedProperty):
"""Mock updated class object."""
@property
def new_property(self):
"""Test property to fetch."""
return "new"
mock_logger = MagicMock() mock_logger = MagicMock()
mock_get_logger.return_value = mock_logger mock_get_logger.return_value = mock_logger
mock_object = MockUpdatedClass() mock_object = MockUpdatedClass()
assert mock_object.new_property is True assert mock_object.new_property == "new"
assert mock_object.new_property is True
assert not mock_logger.warning.called assert not mock_logger.warning.called
@patch("logging.getLogger") @patch("logging.getLogger")
def test_config_get_deprecated_old(mock_get_logger) -> None: def test_config_get_deprecated_old(mock_get_logger) -> None:
"""Test deprecated class object.""" """Test deprecated config."""
mock_logger = MagicMock() mock_logger = MagicMock()
mock_get_logger.return_value = mock_logger mock_get_logger.return_value = mock_logger
@ -77,7 +91,7 @@ def test_config_get_deprecated_old(mock_get_logger) -> None:
@patch("logging.getLogger") @patch("logging.getLogger")
def test_config_get_deprecated_new(mock_get_logger) -> None: def test_config_get_deprecated_new(mock_get_logger) -> None:
"""Test deprecated class object.""" """Test deprecated config."""
mock_logger = MagicMock() mock_logger = MagicMock()
mock_get_logger.return_value = mock_logger mock_get_logger.return_value = mock_logger
@ -86,6 +100,22 @@ def test_config_get_deprecated_new(mock_get_logger) -> None:
assert not mock_logger.warning.called assert not mock_logger.warning.called
@deprecated_class("homeassistant.blah.NewClass")
class MockDeprecatedClass:
"""Mock class for deprecated testing."""
@patch("logging.getLogger")
def test_deprecated_class(mock_get_logger) -> None:
"""Test deprecated class."""
mock_logger = MagicMock()
mock_get_logger.return_value = mock_logger
MockDeprecatedClass()
assert mock_logger.warning.called
assert len(mock_logger.warning.mock_calls) == 1
def test_deprecated_function(caplog: pytest.LogCaptureFixture) -> None: def test_deprecated_function(caplog: pytest.LogCaptureFixture) -> None:
"""Test deprecated_function decorator. """Test deprecated_function decorator.